tcp四种定时器详解

大家都知道,定时器在TCP可靠传输的过程中起着举足轻重的作用。TCP在建立连接之后可能(保活keep-alive定时器是可选的)会启动四个定时器。

TCP使用四种定时器(Timer,也称为“计时器”):

重传计时器:Retransmission Timer

坚持计时器:Persistent Timer

保活计时器:Keeplive Timer

时间等待计时器:Time_Wait Timer。

(1)重传计时器:Retransmission Timer

重传定时器:为了控制丢失的报文段或丢弃的报文段,也就是对报文段确认的等待时间。当TCP发送报文段时,就创建这个特定报文段的重传计时器,可能发生两种情况:若在计时器超时之前收到对报文段的确认,则撤销计时器;若在收到对特定报文段的确认之前计时器超时,则重传该报文,并把计时器复位;重传时间=2*RTT;

RTT的值应该动态计算。常用的公式是:RTT=previous RTT*i + (1-i)*current RTT。i的值通常取90%,即新的RTT是以前的RTT值的90%加上当前RTT值的10%.

Karn算法:对重传报文,在计算新的RTT时,不考虑重传报文的RTT。因为无法推理出:发送端所收到的确认是对上一次报文段的确认还是对重传报文段的确认。干脆不计入。

(2)坚持计时器:persistent timer

专门为对付零窗口通知而设立的。

当发送端收到零窗口的确认时,就启动坚持计时器,当坚持计时器截止期到时,发送端TCP就发送一个特殊的报文段,叫探测报文段,这个报文段只有一个字节的数据。探测报文段有序号,但序号永远不需要确认,甚至在计算对其他部分数据的确认时这个序号也被忽略。探测报文段提醒接收端TCP,确认已丢失,必须重传。

坚持计时器的截止期设置为重传时间的值,但若没有收到从接收端来的响应,则发送另一个探测报文段,并将坚持计时器的值加倍和并复位,发送端继续发送探测报文段,将坚持计时器的值加倍和复位,知道这个值增大到阈值为止(通常为60秒)。之后,发送端每隔60s就发送一个报文段,直到窗口重新打开为止;补充:

坚持定时器的原理是简单的,当TCP服务器收到了客户端的0滑动窗口报文的时候,就启动一个定时器来计时,并在定时器溢出的时候向向客户端查询窗口是否已经增大,如果得到非零的窗口就重新开始发送数据,如果得到0窗口就再开一个新的定时器准备下一次查询。通过观察可以得知,TCP的坚持定时器使用1,2,4,8,16……64秒这样的普通指数退避序列来作为每一次的溢出时间。

糊涂窗口综合症

TCP的窗口协议,会引起一种通常叫做糊涂窗口综合症的问题,具体表现为,当客户端通告一个小的非零窗口时,服务器立刻发送小数据给客户端并充满其缓冲区,一来二去就会让网络中充满小TCP数据报,从而影响网络利用率。对于发送方和接收端的这种糊涂行为。

再次补充:

TCP通过让接收方指明希望从发送方接收的数据字节数(即窗口大小)来进行流量控制。如果窗口大小为 0会发生什么情况呢?这将有效地阻止发送方传送数据,直到窗口变为非0为止。

TCP不对ACK报文段进行确认, TCP只确认那些包含有数据的ACK报文段。

如果一个确认丢失了(这个确认是”接收方“向”发送方“发送的ACK,通知”发送方“自己的窗口已经非0了),则双方就有可能因为等待对方而使连接终止:接收方等待接收数据(因为它已经向发送方通告了一个非 0的窗口),而发送方在等待允许它继续发送数据的窗口更新。为防止这种死锁情况的发生,发送方使用一个坚持定时器 (persist timer)来周期性地向接收方查询,以便发现窗口是否已增大。这些从发送方发出的报文段称为窗口探查 (window probe)。

(3)保活计时器:keeplive timer

每当服务器收到客户的信息,就将keeplive timer复位,超时通常设置2小时,若服务器超过2小时还没有收到来自客户的信息,就发送探测报文段,若发送了10个探测报文段(没75秒发送一个)还没收到响应,则终止连接。

补充:

