`
woodding2008
  • 浏览: 284917 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

TCP的计数器

 
阅读更多

     

      为了能够顺利的进行TCP的操作,大多数的TCP实现至少要使用4个计时器,见下图。

 

重传计数器

为了重传丢失的报文段,TCP应用了一个重传计时器(在整个连接期间)来处理重传超时(RTO),也就是对报文段的确认的等待时间。我们可以以为重传计时器定义一下规则:

  • 当TCP发送了位于发送队列最前端的报文段后,就启动这个计时器。
  • 当这个计时器超时后,TCP重传位于发送队列最前端的报文段,并重启这个计时器。
  • 当一个(或多个)报文段被累计确认后,这个(或这些)报文段被消除出队列。
  • 如果队列为空,TCP停止这个计时器,否则TCP重启计时器

 

往返时间(RTT)

     要计算重传的超时期限(RTO),我们首先要计算往返时间(round trip time,RTT),但是计算TCP中的RTT是个复杂的过程,我们将通过一些例子逐步了解它。

 

测量RTT

         我们需要找出从发送出去一个报文段到对它的确认需要多少时间。这就是测量RTT。我们应当记住,报文段和他的确认之间并非一对一的关系,好几个报文段有可能会被一起确认。一个报文段的测量RTT是指这个报文段到达终点并被确认需要的时间,虽然这个确认可能还包括对其他报文段的确认。请注意,在TCP中,任何时刻只能有一个正在运行的RTT测量。也就是说,如果RTT测量开始了,那么在这次的RTT测量结束之前,不能再开始其他测量。我们使用记法RTT(m)表示测量RTT。

 

平滑RTT

      测量RTT很可能每次往返都有变化。在目前的因特网中,RTT测量值的起伏非常大,以至于单词测量值无法被用于重传超时的目的。绝大多数实现使用的是一种平滑RTT,记为RTT(s),它是对RTT(m)和前一个RTT(s)的加权平均,如下表示:

α的取值与实现有关,但通常为1/8.换言之,新的RTT(s)是由7/8的旧RTT(s)和1/8的当前RTT(m)相加而成。

 

RTT的偏差

        大多数的实现不仅使用了RTT(s),还要计算RTT的偏差,称为RTT(d).它是根据RTT(s)和RTT(m)并使用下面公式计算得到的:

β的取值与实现有关,但通常为1/4.

 

重传超时(RTO)

       RTO的数值基于平滑的往返时间和它的偏差值。绝大多数实现使用下面的公式计算RTO:

换言之 ,就是用但钱的RTT(s)值,加上当前的RTT(d)值(通常是个较小的数)的四倍。

 

 

下图所示为一个连接的一部分。图中画出了连接建立阶段和部分数据传送阶段。

1、当SYN报文段发送后,没有RTT(m)、RTT(s)或RTT(d)的值。RTO值设为6.0秒,下面给出此时这些变量的值为:

 

2、当SYN+ACK报文段到达时,测量出RTT(m)等于1.5秒,下面给出的这些变量的值:

RTT(m)=1.5

RTT(s)=1.5

RTT(d)=1.5/2-0.75

RTO=1.5+4*0.75=4.5

 

3、当第一个报文段被发送后,新的RTT测量就开始了,请注意,在发送发发送ACk报文段时不能开启下一次RTT的测量过程,因为ACK报文段不消耗序号,也没有超时。在发送第二个数据报文段时也没有测量RTT,因为已经有一个RTT测量正在进行之中。最后一个ACK报文段的到达用来计算RTT(m)的下一个数值。虽然最后一个ACK报文段确认了两个数据报文段(累积的),但它的到达完成的是对第一个数据报文段的RTT(m)的计算。现在这些变量的值如下:

RTT(m)=2.5

RTT(s) =7/8 X 1.5 + 1/8 X 2.5=1.625

RTT(d) = 3/4 X(0.75) x | 1.625-2.5| = 0.78

RTO=1.625+4X0.78=4.74

 

Karn算法

       假定有一个报文段在重传计时器超时前未被确认,因而重传。当发送TCP收到对这个报文段的确认时,它无法知道这个确认是对原来报文段的确认,还是对重传报文段的确认,因为新的RTT值要根据报文段发送的时间来计算。但是如果原始的报文段丢失了而确认是对重传的报文段确认,则当前的RTT的计算就必须从重传的报文段发送的时间算起。这种模糊性被Karn解决了。Karn的算法很简单。在计算新的RTT时,不需要考虑重传报文段的往返时间。除非你发送了一个报文段并且在没有被重传的条件下收到了确认,否则不要更新RTT的值。TCP在计算新的RTO时不考虑重传报文段的RTT。

 

指数退避

       如果发生了重传,那么RTO的指数是什么?大多数的TCP使用指数退避的策略。每一次重传,RTO的数值就加倍。因此,如果报文段重传一次,这个值就是两倍的RTO。如果它被重传了两次,这个值就编程了四倍的RTO一次类推。

       下图所示为前面例子的延续,这次出现了重传,因而用到了Karn算法。

       

       图中的第一个报文段发送出去,但丢失了。经过4.74秒后,RTO计时器到期。这个报文段被重传,而计时器被设置为9.48秒,原来的RTO值的两倍。这次在计时器超时之前收到了ACK。我们继续等待,直至我们发送一个新的报文段,并收到了对它的确认,然后才能重新计算RTO(Karn算法)。

 

 

持续计时器

       为了处理零窗口值的通道,TCP需要另一个计时器。如果接收TCP宣布窗口为零,那么发送TCP就会停止发送报文段,直至收到TCP发送来一个宣布窗口大小非零的确认。但是这个ACK报文段可能丢失。应当记住,在TCP中的确认报文段既不需要确认,也不需要重传。如果确认报文段丢失了,接收TCP仍然认为这个确认已经完成了任务,并等待着发送TCP下面的报文段。对于仅包含有一个确认的报文段是没有重传计时器的。发送TCP由于没有收到确认,就等待对方发送一个确认来通知窗口的大小。这两个TCP都在永远等待着对方(死锁)。

         为了纠正这个死锁问题,TCP为每个连接使用一个持续计时器(persistence timer)。当发送TCP接收窗口值为零的确认时,就启动一个持续计时器。当持续计时器超时后,发送一个TCP特殊的报文段,称为探测报文段。这个报文段只有1个字节的新数据。它有序号,但它的需要永远不需要确认,甚至在计算剩余数据的序号时,这个序号也被忽略。探测报文段促使接收TCP重传一个确认。

        持续计时器的时间长度被设置为重传时间的值。但是若没有收到从接收方发送来的响应,则需要发送另一个探测报文段,并将其持续计时器的值加倍,且该计时器复位。发送方继续发送探测报文段,不断地将持续计时器的值加倍和复位,直到这个值达到一个门限(通常是60秒)为止。在这以后,发送端每个60秒就发送一个探测报文段,直到窗口重新打开。

 

 

 

保活计时器

       某些实现中要使用报货计时器(keepalive timer)来防止两个TCP之间的连接长时间空闲。假定一个客户端打开了到服务器的一条连接,传送过一些数据,然后就变的静默了。也许是因为这个客户处了什么故障。在这种情况下,这个连接将永远处于打开状态。

       为了解决这个问题,绝大多数的实现都是给服务器设置了一个保活计时器。每当服务器收到客户的信息,就把该计时器复位。超时通常设置为2个小时。若服务器过了两个小时还没有收到客户端的任何消息,它就发送一个探测报文段。若联系发送了10个探测报文段(每隔75秒一个)没有收到响应,它就假定客户出了故障,并终止这个连接。

 

TIME-WAIT计时器

        TIME-WAIT(2msl)计时器是在连接终止期间使用的。参考TCP状态转换图

 

 

  • 大小: 322.4 KB
  • 大小: 72.2 KB
  • 大小: 46.5 KB
  • 大小: 97.1 KB
  • 大小: 95.3 KB
  • 大小: 348 KB
分享到:
评论

相关推荐

    S7-200SMART通过循环移位实现MODBUS轮询源程序.zip

    S7-200SMART通过循环移位实现MODBUS轮询源程序

    tcp协议分析

    tcp协议

    4路编码器脉冲计数器,8路DO,Modbus TCP模块 IBF96

    IBF96产品实现传感器和主机之间的信号采集,用来解码编码器信号和设备控制。IBF96系列产品可应用在物联网和工业以太网控制系统,自动化机床,工业机器人,三坐标定位系统,位移测量,行程测量,角度测量,转速测量...

    8路DI高速计数器,8路DO支持PWM输出,Modbus TCP模块 IBF93

    IBF93产品是一种物联网和工业以太网采集模块,实现了传感器与网络之间形成透明的数据交互。可以将传感器的数据转发到网络,或者将来自网络的数据转发到传感器。

    在Linux环境下使用TCP的keepalive机制

    Linux内置支持keepalive机制,为了使用...当连接被标记为keepalive之后,这个计数器不会再使用。  tcp_keepalive_intvl:表示的是并发keepalive探针之间的时间间隔。  tcp_keepalive_probes:在确定连接已经断开并

    isc-stats:ISC DHCP 消息计数器和报告器

    用python编写的ISC DHCP消息计数器 此应用程序监视 ISC DHCP 日志文件中的 DISCOVER/OFFER/REQUEST/ACK/NAK 消息,并侦听传入连接的给定 TCP 端口,以 JSON 格式向 Web 客户端报告统计信息。 我写这篇文章是为了监视...

    用C语言实现Socket模拟TCP协议

    使用VS中的VC++下面的CLR编写,主要目的用Socket模拟TCP通信协议,实验内容如下:i. 实现滑动窗口协议,窗口大小为5 ii. 模拟采用三次握手机制,显示出ACK、ack、Seq等标识位和参数 iii. 必须采用应答机制、超时...

    TCP拦截和网络地址转换

    TCP拦截和网络地址转换 本书将讨论与访问表相关的技术,而非访问表本身。这些技术提供了控制网络中数据流 量的附加功能。这些功能特性会使读者能够加强进出网络报文的附加功能。通过智能地对数 据本身进行操作,...

    TCP/IP症状和原因

    复位接口的计数器到0  正常情况下,接口和line都是up的。  线缆故障、载波故障和硬件故障都可导致接口down,通过校验电缆连接、更换硬件(包括电缆)、检查载波信令定位问题。  接口up,line down:CSU/DSU...

    ABB机器人基础知识培训.pptx

    目录 IRC5控制柜的认识 机器人本体的认识 转数计数器更新 定义工具坐标系 定义工件坐标系 Load data操作步骤 定义I/O总线 定义I/O单元 定义I/O信号 基本指令 off( )功能 程序的编辑 机器人培训 ABB机器人基础知识...

    C#套接字协议4编程

    实验一 TCP协议的模拟 1 实验目的: 要求学生掌握Socket编程 及滑动窗口协议 2 实验内容: 实现滑动窗口协议 窗口大小为5 必须采用应答机制 超时计数器技术 帧编号盘重技术 重传技术 校验和技术 校验和s的计算:设...

    网际校验和算法VC源码

    校验和算法描述:为保证网络上传输的数据的可靠性,在许多协议中都设置了校验和项,例如:IPv4、ICMPv4、IGMPV4、ICMPv6、UDP和TCP 等等。计算这些校验和的算法称为网际校验和算法,简单来说就是:把被校验的数据16...

    《ASP Web编程实例教程》PDF

    脚本编程部分以17章篇幅按应用程序分为:动态广告条、BBS、日历、聊天室、计数器、在线商店、文件管理、在线游戏、电子贺卡、留言本、邮件、网页导航、网络互联、新闻管理、民意调查、搜索引擎、脚... ...

    2017年上半年网络工程师考试真题(上午题).pdf

    软考网络工程师2017上半年。最新真题。试题 1. CPU:执行算术运算或者逻辑运算时,常将源操作数和结果暂存 在( )中。 A. 程序计数器 (PC) B. 累加器 (AC)

    windows系统漏洞加固

    1.5 检查是否已正确配置“复位帐户锁定计数器”时间(低危) 1.6 检查是否已正确配置帐户锁定阈值(低危) 1.7 检查是否已删除或禁用高危帐户(低危) 1.8 检查是否已正确配置密码最长使用期限(低危) 1.9 检查是否...

    ABB机器人的手动操作.doc

    ¬ 掌握 ABB 机器人转数计数器更新操作。 3.2 任务描述 手动操纵机器人运动一共有三种模式:单轴运动、线性运动和重定位运动。如何使 用这三种模式手动 操作机器人运动是项目的主要内容。 建立一个工作站,ABB 型号...

    ABB机器人手动操作.pptx

    检验新创建的工具TCP点是否准确 2.需要在确定目标点的基础上调整机器人姿态 ABB机器人手动操作全文共36页,当前为第3页。 1.单轴运动 ABB 6轴机器人是由六个伺服电机分别驱动六个关节轴的一款机械臂,每次手动操作...

    统计数据收集器StatsD.zip

    StatsD 是一个简单的网络守护进程,基于 Node.js 平台,通过 UDP 或者 TCP 方式侦听各种统计信息,包括计数器和定时器,并发送聚合信息到后端服务,例如 Graphite

    DM9302.pdf

    10 / 100BASE-TX / FX交换机基础单芯片媒体转换器 ?... TCP / IP / UDP / IPv4校验和卸载 ?? 兼容3.3V和5.0V的I / O ?? 具有HP Auto-MDIX的DSP PHY,DSP架构PHY收发器 ?? 64引脚LQFP,0.18 um工艺,支持无铅和无卤素

    LabVIEW高级编程与虚拟仪器工程应用

    4.8 TCP 应用 4.8.1发送数据编程 4.8.2接收数据编程 4.8.3程序的远程动态控制 4.9 UDP应用 4.10 串口通信 第5章数据存储与调用 5.1数据存储的时机 5.2打印报表 5.3数据库连接 5.3.1 LabVIEW与数据库的连接...

Global site tag (gtag.js) - Google Analytics