5.1 运输层概述
5.2 运输层端口号、复用与分用的概念
5.2.1 端口号
5.2.2 发送方的复用和接收方的分用
5.3 UDP和TCP的对比
- UDP不会对应用层报文进行任何修改,在传送的过程中只会增加和移除UDP首部,所以是面向应用报文的。
- TCP 协议中,发送方的TCP把应用层交付下来的数据块看成一连串的字节流,编号并存储在发送缓存中,TCP根据发送策略选取一部分字节流并添加TCP首部发送出去。接收方的TCP接受后将其转变为字节流存在缓存中并根据策略发送。发送方发送的数据块和接收方接受到的数据块个数不用相同,保证字节流相同即可。
5.4 TCP流量控制
假设初始滑动窗口为400字节,TCP数据报文段最大接受100字节,B主机针对自己缓存中剩余空间的情况对主机A进行流量控制,具体如下:
主机A收到0窗口的通知后就会启动一个持续计时器,作用是防止B主机发出的信息丢失造成的死锁。需要注意的是TCP协议规定,即时接收窗口为0,也必须接受0窗口探测报文段,确认报文段以及携带紧急数据的报文段。
如果0窗口探测报文丢失,也不会造成死锁,因为存在重传计时器。
5.5 TCP拥塞控制
5.5.1 定义
5.5.2 拥塞控制算法
慢开始:
在慢开始算法中,发送方每接收到一个对新报文段的确认时,就将拥塞窗口+1,直到拥塞窗口增加到慢开始门限时执行拥塞避免算法。
拥塞避免:
每次传输轮次结束后,拥塞窗口只能线性+1。当发生超时重传时,很可能网络发送了拥塞,则将慢开始门限调整为发送拥塞时拥塞窗口的一般,并且将拥塞窗口重新设置为1,重新开始慢开始算法。
快重传算法:
快恢复算法:
5.6 TCP超时重传时间的选择
5.6.1 RTO的选择标准
RTO时间比RTT短:
RTO时间远大于RTT:
结论: RTO应该略大于RTT,但由于每次报文传输的RTT都不一定相同,所以超时重传时间不能根据某次传输的RTT决定。
5.6.2 RTO的计算方法
可以利用每次测得的RTT样本,计算加权平均往返时间RTTs(平滑的往返时间)。
5.6.3 RTT的测量方法
5.7 TCP可靠传输的实现
TCP基于以字节为单位的滑动窗口来实现可靠传输。
如何描述发送窗口的状态?
5.8 TCP的传输连接管理
5.8.1 TCP的连接建立
- TCP服务器进程先创建传输控制块,然后进入监听状态,存储TCP传输中的重要信息,内容如下:
-
TCP客户端进程首先也是创建传输控制块,然后向服务器进程发送TCP连接请求报文段,进入同步已发送状态,TCP连接请求报文段的同步位SYN设置为1,表明是一个TCP连接请求报文段,序号字段seq设置为一个初始值x,作为TCP客户进程的初始序号,TCP规定SYN被设置为1的报文段不能携带数据,但是要消耗一个序号。
-
TCP服务进程收到报文后,发送TCP连接请求确认报文段,进入同步已接收状态,SYN和确认位ACK都为1,表面是一个TCP连接请求确认报文段,序号值seq设置为了一个初始序号y, 作为TCP服务进程选择的初始序号,确认号字段ack的值被设置为了x+1,这是对 TCP客户进程所选择的初始序号的确认。
-
TCP客户进程收到TCP服务进程发来的确认报文段后再向TCP服务器发送一个普通的TCP确认报文段,进入连接已建立状态。TCP规定普通的TCP确认报文段可以携带数据,如果不携带数据则不消耗序号,下一个发送的报文段序号不变。
-
TCP服务器收到确认报文段后进入连接已建立状态,可以进行数据传输。
为什么要“三报文”握手,而不是“两报文”握手,最后一次的确认是否多余?
5.8.2 TCP的连接释放
为什么需要时间等待?
保活计时器:
5.9 TCP报文段的首部格式
由于二进制0101=十进制5,TCP报文段以4字节为单位,所以一共5 * 4=20字节