TCP的交互數據流

引言

       TCP進行數據傳輸時,可以分爲成塊數據流和交互數據流兩種,且處理的算法不同.

交互式輸入

       每一個交互按鍵都會產生一個分組,也就是說,每次從客戶傳到服務器的是一個字節的按鍵(而不是每次一行).


報文段2可以和報文段3進行合併—按鍵確認和按鍵回顯一起發送

經受時延的確認

按鍵確認和按鍵回顯兩個報文段合併在一起發送,這種技術叫做經受時延的確認。

 

通常TCP在接收到數據時並不立即發送ACK;相反,他推遲發送,以便將ACK與需要沿該方向發送的數據一起發送(有時稱這種現象爲數據捎帶ACK)

 

絕大多數實現採用的時延爲200ms,也就是說,TCP將以最大200ms的時延等待是否有數據一起發送.

Nagle算法

       目的:減少網絡上的微小分組,降低出現擁塞的可能,但也會增加延時.

 

       Nagle算法要求一個TCP連接上最多只能有一個未被確認的未完成的小分組,在該分組的確認到達之前不能發送其他的小分組.

流程:

       1,發送端TCP將從應用進程收到的第一數據塊立即發送,不管其大小,哪怕只有一個字節.

       2,發送端輸出第一塊數據後開始收集數據,並等待確認.

       3,確認未到達時,若收集數據打到窗口的一半或一個MSS段,立即發送.

       4,確認到達後,發緩衝區中的數據組成一個TCP段,然後發送.

 

Socket API用戶可以使用TCP_NODELAY選項來關閉Nagle算法.(比如當小消息需要無時延發送時)

 

    窗口大小通告

       Slip通告窗口大小爲4096字節

vangogh通告其窗口大小爲8192字節

服務器通常通告窗口大小爲8192字節,應爲服務器在讀取並回顯接收到的數據之前,其TCP沒有數據發送

發佈了24 篇原創文章 · 獲贊 2 · 訪問量 7977
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章