TCPIPChap212223TimeoutAndTimer

 

TCPIP的四个定时器

 

1、  超时重传定时器

当发送一个数据报后(非ACK)希望收到对方的ACK。在发送后的1、3、6、1 2、2 4、4 8和多个6 4秒后,会再次发送这个数据报。重传时间间隔符合指数退避关系。在最后一次重发数据报后,将会发送复位(RST)数据报。首次分组传输与复位信号传输之间的时间差约为9分钟,该时间在目前的T C P实现中是不可变的。

2、  坚持(persist)定时器

T C P通过让接收方指明希望从发送方接收的数据字节数(即窗口大小)来进行流量控制。

TCPIPChap212223TimeoutAndTimer_第1张图片

ACK传输并不是可靠的,因为不会有重传和它的ACK,TCP只确认那些有数据的ACK报文段。当发送方接收到报文段9时,它打开被报文段8关闭的窗口并立即开始发送数据。T C P必须能够处理打开此窗口的A C K(报文段9)丢失的情况。

如果一个确认丢失了,则双方就有可能因为等待对方而使连接终止:接收方等待接收数

据(因为它已经向发送方通告了一个非0的窗口)(右边),而发送方在等待允许它继续发送数据的窗口更新(左边)。为防止这种死锁情况的发生,发送方使用一个坚持定时器(persist timer)来周期性地向接收方查询,以便发现窗口是否已增大。这些从发送方发出的报文段称为窗口探查( w i n d o w p r o b e )。

当收到窗口大小为0的报文后,将启动设置坚持定时器。如果在该定时器时间到时客户还没

有接收到一个窗口更新,它就探查这个空的窗口以决定窗口更新是否丢失。

窗口探查的时间间隔如下:

在收到一个大小为0的窗口通告后的第1个(报文段1 4)间隔为4 . 9 4 9秒,下一个(报文段1 6)间隔是4 . 9 9 6秒,随后的间隔分别约为6, 12,24, 48和6 0秒。

随后:

窗口探查包含一个字节的数据。T C P总是允许在关闭连接前发送一个字节的数据。请注意,尽管如此,所返回的窗口为0的A C K并不是确认该字节,因此这个字节被持续重传。

坚持状态与重传超时之间一个不同的特点就是T C P从不放弃发送窗口探查。这些探查每隔6 0秒发送一次,这个过程将持续到或者窗口被打开,或者应用进程使用的连接被终止。

 

糊涂窗口综合症

小量数据在客户端和服务端不断传输。

该现象可发生在两端中的任何一端:接收方可以通告一个小的窗口(而不是一直等到有大的窗口时才通告),而发送方也可以发送少量的数据(而不是等待其他的数据以便发送一个大的报文段)。可以在任何一端采取措施避免出现糊涂窗口综合症的现象。

3、  保活(keepalive)定时器

如果一个给定的连接在两个小时之内没有任何动作,则服务器就向客户发送一个探查报文段(我们将在随后的例子中看到这个探查报文段看起来像什么)。客户主机必须处于以下4个状态之一。

1) 客户主机依然正常运行,并从服务器可达。客户的T C P响应正常,而服务器也知道对

方是正常工作的。服务器在两小时以后将保活定时器复位。如果在两个小时定时器到时间之

前有应用程序的通信量通过此连接,则定时器在交换数据后的未来2小时再复位。

2) 客户主机已经崩溃,并且关闭或者正在重新启动。在任何一种情况下,客户的T C P都

没有响应。服务器将不能够收到对探查的响应,并在7 5秒后超时。服务器总共发送1 0个这样的探查,每个间隔7 5秒。如果服务器没有收到一个响应,它就认为客户主机已经关闭并终止连接。

3) 客户主机崩溃并已经重新启动。这时服务器将收到一个对其保活探查的响应,但是这

个响应是一个复位,使得服务器终止这个连接。

4) 客户主机正常运行,但是从服务器不可达。这与状态2相同,因为T C P不能够区分状态4与状态2之间的区别,它所能发现的就是没有收到探查的响应。

服务器不用关注客户主机被关闭和重新启动的情况(这指的是一个操作员的关闭,而不是主机崩溃)。当系统被操作员关闭时,所有的应用进程也被终止(也就是客户进程),这会使客户的T C P在连接上发出一个F I N。接收到F I N将使服务器的T C P向服务器进程报告文件结束,使服务器可以检测到这个情况。

4、  2MSL定时器

客户端FIN

服务端ACK

服务端FIN

客户端ACK (可能丢失)

 

如果丢失服务端会重新发FIN,所以客户端必须在此等待2倍的最大报文生存时间。

你可能感兴趣的:(c,timer,工作,tcp,服务器)