TCP的流量控制
1扫腺、利用滑動窗口實現(xiàn)
原理:讓發(fā)送方的發(fā)送速率不要太快,要讓接收方來得及接收笆环。
原則:發(fā)送方的發(fā)送窗口不能超過接收方給出的接收窗口的數(shù)值。窗口單位是字節(jié)躁劣,不是報文段。[通過TCP首部窗口字段(rwnd)調(diào)整接收方的發(fā)送窗口數(shù)值大小]
注意一種情況:如果接收方發(fā)送rwnd=0的報文給發(fā)送方(也就是不允許發(fā)送方發(fā)送數(shù)據(jù)习绢,這時候可能接收方窗口中數(shù)據(jù)已經(jīng)滿了),這時候發(fā)送方要暫停發(fā)送數(shù)據(jù)闪萄,等待接收方的rwnd重新調(diào)整大小,過一段時間如果接收方發(fā)送一封報文使得rwnd>0(發(fā)送方可以發(fā)送數(shù)據(jù)了)放航,而很不巧,報文丟失了广鳍!那么發(fā)送方會一直等下去嗎吓妆?答案是不會。TCP為每一個連接都設(shè)置一個持續(xù)計時器行拢。只要發(fā)送方接收到了rwnd=0的報文就啟動持續(xù)計時器,若時間到了舟奠,便發(fā)送一個探測報文段(僅攜帶一個字節(jié)),這時候接收方就可以發(fā)送確認(rèn)報文抬纸,調(diào)整rwnd和持續(xù)計時器,解決問題湿故。
2、TCP的傳輸效率
TCP的首部有至少二十個字節(jié)晓锻,如果每次發(fā)送一個字節(jié)飞几,那么效率會降低很多,所以需要適當(dāng)調(diào)整TCP報文的大小。有三種機制:1)讓TCP維持一個變量MSS(最大報文段長度)纷铣,只有緩存到MSS后再將數(shù)據(jù)發(fā)送出去;2)由應(yīng)用程序指明數(shù)據(jù)的長度搜立,即推送(PSH)操作;3)由發(fā)送方的計時器控制啄踊,時間到達(dá)了便發(fā)送(長度不能超過MSS)
而現(xiàn)在廣泛使用的是Nagle算法來調(diào)控,大致是這樣子颠通,最開始發(fā)送一個字節(jié),從發(fā)送到接收顿锰,返回收到確認(rèn)報文這段時間启搂,發(fā)送方先將這期間需要發(fā)送的到達(dá)數(shù)據(jù)緩存,收到確認(rèn)報文后再發(fā)送數(shù)據(jù)胳赌,一直循環(huán)。
參考《計算機網(wǎng)絡(luò)第7版》謝希仁