速读原著-TCP/IP(TCP经受时延的确认)

  • 2020 年 3 月 11 日
  • 筆記

第19章 TCP的交互数据流

19.3 经受时延的确认

在图1 9 – 2中有一些与本节将要论及的时间有关的细微之处。图 1 9 – 3表示了图1 9 – 2中数据交换的时间系列(在该时间系列中,去掉了所有的窗口通告,并增加了一个记号来表明正在传输何种数据)。

把从b s d i发送到s r v 4的7个A C K标记为经受时延的A C K。通常T C P在接收到数据时并不立即发送A C K;相反,它推迟发送,以便将 A C K与需要沿该方向发送的数据一起发送(有时称这种现象为数据捎带 A C K)。绝大多数实现采用的时延为 200 ms,也就是说,T C P将以最大200 ms的时延等待是否有数据一起发送。

如果观察b s d i接收到数据和发送A C K之间的时间差,就会发现它们似乎是随机的: 1 2 3 . 5、6 5 . 6、1 0 9 . 0、1 3 2 . 2、4 2 . 0、1 4 0 . 3和195.8 ms。相反,观察到发送A C K的实际时间(从0开始)为:1 3 9 . 9、5 3 9 . 3、9 4 0 . 1、1 3 3 9 . 9、1 7 3 9 . 9、1 9 4 0 . 1和2140.1 ms(在图1 9 – 3中用星号标出)。

这些时间之间的差则是 200 ms的整数倍,这里所发生的情况是因为 T C P使用了一个200 ms的定时器,该定时器以相对于内核引导的 200 ms固定时间溢出。由于将要确认的数据是随机到达的(在时刻 16.4, 474.3, 831.1等),T C P在内核的200 ms定时器的下一次溢出时得到通知。这有可能是将来1~200 ms中的任何一刻。

如果观察s v r 4为产生所收到的每个字符的回显所使用的时间,则这些时间分别为 1 6 . 5、1 6 . 3、1 6 . 5、1 6 . 4和17.3 ms。由于这个时间小于200 ms,因此我们在另一端从来没有观察到一个经受时延的A C K。在经受时延的定时器溢出前总是有数据需要发送(如果有一个约为 16 ms等待时间越过了内核的 200 ms时钟滴答的边界,则仍可以看到一个经受时延的 A C K。在本例中我们一个也没有看到)。

在图1 8 – 7中,当为检测超时而使用500 ms的T C P定时器时,我们会看到同样的情况。这两个200 ms和500 ms的定时器都在相对于内核引导的时间处溢出。不论 T C P何时设置一个定时器,该定时器都可能在将来 1~200 ms和1~500 ms的任一处溢出。Host Requirements RFC声明T C P需要实现一个经受时延的A C K,但时延必须小于500 ms。