四.传输层
(1)可靠传输
①处理包出错
引入***机制
②处理丢包
引入超时重传机制(会导致冗余传输,以***区分,要求***空间足够大)
③流量控制
Stop and Wait方式的传输效率太低
滑动窗口机制:
GO-BACK-N重传机制
按序号接受,乱序的包不接受
Example:
Selective-repeat重传机制
哪个丢重传哪个
Example:
(2)UDP(用户数据报协议)
UDP格式:
UDP校验和:
最高位的进位1要加到checksum尾部再计算一次
(3)TCP(传输控制协议)
①TCP包头
***:
发送***:整个segment的第一个byte的***
ACK***:下一个想要接收的字节的***
②估计RTT
③TCP连接建立与终止
建立:
Step1:
TCP服务器进程先创建传输控制块TCB,时刻准备接受客户进程的连接请求,此时服务器就进入了LISTEN(监听)状态;
Step2:
TCP客户进程也是先创建传输控制块TCB,然后向服务器发出连接请求报文,这是报文首部中的同部位SYN=1,同时选择一个初始*** seq=x ,此时,TCP客户端进程进入了 SYN-SENT(同步已发送状态)状态。TCP规定,SYN报文段(SYN=1的报文段)不能携带数据,但需要消耗掉一个序号。
Step3:
TCP服务器收到请求报文后,如果同意连接,则发出确认报文。确认报文中应该 ACK=1,SYN=1,确认号是ack=x+1,同时也要为自己初始化一个*** seq=y,此时,TCP服务器进程进入了SYN-RCVD(同步收到)状态。这个报文也不能携带数据,但是同样要消耗一个序号。
Step4:
TCP客户进程收到确认后,还要向服务器给出确认。确认报文的ACK=1,ack=y+1,自己的***seq=x+1,此时,TCP连接建立,客户端进入ESTABLISHED(已建立连接)状态。TCP规定,ACK报文段可以携带数据,但是如果不携带数据则不消耗序号。
当服务器收到客户端的确认后也进入ESTABLISHED状态,此后双方就可以开始通信了。
终止:
四次挥手后还要等待一个TIME_WAIT时间
④TCP的流控制
动态的滑动窗口(信用量机制)
对于发送方,在接收到ACK后去读RWND,会根据需要移动窗口来保证发送大小不超过接收方缓冲区
⑤TCP的拥塞控制
RWND只考虑了端设备的缓冲区,没有考虑网络状态
(i)慢启动阶段
每收到一个ACK.拥塞窗口大小加一,等效于每经过一次RTT,拥塞窗口大小乘二
(ii)拥塞避免阶段
方法:“加性增,乘性减”(AIMD)
加性增:超过阈值后,每次加一
乘性减:若丢包(不太严重),则阈值和拥塞窗口都减半,进入拥塞避免阶段;若超时(严重),则阈值为CWND的一半,CWND直接减为1,进入慢启动阶段
(iii)快恢复