速讀原著-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。