我们都知道,TCP发送的报文段是要交给IP层传送的,但IP层只能提供尽最大努力服务。也就是说TCP下面的网络所提供的是不可靠传输。因此TCP必须采取适当的策略。而定时器就发挥作用。
TCP管理的4个不同的定时器:
1.重传定时器:用于当希望收到另一端的确认。
2.坚持定时器:使窗口大小信息保持不断流动。
3.保活定时器:检测TCP空闲连接的另一端何时崩溃或重启。
4.2MSL定时器:测量一个连接处于TIME_WAIT状态的时间。MSL(报文段最大生存时间)
重传定时器
为了防止丢失数据报文段或确认报文段,当 TCP 发送报文段时,启动了特定报文段的重传计时器,若在计时器超时之前收到对报文段的确认,则撤销计时器。若收到特定报文段的确认之前计时器已经超时,则重传该报文,并把计时器复位。这里最重要的是超时的时间计算,有关该时间的请查阅具体的算法,这里不再进行记录。
坚持定时器
坚持定时器主要是解决零窗口大小通知可能导致的死锁问题。刚开始接收端向发送端发送了一个零窗口报文段。在不久之后,如果接收端的缓存区有一定的空间可以接收数据,此时接收端就会向发送端发送了一个非零窗口大小的报文段(即窗口更新),但是这个非零窗口大小的报文段在传输过程中丢失,导致发送端无法接收到该非零窗口大小的报文段。因此,发送端就会一直处于等待非零窗口大小的报文端通知,由于接收端已经发送了非零窗口大小的报文段,而且并不知道该报文段在传输过程中丢失,则接收端会一直处于等待接收数据状态,如果没有任何措施的话,这个死锁的局面会一直延续下去。
为了解决上面这个问题,TCP 为每一个连接设有一个坚持定时器(也叫持续计数器)。当发送端收到