擁塞控制 vs 流量控制

2021-09-29 09:47:51 字數 1149 閱讀 1625

在 tcp 中,擁塞視窗和接收視窗的最小值,是任意時刻內傳送方確定能被傳送出去的位元組數。

擁塞視窗受擁塞控制的影響,接收視窗受流量控制的影響,以下會分別介紹擁塞控制和流量控制。

擁塞控制與流量控制本質上來說,是生產者消費者的模型,如下圖所示:

目的:通過減少傳送方傳送的資料量,起到阻止傳送方到接收方之間的鏈路變得擁塞的目的。

實現:擁塞控制通過擁塞視窗實現,擁塞視窗由傳送方維護,通過預估鏈路的擁塞程度實現。

好奇如我,如果看到上面的實現的定義,肯定會三連問,什麼叫預估鏈路的擁塞程度?用什麼標準判斷鏈路是否擁塞?擁塞發生了怎麼緩解擁塞?

別急,在思考上面的問題的時候,先思考個小問題,「你跟好朋友約飯,你怎麼預估她來的路上是否堵車呢?」

答:很弱智的問題是不是,2019 年了,各種地圖軟體開啟看看就能猜到了,那讓我們在深入思考下,地圖軟體怎麼評估哪個路段是否是堵車呢?

車輛有個天然的屬性就是速度,取出歷史和當前同一時刻資料,判斷當前資料 - 歷史資料的差值,若為整數,則下一時刻堵車的概率低;若為負數,則下一時刻堵車的概率高

讓我們回到問題的主線上:

擁塞發生了怎麼緩解擁塞?

送分題,減少傳送的資料被,但是難點在於按照什麼策略減少,是直接減少到 0 ,什麼都不發了,還是按照某種策略減少傳送的資料。

就好像沒有乙個東西能夠滿足所有場景一樣,各種擁塞控制演算法只是在側重點上有所不同,並無好壞之分。不過有是否過時之分,畢竟網際網路誕生之初,並沒有這麼高的頻寬。

改進擁塞控制演算法我目前理解就是兩點:

本質上還是如何充分的利用頻寬,不過還有乙個 tcp 公平性的問題,在設計擁塞演算法的時候需要考慮,先在腦子裡留個概念吧,細節有空補補。

目的:減少傳送方傳送的資料量,起到緩解接收方壓力的目的。

實現:接收方控制傳送方傳送的資料大小,每次應答的時候通知傳送方自己還剩餘多少空間可以接受資料。

流量控制的實現是基於滑動視窗實現,具體細節如下:

問:接收方發現自己的快取區滿了要怎麼處理?

答:將 tcp 首部的「視窗大小」設定為 0,此時傳送方將不再傳送資料,但需要定期傳送乙個視窗探測的資料報,是傳送能夠在視窗有空餘的時候繼續傳送資料。(ps 不過這裡為什麼不是接收方主動通知呢?是因為不知道要發什麼包嘛,還是主動推的話協議會複雜化,只是我也不知道……

寫在最後,最近拖延症晚期,先寫一點是一點吧……

TCP流量控制 擁塞控制

如果傳送者傳送資料過快,接收者來不及接收,那麼就會有分組丟失。為了避免分組丟失,控制傳送者的傳送速度,使得接收者來得及接收,這就是流量控制。流量控制根本目的是防止分組丟失,它是構成tcp可靠性的一方面。主要的方式就是接收方返回的 ack 中會包含自己的接收視窗的大小,並且利用大小來控制傳送方的資料傳...

TCP流量控制 擁塞控制

什麼是流量控制?流量控制的目的?如果傳送者傳送資料過快,接收者來不及接收,那麼就會有分組丟失。為了避免分組丟失,控制傳送者的傳送速度,使得接收者來得及接收,這就是流量控制。流量控制根本目的是防止分組丟失,它是構成tcp可靠性的一方面。如何實現流量控制?由滑動視窗協議 連續arq協議 實現。滑動視窗協...

流量控制和擁塞控制

就是讓傳送方的傳送速率不要太快,要讓接受方有時間接收。利用滑動視窗機制可以很方便的在tcp連線上實現對傳送方的流量控制。tcp接收方利用自己的接受視窗的大小來限制傳送方的視窗大小。tcp傳送方收到接受方的0視窗通知後,應啟動持續計時器,持續計時器超時後,向接收方傳送0視窗探測報文。概念 在某段時間,...