原创

TCP四种定时器解析

1.重传定时器

主要为了防止报文丢失或者阻塞。当A向B发送报文时,就会启动重传定时器,若在定时器到达之后,仍没有收到B的确认报文,则A会重新发送上次发送的报文。同时,令重传定时器复位。继续计时。

2.坚持计时器

此计时器针对下面场景:

当B向A发送了0窗口报文,B此时已经没有空间接受A发送的数据了,通知A停止发送。 A在收到后即停止发送,等待一段时间后,B有了一些空间,可以继续接收了。此时再向A发送非0窗口报文。 如果此非0窗口报文在网络中阻塞或者丢失了,那么A将永远以为B没有空间接收数据,B也永远在等待A发来的数据。这样就会造成死锁的局面。

在A接收到B发送的0窗口报文后,就设立坚持定时器,当定时器到达后,A就像B发送一个探测报文。B收到探测报文后会给出A确认报文。

  • 确认报文中的窗口值不是0,则死锁局面打开。
  • 确认报文中的窗口值是0,则重置坚持定时器,并将时间翻倍,但是最大不能超过60秒。(到达60后,以后都是60秒)
  • A在发送探测报文后,启动重传定时器,若没有收到B的确认报文,则重传探测报文。

3.保活定时器

应用场景:

客户机因为某些故障退出,而服务器并不知道,还在一直等待客户机发来的数据,这样就白白浪费了计算机资源。 在服务器端设置保活计时器,服务器每收到客户机的一次消息,就重置保活计时器,时间通常为2小时。 若2个小时都没有收到客户机发来的消息,服务器就像客户机发送一个探测报文,以后每隔75分钟发送一次。 若连续发送了10个探测报文后客户机仍无响应,则服务器就会认为客户机故障,并断开这次连接。

保活功能主要是为服务器提供的,服务器可能会代表客户绑定一些资源,希望知道客户主机是否崩溃。

如果一个给定的连接在2个小时之内没有任何动作,则服务器就向客户发送一个探查报文段:

  • 对端仍然运行正常

客户主机依然正常运行,并且服务器可达。则客户的TCP响应正常,而服务器也知道对方是正常工作的,则服务器在2小时内以后将保活定时器复位。在这2小时以内,如果有数据流交换,则在交换数据后的未来2小时再复位。

  • 对端已经崩溃

客户主机已经崩溃,并且关闭或者正在重新启动。在任何情况下,客户的TCP都没有响应。服务器不能够收到对探查的响应,并在75秒后超时(服务器总共发送10个这样的探查,每个间隔75秒)。如果服务器没有收到一个响应,则认为客户主机已经关闭并会终止这个连接。

  • 对端已经崩溃并重新启动

客户主机崩溃并已经重新启动。这时服务器将收到一个对其保活探查的响应,然而这个响应是一个复位(RST数据包),使得服务器终止这个连接。

  • 对端当前无法到达

客户主机正常运行,但是服务器不可达。

4.时间等待计时器

时间等待计时器用于TCP“四次挥手”阶段。当客户端向服务器发送最后一次确认报文时,就设定一个时间等待及时器,等待2MSL时间后再结束连接。

MSL:(Maximum Segment Lifetime)最长报文段寿命,大小为30s~2分钟。根据不同的应用有不同的设置。

正文到此结束