TCP/IP详解 TCP的坚持定时器 (22)

2021-06-11  本文已影响0人  helinyu

TCP : 通过让接收方指明希望从发送方接收的数据字节数(即: 窗口大小) 来进行榴莲该控制。 如果窗口大小为0的时候,将会有效组织发送方传送数据,知道窗口变为非0为止 。

  1. 当发送方收到报文段9时, 它打开报文段8关闭的窗口并立即开始发送数据。
  2. TCP必须能够处理打开此窗口的ACK(报文段9)丢失的情况。【ACK 的传输并不可靠, 也就是说:TCP不对ACK报文段进行确认, TCP只确认那些包含有数据的ACK报文段】
  3. 如果一个去人丢失了, 则双方就有可能因为等待对方而使连接终止。【接收方等待接收数据(因为它已经给发送方通告了一个非0的窗口),则发送方在等待允许它继续发送数据的窗口更新。 为防止这种死锁情况的发生, 发送方使用一个坚持定时器[persist timer]来周期性地向接收方查询, 以便发现窗口是否已增大。 这些从发送方发出的报文段被称为 窗口探查(window probe)
一个例子
  1. 1~13 显示的是从客户到服务器的正常的数据传输过程, 有916个字节的数据填充了窗口。 服务器通告窗口大小为4096字节。且默认的插口缓存大小为4096字节。 但实际上它一共接收了9126字节的数据, 这是在SVR4中TCP代码和流子系统(stream subsystem)之间某种形式交互的结果。
  2. 报文段13中,服务器确认了前面4个数据报文段,然后通告窗口为0, 从而使客户停止发送任何其他的数据。 这就引起客户设置其坚持定时器。 如果在该定时器时间到时,客户还没有收到一个窗口更新, 它就探查这个空的窗口以决定窗口更新是否丢失。 由于服务器进程处于休眠状态, 所以TCP缓存9216字节的数据并等待应用进程读取。
  3. 客户发出的窗口探查之间的时间间隔。 在收到一个大小为0的窗口通告后的第1个(报文段14)间隔为4.949秒, 下一个(报文段 16) 间隔是4.996 秒, 随后的间隔分别约为6, 12 , 24, 48, 60秒。 【为什么间隔总是比5、6、xxx 小零点几秒? 因为这些探查被TCP的500ms定时器超时例程锁触发。 当定时器时间到时, 就发送窗口探查, 并大约在4ms之后收到一个应答。 接收到应答使得定时器被重新启动, 但到下一个时钟滴答之间的时间则约为500-4ms】
  4. 计算坚持定时器时使用了普通的TCP指数退避。 5~60秒之间。
  5. 窗口探查包含一个字节的数据(序号:9217)。 TCP 总是允许在关闭连接前发送一个字节跌的数据。 请注意,尽管如此, 所返回的窗口为0的ACK并不是确认该字节(它们确认了包含9216在内的所有数据), 因此这个字节被持续重传。 被持续用来探测对端窗口的变化情况

22.3 糊涂窗口综合症

  1. 基于窗口的流量空内置方案,如TCP锁使用的,会导致一种被称为“糊涂窗口综合症SWS(Silly Window Syndrome)”的状况。 如果发生这种情况, 则少量的数据将通过连接进行交换, 而不是满长度的报文段。 导致传输效率低下。
  2. 现象:可发生在两端中的任何一端: 接收方可以通过一个小的窗口(而不是一直等到有大的窗口时才通告), 而发送方也可以发送少量的数据(而不是等待其他的数据以便发送一个大叔的报文段)。 可以在任何一端采取措施避免出现糊涂窗口综合症的现象。

解决方案: 在任何一端采取措施避免

  1. 接收方不通告小窗口。 通常的算法是接收方不通告这样的窗口, 窗口小于一个报文段(也就是将要接收的MSS), 或者窗口小于接收方缓存空间的一半,不论实际有多少。
  2. 发送方避免出现糊涂窗口综合症的措施是只有一下条件之一满足时才发送数据:《a》可以发送一个满长度的报文段; 《b》可以发送至少是接收方通告最大窗口大小一半的报文段; 《c》没有还未确认的数据或者该TCP连接上禁止使用Nagle算法 【在有尚未被确认数据的情况下, Nagle算法组织我们发送小的报文段; 禁止nagle算法后,几百年有未确认数据包,也可以发送数据包】。

小结:
在 连 接 的 一 方 需 要 发 送 数 据 但 对 方 已 通 告 窗 口 大 小 为0 时 , 就 需 要 设 置 T C P 的 坚 持 定 时 器 。 发 送 方 使 用 与 第2 1 章 类 似 的 重 传 间 隔 时 间 , 不 断 地 探 查 已 关 闭 的 窗 口 。 这 个 探 查 过 程 将 一 直 持 续 下 去 。
当运行一个例子来观察坚持定时器时,我们还观察到了 T C P 的 避 免 出 现 糊 涂 窗 口 综 合 症 的现象。这就是使 T C P 避 免 通 告 小 的 窗 口 大 小 或 发 送 小 的 报 文 段 。 在 我 们 的 例 子 中 , 可 以 观 察到发送方和接收方为避免糊涂窗口综合症所使用的策略。

上一篇下一篇

猜你喜欢

热点阅读