计算机网络(三)传输层—TCP四种定时器

时间:2022-12-23 14:33:57

TCP四种定时器

1) 重传定时器

作用:保证可靠性传输

解决:每发送一个报文段就会启动重传定时器,如果在定时器时间到后还没收到对该报文段的确认,就重传该报文段,并将重传定时器复位。如果在定时器时间内收到确认则撤销该报文段的重传定时器。

2) 坚持定时器

作用:主要用来解决零窗口大小通知可能导致的死锁问题。

死锁问题:如果接收端在向发送端发送了零窗口报文段后不久,接收端的接收缓存有了一定的存储空间,则向发送端发送一个非零窗口大小的报文段,然而这个报文段在传送过程中丢失了,发送端没有收到该报文段,就一直等待接收端发送非零窗口的报文通知,而接收端并不知道报文段丢失,而是一直等待发送端发送数据,这样就会发生死锁问题。

解决:TCP为每一个连接设置一个坚持定时器(持续计数器)只要TCP连接的一方收到对方的零窗口报文段,就启动坚持定时器。若坚持定时器设置的时间到期,就发送一个零窗口控测报文段。会有以下3种情况

1、对方收到探测报文段后,给出确认(现窗口值)如果窗口仍为零,则收到这个报文段的一方将坚持定时器值加倍并重启。(坚持定时器最大为60s

2、对方接收到探测报文后,给出确认,此时窗口不为零,则跳出死锁

3、该探测报文发出后,会同时启动 重传定时器,如果重传定时器时间超时,还没收到响应,则重传探测报文。

3) 保活定时器

作用:应对TCP连接期间,客户端和服务端长时间无数据传输的情况。

问题:建立TCP连接后,若客户端发生故障,则服务器不能再接收客户端发送的数据,而服务端不能永久的等待下去,则需要保活定时器来解决。

原理:务端没收一次客户端的数据,就重新设置保活定时器,通常为2小时,如果2小时没有收到客户端的数据,服务端就发送一个探测报文,以后没间隔76秒发送一次,连续发送10次探测报文后仍没有收到客户端的相应,服务器就认为客户端出现故障,终止连接。

4) 2MSL定时器

2MSL定时器用来计算一个连接处于Time_wait状态的时间,通常为2MSL(报文段寿命的两倍)。

作用:TCP释放连接时,确认发送的最后一个ACK报文能够到达对方,并防止之前与本连接有关的由于延迟等原因而导致已失效的报文被误判为有效。