保活定时器更加的简单,还记得FTP或者Http服务器都有Sesstion Time机制么?因为TCP是面向连接的,所以就会出现只连接不传送数据的“半开放连接”,服务器当然要检测到这种连接并且在某些情况下释放这种连接,这就是保活定时器的作用。其时限根据服务器的实现不同而不通。另外要提到的是,当其中一端如果崩溃并重新启动的情况下,如果收到该端“前生”的保活探察,则要发送一个RST数据报文帮助另一端结束连接。

(4)时间等待计时器:Time_Wait Timer

在连接终止期使用,当TCP关闭连接时,并不认为这个连接就真正关闭了,在时间等待期间,连接还处于一种中间过度状态。这样就可以时重复的fin报文段在到达终点后被丢弃,这个计时器的值通常设置为一格报文段寿命期望值的两倍。

补充:

2MSL定时器:MSL是报文段做大生存时间(Maximum Segment Lifetime),设置这个定时器有两个目的:

其一是为了测量连接处于TIME_WAIT状态的时间.这样可以让TCP再次发送最后的ACK以防止这个ACK丢失(如果丢失,另一端会重传FIN)。

其二,为允许老的重复分节在网络中消逝。具体可以解释为,如果一个TCP连接在断开之前有迷途分节尚未消逝,在断开该TCP连接之后立刻重启一个同样的连接(双方的IP地址和端口port相同),这时之前的迷途的老分节可能对新的新的TCP连接接收,从而造成未定义的错误。为了避免这种情况,TCP规定在TIME_WAIT状态,不能启动一个连接的化身。既然TIME_WAIT状态维持2MSL,这就保证了一个连接上的分组及其应该在 2MSL内都会消失。

以上就是关于tcp四种定时器的全部内容,谢谢阅读,希望能帮到大家,请继续关注脚本之家,我们会努力分享更多优秀的文章。

(0)

相关推荐

  • Win10系统EML文件怎么打开?Win10打开EML文件的四种方法详解

    相信大家在操作电脑的过程中,都有碰到过EML格式的文件吧,EML文件是Outlook邮件的文件格式,很多用户会遇到EML文件打不开的情况,那是因为打开方法不正确.那么,EML文件到底要如何打开呢?下面 ...

  • 禁用p2p下载工具的几种方法详解[图文]

    小编和同事聊天,经常听到同事抱怨在家上网网速不给力的情况。对于网速不给力的现象导致的原因有很多,其中就包括用户自己在使用一些迅雷或者电驴p2p下载工具,这样就会影响网速了。那么今天小编就给大家介绍禁用 ...

  • 苹果Macbook怎么编辑hosts文件?Mac上修改Hosts两种方法详解

    基于工作和破解软件的需求,很多亲们需要将自己设备的Honts文件修改成自己所需要的地址,在Windows上修改Host是一件很简单的事情,但是换成Mac系统,很多用户就发懵了.小编下面就为大介绍下Ma ...

  • TCP断开连接过程详解

    上次我们讲了TCP三次握手建立连接的过程,今天我们结合双方状态的改变来讲讲TCP断开连接的过程:TCP四次挥手。 数据传输结束后,通信的双方都可释放连接。现在A和B都处于ESTABLISHED状态。A ...

  • 街机竞技捕鱼四种货币详解

    我们的街机竞技捕鱼游戏虽然换了新版本,但是货币依然还是老四种,只是获取和兑换跟之前的版本有些许差异,使用的范围也有所变化,今天我们就把新版本的街机竞技捕鱼游戏的四种货币痛快地解析清楚吧! 操作方法 0 ...

  • TCP三次握手和四次挥手详解

    TCP三次握手和四次挥手详解

  • 怎样才能使手机电池耐用些? 八种方法详解

    现在,具有强大功能的智能手机已成为大多数手机用户的首选,但由于智能手机高耗电的特性,给电池频繁充电也让人感到恼火,下面的省电妙招可让你的智能手机电池更耐用,不妨一起看看吧。 一、降低屏幕亮度 智能手机 ...

  • 网吧网络遭遇ARP攻击常见的八种情况详解

    网吧网络遭遇ARP攻击常见的八种情况详解

  • redhat linux swap分区扩展的三种方法详解

    redhat linux swap分区扩展的三种方法 swap 介绍: 当物理内存占用完了后,当系统还需要更多的物理内存时,物理内存中inactive pages ,就move到swap空间.swap ...