运输层
运输层概述
运输层协议是端到端协议
主要的两个协议
UDP/TCP
运输层端口号,复用和分用的概念
由于运行在电脑的进程的标识符是PID,在网络上的是不同的操作系统,使用不同格式的进程标识符
TCP/IP使用端口号进行区分不同的应用进程
端口号是16比特
0~65535
DNS服务器
使用UDP协议的方式进行访问
TCP和UDP之间关系
UDP是不负责的,但是TCP是负责的
也就是说TCP是可靠的传输
UDP可以单播,多播,广播
但是TCP仅支持单播
TCP是全双工通信
当传输的过程中出现了误码,UDP接受方只会识别出错误,但是不会对错误做任何事情
TCP的流量控制
下面是一个接收方对发送方进行流量控制的案例
最开始滑动窗口是300字节,也就是1~100,101~200,201~300分别是3个TCP数据包
从第一个开始发送 ,当发送到seq(数据的下标)=201,数据丢失,然后使用这个时候接收方,发送
ACK=1 这个代表使用TCP接受信息
ack=201 这个表示该接受下表为201开始的数据了
rwnd=300 这个表示自己的滑动窗口是300,修改发送方的滑动窗口,这个时候就达到了控制流量的目的
接收方接受到这个消息过后,会删除1~200的缓存
当超时的时候就会重新发送201~300的数据包
零窗口通知
为了防止零窗口的出现,导致两方都再等对方发信息,这个时候使用零窗口通知 的方式,防止相互的等待防止死锁
发送窗口的选择
TCP拥塞控制
接下来我们讨论,拥塞处理的算法
慢开始 拥塞避免
这个的意思就是说,发送方维护了一个拥塞窗口,拥塞窗口的大小取决于网络的好坏
当没有网络拥塞发生的时候就应该增加拥塞窗口的大小
需要设定一个满开始门限的初始值,用于判断使用什么算法,将其与发送窗口发小作对比。但是这个的结果只有两种一种是慢开始算法,另一种是拥塞避免
拥塞窗口是几就可以发送几个
下面是对拥塞控制的算法解释
先是使用慢开始算法,使其成指数增加,但是由于到达了门限值,使用拥塞避免算法,让其线性增加。当发现网络拥堵的时候,就将门限值,设置为当时滑动窗口大小的一半,让滑动窗口的大小变成一
快重传
当发送方接收到了三个连续的对第二个的重复确认,这个时候该使用快重传,也就是重发3号数据段。这种情况下,就是提前发送了数据
快恢复
四种算法的总结
TCP超时重传时间的选择
TCP可靠传输的实现
TCP基于以字节为单位的滑动窗口
发送窗口
请注意前沿和后沿的位置
后沿移动的两种状态
向前移动
接收到了确认消息
不动
没有接收到确认信息
前沿的移动情况
通常是向前移动的
接受到了确认西信息,而且没有改变滑动窗口的大小,或者滑动窗口的大小变大了,或者虽然变小了,但是还是往前移动了、
不动
没有接受到新的信息
接收了新的信息,发送窗口缩小了,也就是发送窗口正好没有动
向后收缩
不太赞成这样做
代码的编写
使用三个指针
接收窗口
总结
TCP的运输连接管理
TCP连接
TCP三报文握手建立连接
为什么不是两报文握手?
注意下面这种情况
TCP连接释放
保活计时器
作用
就是为了防止TCP客户端出现错误之后,服务端一直等待
首部格式
源端口
用于标识发送该TCP报文的应用进程
目的的端口号
用来标志接受TCP的报文段的应用进程
序号字段
确认号
窗口
应该从接受窗口中和发送窗口中取小者