1. 程式人生 > >TCP流量控制--滑動視窗

TCP流量控制--滑動視窗

流量控制就是讓傳送方的傳送速率不要太快,要讓接收方來得及接收。

傳送發的傳送視窗不能超過接收方給出的接收視窗的數值。TCP的視窗單位是位元組,不是報文段。

通過下圖可以說明如何利用滑動視窗機制進行流量控制。

注意: 

  • 當視窗數為 0 時,傳送者不能正常傳送資料段,除非:

    • Urgent資料。比如,使用者想殺掉遠端機器上的程序的時候,可以傳送資料

    • 傳送者可以傳送一個位元組的資料段,以便讓接收者再次傳送期待接收的位元組號和視窗數(避免死鎖

  • 持續定時器--用來避免死鎖

    • 死鎖的產生

      • 接收方傳送了一個視窗數為零的確認(視窗更新),告訴傳送方等待。

      • 稍後,接收方空出了緩衝,傳送更新視窗的資料段,但是,很不幸,該分組丟失啦!

      • 現在,收發雙方都在等待對方傳送資料段過來,但永遠等不到!死鎖產生

    • 死鎖解決方案:傳送方在收到win=0時,啟動一個持續定時器,如果定時器超時沒有收到更新視窗,則傳送一個探測資料段,引發對方重新發出更新視窗。

  • 優化傳輸效率

    • 優化傳送端

      • 儘量不傳送資料含量小的資料段

      • 快取應用層的資料,達到一定量再發送

    • 優化接收端(糊塗視窗綜合徵)

      • 讓接收方等待一段時間

      • 或者,等到接收快取已有一半空閒的空間