TCP中的四个计时器

重传计时器(Retransmission Timer)

当TCP发送报文后,就对此报文设置一个重传计时器,此时有两种情况

  1. 在规定时间内成功收到对方的确认,就撤销该报文的重传定时器
  2. 到了规定时间仍然未收到对方的确认,则认为该报文丢失,重新传送该报文,并将计时器时间复位

坚持计时器(Persistent Timer)

我们都知道TCP中有流量控制机制,当TCP的接收端宣布接收窗口为0时,发送端会停止发送数据,直到TCP接收端宣告窗口不为0。但我们都知道TCP是不会对ACK报文段进行确认的,TCP只确认那些包含有数据的ACK报文段。

假设一个场景:如果一个确认丢失了,则双方就有可能因为等待对方而使连接终止,接收方等待接收数据(因为它已经向发送方通告了一个非0的窗口),而发送方在等待允许它发送数据的窗口更新,这时双方就会形成死锁,为避免死锁的发生,TCP为发送方设置了一个坚持定时器,通过周期性的向接收方发送探测报文来获得接收端此时窗口的实际大小。

  • 发送端收到接收端窗口大小为0的信息时,就启动该定时器,并在坚持定时器溢出的时候向接收端发送探测报文来查询窗口是否增大
  • 如果定时器没有溢出就收到了接收端非0的通告,则关闭定时器,发送数据
  • 如果探测报文ACK的通告窗口依旧为0,就将定时器的时间加倍并复位,TCP的坚持定时器使用1,2,4,8,16……64这样的普通指数退避序列作为每一次的溢出时间,直到这个值增大到最大限制(通常为1分钟)为止,在这之后,就每隔最大时间发送一个探测报文段,直到窗口大小更新

保活计时器(Keepalive Timer)

保活定时器用来防止连接双方出现长时间的空闲连接(维持长连接)。
假设客户端连上了服务器,可能因为遇到故障或其他原因导致什么事都不干,但是连接会依旧存在,占用着服务器的资源。服务器为防止这种情况发生,就设置了一个保活计时器,当有客户端连接上来时,就启动一个对应的保活计时器并开始计时,如果服务器接收到客户端的数据,就会将计时器复位,超时时间通常设置为2小时,如果到达超时时间时,客户端仍未发送数据过来,服务器就会发送探测报文(心跳包)查询客户端此时状态,若发送了10个(每75s发送一个)探测报文段都没回应,就认为客户端出现故障,因为断开连接。

时间等待计时器(Time_Wait Timer)

时间等待计时器是在终止连接阶段使用的。
当主动断开连接的一方收到对方的FIN报文段后,就会进入TIME_WAIT状态,并会启动时间等待计时器,该计时器通常设置时间为报文段最大生存时间(Maximum Segment Lifetime)的两倍。目的是为了防止自己对于对方FIN报文段的确认报文丢失,如果丢失了,在2MSL时间内,还可以接收到对方重传的FIN报文,可以进行再一次确认以及收到之前可能迷失在网络中的报文。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值