一般來說,流量控制就是為了讓發(fā)送方發(fā)送數(shù)據(jù)的速度不要太快,要讓接收方來得及接收。TCP采用大小可變的滑動窗口進行流量控制,窗口大小的單位是字節(jié)。這里說的窗口大小其實就是每次傳輸?shù)臄?shù)據(jù)大小。
當一個連接建立時,連接的每一端分配一個緩沖區(qū)來保存輸入的數(shù)據(jù),并將緩沖區(qū)的大小發(fā)送給另一端。
當數(shù)據(jù)到達時,接收方發(fā)送確認,其中包含了自己剩余的緩沖區(qū)大小。(剩余的緩沖區(qū)空間的大小被稱為窗口,指出窗口大小的通知稱為窗口通告 。接收方在發(fā)送的每一確認中都含有一個窗口通告。)
如果接收方應(yīng)用程序讀數(shù)據(jù)的速度能夠與數(shù)據(jù)到達的速度一樣快,接收方將在每一確認中發(fā)送一個正的窗口通告。
如果發(fā)送方操作的速度快于接收方,接收到的數(shù)據(jù)最終將充滿接收方的緩沖區(qū),導致接收方通告一個零窗口 。發(fā)送方收到一個零窗口通告時,必須停止發(fā)送,直到接收方重新通告一個正的窗口。