Tcp内部常见计时器

来源:互联网 发布:淘宝网买家中心 编辑:程序博客网 时间:2024/06/09 21:03

Tcp常用的计时器分为四种:重传计时器,坚持计时器,保活计时器和等待计时器。

1.重传计时器 Retransmission Time

它相当于一个闹钟,在TCP发送报文段时,就会创建特定报文段的重传计时器。用于处理RTO(重传超时)。

(1)若在计时器截止时间到(通常是60秒)之前收到对此特定报文段的确认,则撤销此计时器。

(2)若在收到了对此特定报文段的确认之前计时器截止期到,则重传报文段,并将计时器复位。

注意:若ACK报文捎带其他信息,则不会为该报文设置重传计时器。

2.坚持计时器

用于处理零窗口的通过。

若接受端的TCP要命令发送端的Tcp停止发送报文段时,就会向发送TCP发送一个报文段,该报文的窗口大小字段为0,称为零值窗口。 发送端的TCP收到该零值窗口值报文后,就会停止向接收端的TCP发送报文,直到接收端的TCP发送一个窗口大小非0的ACK报文 。若接收端TCP向发送TCP发送ACK报文,以通知其发送窗口的大小(非0)后,接收端的TCP便等待发送端发送数据,若该ACK回去的路上丢失了,则发送端的TCP并没收到ACK报文,便不会向接收端发送报文,而接收端却以为自己的ACK报文发成功了,便傻乎乎的瞎等待( 别忘了,ACK报文是永远不会被设置重传计时器的 ),这样两个人便陷入了“ 死锁状态 ”。为了防止该死锁状态的出现, TCP为发送TCP设置了一个坚持计时器 ,一旦发送TCP收到了“零值窗口报文”,该计时器便启动。启动后,在为超时期间,若收到了接收端的非0窗口的通知,则停止该计时器;若该坚持计时器超时了,则发送TCP就发送一个特殊的 探测报文段 ,该报文段仅包含1B的新数据,它有一个序号,但它的序号永远不需要确认,甚至在计算时对其他部分的数据的确认时改序号也被忽略,该报文不需要确认,探测报文的作用 在于提醒对方 (目的 可以记录在数据部分 ), 重传下上次发送发送的那个ACK报文(即那个非0值窗口的报文 )。

坚持计时器的值设置为重传时间的数值。但是,若没有收到从接收端来的响应,则需发送另一个探测报文段,并将坚持计时器的值加倍和复位。发送端继续发送探测报文段,将坚持计时器设定的值加倍和复位,直到这个值增大到门限值( 通常是60秒 )为止。在这以后,发送端每隔60秒就发送一个探测报文段,直到窗口重新打开。 

3.保活计时器

 防止 两端的TCP在 连接期间 长时间处于空闲状态 。可以为服务器设置一个保活计时器。每当服务器收到客户的信息,就把该计时器复位,表示该通话还活着,超时通常设置为2小时。当服务器超过了2H还没有收到客户的任何信息时,服务器就向客户发 送过一个探测报文段。若连续发送了10个探测报文段(没个75s一个)还没有响应,就认为客户出了故障,并终止这个连接。

4.等待计时器

Timer-Wait,(超时时间=2MSL,max segment lifetime),该计时器为客户端设置。该计时器是为还记得4次挥手中的第三次挥手吗?在第三次挥手中,客户端收到服务器发送的FIN报文后,客户端就启动Timer-Wait计时器,时间设置为2MSL,并发送最后一个ACK。两个作用:(1)保证在2MSL时间内,服务器端能够收到最后一个ACK;(2)能够保证之前某些在网络中滞留很久的发给服务器的报文不会在本次连接连接关闭后再去骚扰服务器。 值得注意的是 :最后两次挥手期间,启动了两种计时器,服务器向客户端发送FIN后启动重传计时器,客户端收到FIN后,向服务器发送ACK,同时启动Time-Wait计时器(时间长度为2MSL) 


0 0
原创粉丝点击