TCP中的定时器

TCP中使用以下四种定时器:
重传定时器
坚持定时器
保活定时器
时间等待计时器
TCP是面向连接的、可靠的字节流协议,保证可靠的方法之一,就是确认接收放收到数据。但是数剧可能会丢失。所以TCP通过在发送时设置一个定时器来解决这个问题。
- 重传定时器
为了防止丢失数据报文段或确认报文段,TCP发送报文时,设置超时重传定时器。那么超时重传时间设为多少合适呢?用RRT表示报文段的往返时间,超时重传时间RTO=2*RRT
RTT的值应该动态计算。常用的公式是:RTT=previous RTT*i + (1-i)*current RTT。i的值通常取90%,即新的RTT是以前的RTT值的90%加上当前RTT值的10%.
- 坚持定时器
专门对付零窗口通知设立的。
如果一个确认丢失了(这个确认是”接收方“向”发送方“发送的ACK,通知”发送方“自己的窗口已经非0了),则双方就有可能因为等待对方而使连接终止:接收方等待接收数据(因为它已经向发送方通告了一个非 0的窗口),而发送方在等待允许它继续发送数据的窗口更新。为防止这种死锁情况的发生,发送方使用一个坚持定时器 (persist timer)来周期性地向接收方查询,以便发现窗口是否已增大。这些从发送方发出的报文段称为窗口探查 (window probe)。

当发送端收到零窗口的确认时,就启动坚持定时器,到坚持定时器时间到时,发送端TCP发送一个特殊的报文段,叫探测报文段,提醒接收端TCP确认丢失,必须重传。若没有收到来自接收端的响应,将坚持定时器的时间加倍,直到60S为止。之后,每隔60S就发送一个报文段,直到窗口重新打开。
PS:原理:当TCP服务器收到客户端的滑动窗口为0的报文段时,就启动一个定时器计时。到时间时向客户端查询窗口是否增大,如果得到非零的窗口就可继续发送数据。反之,将定时器时间加长,重新查询。
- 保活定时器
有的客户端只连接到服务器,却不做任何访问,一直霸占着服务器,保活定时器就是解决这种情况的。

每当服务器收到客户的数据时,就将保活定时器复位,超时一般设为2小时,若服务器两小时还未收到客户端的数据,就给客户端发送探测报文段,若发送10个还未收到回复,终止连接。
- 时间等待计时器
在连接终止时使用。当TCP断开连接时,这个连接并不是真正关闭了,而是处于一种中间过度状态。这样就可能FIN报文段在到达终点后被丢弃,时间等待定时器就是防止这种情况。

PS:TIME_WAIT:主动关闭连接的一方处于TIME_WAIT。客户端主动关闭连接时,发送最后一个ACK,然后进入TIME_WAIT状态。停留2个MSL时间。保证服务器端也能关闭连接。
TIME_WAIT作用:可靠实现TCP全双工连接的终止。
TCP在端开连接时,主动关闭连接的一方A方发出最后的ACK,如果该ACK丢失,对方B方会重新发送FIN,因此A方必须维护状态信息(TIME_WAIT)允许它重发ACK。若没有TIME_WAIT时间,B方就无法正常关闭连接。
有关TIME_WAIT详解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值