网络基础 — TCP四大定时器
TCP四大定时器
最近在学习TCP协议,TCP协议比较与UDP协议是具有可靠性的,其实TCP提供定时器而是TCP协议可靠性的一个因素,那么我们就了
解 这几个定时器:重传定时器、坚持定时器、保活定时器、2MSL定时器
重传定时器
#
很明显重传定时器是用来计算TCP报文段的超时重传时间的.每发送一个报文段就会启动重传定时器,如果在定时器时间到后还没
收到对该报文段的确认,就重传该报文段,并将重传定时器复位,重新计算;如果在规定时间内收到了对该报文段的确认,则撤
销该报文段的重传定时器
坚持定时器
如果接收端在向发送端发送了零窗口报文段后不久,接收端的接收缓存又有了一些存储空间,于是接收端向发送端发送了一个非
零窗口大小的报文段,然而这个报文段在传送过程中丢失了,发送端没有收到该报文段,就一直等待接收端发送非零窗口的报文
通知,而接收端并不知道报文段丢失了,而是觉得已经告诉发送端了,就会一直等待发送端发送数据,如果没有任何措施的话,
这话死锁的局面会一直延续下去。
为了解决这个问题,TCP为每一个连接设有一个坚持定时器(也叫持续计数器)。只要TCP连接的一方收到对方的零窗口通知,就
启动坚持定时器。若坚持定时器设置的时间到期,就发送一个零窗口控测报文段(该报文段只有一个字节的数据,它有一个序
号,但该序号永远不需要确认,因此该序号可以持续重传),之后会出现以下三种情况:
1、对方在收到探测报文段后,在对该报文段的确认中给出现在的窗口值,如果窗口值仍未零,则收到这个报文段的一方将坚持定
时器的值加倍并重启。坚持计数器最大只能增加到约60秒,在此之后,每次收到零窗口通知,坚持计数器的值就定位60秒。
2、对方在收到探测报文段后,在对该报文段的确认中给出现在的窗口值,如果窗口不为零,那么死锁的僵局就被打破了。
3、该探测报文发出后,会同时启动重传定时器,如果重传定时器的时间到期,还没有收到接收到发来的响应,则超时重传探测报
文。
好了我知道一定会有人不知道什么是零窗口报文段,我这里解释一下->
当TCP堆 栈接收到数据的时候,生成一个确认信息并以回复的方式发送,但是放置在接收端缓存中的数据并不总是立即被处理。
当服务器忙于处理从多个客户端接收的报文, 服务器很有可能因为清理缓存而变得缓慢,无法腾出空间接收新的数据,如果没有
流控,则可能会造成丢包和数据损坏。好在,接收窗口所设定的速率无法使服务器正常处理数据时,能够调整接收窗口大小。通
过减小返回给发送端的ACK报文的TCP头窗口大小值来实现。 某些情况下,服务器无法再处理从客户端发送的数据。可能是由于内
存不足,处理能力不够,或其他原因。这可能会造成数据被丢弃以及传输暂停,但接收窗口能够帮助减小负面影响。当上述情况
发生时,服务器会发送窗口为0的报文。当客户端接收到此报文时,它会暂停所有数据传输,但会保持与服务器的连接以传输探测
报文.
下面就是一个例子->
保活定时器
保活定时器是为了应对两个TCP连接间出现长时间的没有数据传输的情况。如果客户已与服务器建立了TCP连接,但后来客户端主
机突然故障,则服务器就不能再收到客户端发来的数据了,而服务器肯定不能这样永久地等下去,保活定时器就是用来解决这个
问题的。服务器每收到一次客户端的数据,就重新设置保活定时器,通常为2小时,如果2小时没有收到客户端的数据,服务端就
发送一个探测报文,以后每隔75秒发送一次,如果连续发送10次探测报文段后仍没有收到客户端的响应,服务器就认为客户端出
现了故障,就可以终止这个连接。
2MSL定时器
2MSL定时器测量一个连接处于TIME—WAIT黄台的时间,通常为2MSL(报文段寿命的两倍)。2MSL定时器的设置主要是为了确保发
送的最后一个ACK报文段能够到达对方,并防止之前与本连接有关的由于延迟等原因而导致已失效的报文被误判为有效。
还没有评论,来说两句吧...