TCP/IP协议簇学习笔记(12)TCP的4个定时器

对于每个TCP连接,TCP会管理4个不同的定时器

  • 超时重传定时器
  • 坚持定时器
  • 保活定时器
  • 2MSL定时器
超时重传定时器

目的:为了防止报文丢失,希望在超时时间内收到ACK
2个方面

  • 超时时间确定
  • 重传机制

超时时间确定以后结合lwip讲解,本篇介绍重传机制
有3种情况需要发送端重传,分别对应下图

  • 发送端数据丢失失
    TCP/IP协议簇学习笔记(12)TCP的4个定时器
  • 接收端确认应答丢失
    TCP/IP协议簇学习笔记(12)TCP的4个定时器
  • 发送端收到3个同样的确认应答(快速重传)
    TCP/IP协议簇学习笔记(12)TCP的4个定时器
坚持定时器

TCP/IP协议簇学习笔记(12)TCP的4个定时器
目的:解决滑动窗口为0可能导致的死锁
当接收方由于某些原因处理不过来数据时,缓冲区填满,此时滑动窗口为0,过段时间后,当滑动窗口不为0时,接收方会发送一个串口更新通知给发送方告知对方可以发送数据流,但是如果这个更新通知丢失的话就无法继续发送数据了,为了避免这种情况,发送方会再收到滑动窗口为0时启动坚持定时器,时间间隔是超时重传定时器的时间,当时间到时就发送一个窗口探测报文,该报文不需要确认,用来提醒接收端,窗口更新报文已经丢失,请重发。若依然没反应,则加倍时间间隔,最大到60s发送一个窗口探测报文。

保活定时器

目的:检测TCP双方在长时间没有数据交互情况下连接故障问题
服务器每收到一次客户端tcp数据就重置保活定时器,如果2小时没有收到客户端数据,就发送一个探测报文,以后每75s发送一次,如果连续10次发送探测报文都没有收到客户端回应则服务器可以断开连接。

2MSL定时器

TCP/IP协议簇学习笔记(12)TCP的4个定时器
目的:等待足够的时间,防止已失效的连接出现在下一次连接中。
主动发起关闭的一方在接收到对方发送的FIN+ACK后进入TIME_WAIT状态,此时,主动发起关闭的一方发送ACK应答,让对方有足够的时间收到ACK,并且,如果ACK丢失的话,对方会再次发送FIN+ACK,此时,主动关闭的一方会重发ACK,并重启2MSL定时器,直到,直到双方动进入CLOSE状态。如果超过2MSL,任何状态都将丢弃。