1. 程式人生 > >《TCP/IP詳解》讀書筆記(19章)-TCP的互動資料流

《TCP/IP詳解》讀書筆記(19章)-TCP的互動資料流

在TCP進行資料傳輸時,可以分為成塊資料流和互動資料流兩種,如果按位元組計算,成塊資料與互動資料的比例約為90%和10%,TCP需要同時處理這兩類資料,且處理的演算法不同。
書籍本章中以Rlogin應用為例觀察互動資料的傳輸過程。提示經受時延的確認是如何工作以及Nagle演算法怎樣減少了通過廣域網路傳輸的小分組的數目。
互動式輸入


上圖為沒有優化的字元輸入回顯的資料傳輸過程,一共需要四個報文段。
經受時延的確認
上圖第二,三個報文段可以合併---按鍵確認和按鍵回顯一起傳送。這種技術叫做經受時延的確認。
通常TCP在接收到資料時並不立即傳送ACK,相反,它推遲傳送,以便將ACK與需要沿該方向傳送的資料一起傳送(有時這種現象為資料捎帶的ACK)。絕大數實現採用的時延為200ms,也就是說,TCP將以最大200ms的時延等待是否有資料一起傳送。
ACK延時等待時間不大於TCP定時器的原因:
假如TCP使用200ms的定時器,該定時器將相對於核心引導的200ms固定時間溢位,由於將要確定的資料隨機到達,TCP將在下一次核心的200ms定時器溢位時得到通知,所以ACK實際等待的時間為1~200ms中任一刻。


Nagle演算法
Nagle演算法要求TCP連線上最多隻有一個未被確認的未完成小分組,在該分組確認到達之前不能傳送其他的小分組。相反,TCP收集這些少量的分組,並在確認到達時以一個大的分組發出去。
該演算法的優點在於它是自適應的:確認到達得越快,資料也就傳送得越快。可以減少網路上的微小分組數目,降低擁塞出現的可能(區域網這些小分組通常不會引起麻煩,但在較慢的廣域網則存在擁塞的可能)。但相應的,因為不是立即ACK,也會增加更多的時延。
有時我們也需要關閉Nagle演算法,例如滑鼠移動必須無時延地傳送,以便為使用者的互動提供實時的反饋。
流程:
(1)傳送端TCP將從應用程序接收到的第一資料塊立即傳送,不管其大小,哪怕只有一個位元組。
(2)傳送端輸出第一塊資料後開始收集資料,並等待確認。
(3)確認未達到時,若收集資料達到視窗的一半或一個MSS段,立即傳送。
(4)確認到達後,把緩衝區中的資料組成一個TCP段,然後傳送。