TCP 流量控制/擁塞控制

流量控制——TCP支持根據接收端的處理能力,來決定發送端的發送速度。

我們知道TCP在接受方有接受緩存區,如果接受緩存區接受滿了,會造成什麼呢?

流量控制:如果接收端的接受緩存區滿了,就接受不了數據了,而發送方還一直的發送數據段給接受方。接受不了就會導致丟包的情況,而丟包,就會導致丟包重傳(快速重傳的機制)等等一系列連鎖的反應。會大大的增加網絡複雜情況。

解決:
1.TCP中規定,在接收端發送ACK確認應答的時候,在TCP首部中“窗口大小”字段,存放的是 現在我能接收的數據段大小(即我現在的緩衝區空閒大小)。
2.接受端如果緩存區快滿了,就會把窗口大小設置成一個更小的值,每次的ACK應答都會考慮自己的緩衝區大小而改變,緩衝區還剩多,設置的窗口大小就大點,小就小點。
3.如果接受方的緩存區滿了,則把TCP包頭中的窗口大小設置爲0,這時候發送方就不再發送數據了。
4.如果發送方接收到了接受方ACK中窗口大小爲0,不再發送數據,但是要定期發送一個窗口探測數據段,使接受方把窗口大小告訴發送方。

這裏寫圖片描述


擁塞控制
剛開始通信的兩方,接受緩存區肯定是空閒的,我們一開始通信,就大量的發送數據包合適嗎?

不合適,因爲當前的網絡環境會很複雜,如果我們冒然的發送大量的數據,無疑會增加網絡的負擔,影響網絡通信中各個通信。

爲了避免這樣的情況,TCP中還引入了擁塞控制

TCP 引入“慢啓動”機制,先發少量的數據,探探路,摸清楚當前的網絡擁堵情況,再決定按照多大的速度發送數據包。
這裏寫圖片描述

1.此處引入一個擁塞窗口的概念。
2.發送開始的時候,定義的擁塞窗口大小爲1。
3.每次接受到ACK應答,擁塞窗口加1。
4.每次發送數據包的時候,將擁塞窗口和ACK中的窗口大小做比較,去較小的值作爲當前發送窗口大小。

慢啓動:只是指初始時慢,但是增長速度非常快。
如圖:
這裏寫圖片描述

少量的丟包,我們僅僅是觸發重傳。大量的丟包,我們認爲是網絡擁塞。
擁塞控制就是想盡快的把數據傳輸給對方,但是又要避免給網絡造成太大的壓力。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章