zoukankan      html  css  js  c++  java
  • 【TCP/IP详解 卷一:协议】TCP定时器 小结

    前言

    在有关TCP的章节中,介绍了四种定时器,它们体现了TCP的可靠性,其中最重要的 就是重传定时器了,剩下的定时器都是为了解决TCP的理解上的一些问题而设置的。

    四种定时器:

    • 2MSL定时器,出现在 TCP连接的建立与终止。
    • 重传定时器,出现在 TCP的超时与重传。
    • 坚持定时器。
    • 保活定时器。

    相关随笔:

    TCP连接的建立与终止
    TCP的超时与重传
    TCP的坚持定时器
    TCP的保活定时器

    2MSL定时器

    出现:TCP连接的建立与终止 教材P183

    四次挥手客户端一共有三次状态:应用程序关闭,发送完第一个FIN之后进入 FIN_WAIT1,之后接收到来自服务器的ACK进入 FIN_WAIT2。接收到来自服务器的FIN进入 TIME_WAIT 状态(又称2MSL等待状态),使用2MSL定时器进行计时。

    MSL:TCP实现选择的 一个报文段最大生存时间MSL。与IP的TTL类似。
    RFC 793 指出MSL为2分钟,但是实际中常用值一般为 30s,1min,或者2min。

    主要作用:在 TIME_WAIT状态 停留的时间为2倍的MSL。这样如果最后的ACK丢失 -> 另外一端(被动关闭)超时 重新发送FIN -> 可以让TCP重发最后一个ACK。

    重传定时器

    出现:TCP的超时与重传 教材P226-232

    它对RTT和RTO的计算是整个 TCP超时与重传 中最重要的部分。
    重传定时器,以RTO(Retransmission Timeout 重传超时时间)的时间来计时,一旦溢出超时即重发数据报。

    这时就涉及到了RTT和RTO的计算了,这里有不同的策略:
    正常接收到数据报:使用公式法计算RTT和RTO。
    超时:采用指数退避策略。

    公式法需要注意的是:采用了 被平滑的RTT估计器 和 均值偏差,降低了计算的误差。

    主要作用:是TCP可靠性的体现,超时之后重传数据报,从而保证接收方能够接收到完整的数据。

    坚持定时器

    出现:TCP的坚持定时器 教材P245-250

    当通知窗口为0的时候,发送方停止发送数据,等待接收方发送的非0的窗口更新。但是,如果这个非0的窗口更新丢失,会造成一种死锁的现象:发送方等待这个窗口更新的出现,而接收方等待发送方发送的数据。

    为了防止这种死锁现象的发生,发送方使用一个 坚持定时器 来周期性地向接收方询问,以便发现窗口是否增大。这些发送的报文段称为 窗口探查。
    在通告窗口设置为0之后,客户设置了 坚持定时器,在该定时器时间到时客户还没有接收到一个窗口更新,它就探查这个空的窗口以决定这个窗口更新是否丢弃。

    计算坚持定时器使用了TCP指数退避策略。TCP从不放弃发送窗口探查,这些探查每隔60s发送一次。

    主要作用:防止窗口更新造成的死锁现象。

    保活定时器

    出现:TCP的保活定时器 教材P251-255

    一个比较让人惊讶的事实是:可以没有任何数据通过一个空闲的TCP连接,如果TCP连接的双方都没有向对方发送数据,那么在两个TCP模块之间不交换任何信息。
    两个应用进程 -客户进程 和 服务器进程 都没有使用应用级的定时器来检测 非活动状态:这种非活动状态 可以导致应用程序中的任何一个 终止其活动。

    许多时候,一个服务器希望知道客户主机是否 崩溃并关机,或者 崩溃又重新启动。许多实现提供的保活定时器可以提供这个能力。

    优点:
    (1)激活应用程序中的保活选项 通常比 编写应用程序探查报文 更简单。
    (2)通过探查可以使服务器知道客户主机是否崩溃又重新启动。
    (3)探查报文 比 应用程序探查报文 耗费更少的带宽。

    缺点:
    (1)在出现短暂错误的情况下,这可能会使一个非常好的连接释放掉。
    (2)它们耗费不必要的带宽。
    (3)在按分组计费的情况下,会在互联网花掉更多的钱。

    主要作用:通过探查,使服务器知道另外一端的客户主机的运行状况。

    具体实现参阅我之前的笔记。

    2016/8/19

  • 相关阅读:
    Algorithm Of Swift -- 4.合并两个有序数组
    Algorithm Of Swift -- 3.链表反转
    Algorithm Of Swift -- 2.字符串反转
    Algorithm Of Swift -- 1.两数之和
    1850984: Fix: crash when running am.jar without parameters
    微信公众号关联小程序,实现消息推送。
    NPOI根据Excel数据导入导出到Datatable中--帮助类
    OpenCvSharp+ZXing实现多个DataMatrix解析
    多数据源导致事务不生效
    android theme之Material的默认色和夜晚模式
  • 原文地址:https://www.cnblogs.com/qq952693358/p/5787523.html
Copyright © 2011-2022 走看看