TCP连接与拥塞控制

tcp三次握手,四次挥手以及tcp拥塞控制

tcp三次握手

tcp

目的:建立tcp链接

结果:建议一条全双工信道,即双方都能确保自己的收/发信道通畅

过程:

  1. Client发送SYN给Host,Host收到SYN

    此时client无法获取任何有关自己收/发信道的讯息

    Host收到SYN,于是可以确认自己的接收信道通畅

  2. Host向Client发送SYN以及ACK,Client收到

    由于Client发送的SYN有了ACK,则可以确认自己发送信道通畅

    同时由于收到了Host的消息,于是可以确认自己接收信道通畅。

    至此Client方的两条信道确认完毕,Host方还有发送信道没有确认

  3. Client向Host发送ACK(同时也可以携带数据),Host收到

    Host发送的SYN有了ACK,于是确认自己的发送信道通畅

tcp四次挥手

tcp-1

目的:断开tcp连接

结果:双方都知晓连接中再无数据传输,并断开连接

过程:

  1. A传输完所有数据后,向B发送FIN,B收到FIN

    此时还无法保证双方都知晓“A->B方向已无数据”,因为此FIN可能丢失

  2. B向A放回ACK,A收到

    B收到FIN,知晓“A->B方向已无数据”,并发送ACK给A

    A收到ACK后,知晓了自己的FIN已送达,于是可以彻底关闭自己的发送信道

3, 4 同理于1, 2

tcp拥塞控制

目的:为了防止网络进入拥塞状态,每个发送者需要控制自己的发送频率

方法:每个发送者维护一个发送窗口,当网络空闲时,这个窗口会慢慢变大,网络发生拥塞时该窗口会缩小

具体算法:

  1. 每个发送者维护一个拥塞窗口cwnd(Congest Window),和一个慢启动阈值sshthresh(Slow Start threshold)

  2. 慢开始状态

    初始cwnd设置为1,每当一个报文按时到达且cwnd小于sshthresh时,则指数增加cwnd(cwnd *= 2)

  3. 拥塞避免状态

    当一个报文按时到达,但此时cwnd已经超过了sshthresh,则线性增加cwnd(cwnd *= 1)

  4. 快速恢复状态

    当报文传输超时时,意味网络可能发生拥塞

    此时重置cwnd为初始值(1),同时将sshthresh减半(sshthresh /= 2)

cwnd变化曲线

image-20220422155535870

参考资料:

  1. 计算机网络第35讲-TCP的拥塞控制(计算机网络简明教程及仿真实验)_哔哩哔哩_bilibili