【网络】TCP协议中的四大定时器

来源:互联网 发布:淘宝头像图片 编辑:程序博客网 时间:2024/06/06 01:20

前言

在TCP连接中,有四大定时器来维持连接的正常运行,这四个定时器分别是超时重传定时器、坚持定时器、保活定时器以及时间等待计时器

超时重传定时器

所谓超时重传,是TCP之所以可靠的一点。该定时器就是当一个TCP报文发送后,启动该定时器。

如果在规定时间内,没有收到该报文的确认序号,便重新传输该报文,并将超时重传定时器重置。

如果在规定时间内收到了对应报文的确认,则撤销该对该报文的超时重传定时器。

坚持定时器

坚持定时器是为了解决当滑动窗口为0时而造成死锁的问题。

当A给B发送报文中的窗口设置为0时,B便知道A现在不便接受数据,所以会进行等待。

这种情况下,如果A的缓冲区又可以收数据了,并给B发送了一个窗口非0的报文。

此时,如果该报文不幸丢失了,B便不知道可以给A发送数据了,A也认为自己已经给B说了。

此刻会造成死锁的问题。

这里便引入了坚持定时器,当一方收到窗口为0的报文时,便启动该定时器。

若定时器时间到了,便发送0窗口探测报文(该报文只有1字节的数据)。

对方收到该报文后,会告诉其当前的滑动窗口值,如果还是0,则继续等待。计时器重置,并加倍,最大时间长度为60秒。

若不为0,则打开了死锁。

保活定时器

当服务端和客户端建立连接时,服务端便会维护一个保活定时器。用来防止由于客户端故障而造成TCP连接无法释放的情况。

当服务端收到客户端发送过来的消息时,便重置该定时器。

如果该定时器计时达到了两个小时,便会给客户端以每75秒发送一个探测报文,连续发送10次。

若客户端还没有进行相应,则和客户端断开连接,防止资源的浪费。

时间等待计时器

我们知道,TCP链接终止的时候需要四次挥手。

当主动断开的一方A收到被动一方B的第三次挥手FIN报文后,A会发送第四次挥手的ACK报文。

此刻,A便启动该定时器

(1)为了保证客户端发送的最后一个ACK报文段能够到达服务器。因为这个ACK有可能丢失,从而导致处在LAST-ACK状态的服务器收不到对FIN-ACK的确认报文。服务器会超时重传这个FIN-ACK,接着客户端再重传一次确认,重新启动时间等待计时器。最后客户端和服务器都能正常的关闭。假设客户端不等待2MSL,而是在发送完ACK之后直接释放关闭,一但这个ACK丢失的话,服务器就无法正常的进入关闭连接状态。

(2)他还可以防止已失效的报文段。客户端在发送最后一个ACK之后,再经过经过2MSL,就可以使本链接持续时间内所产生的所有报文段都从网络中消失。从保证在关闭连接后不会有还在网络中滞留的报文段去骚扰服务器。