相關基礎傳送門:
【TCP】:一個靠譜 Man 的自白
窗口的概念:
就像隊列一樣,起到緩存的作用。 當雙方開始建立連接時,會將各自的發送 / 接收 最大的窗口大小告知其,然後使其發送接受速率相同。
抓包圖(如果看不清楚可以 按住 ctrl + 鼠標滾到的那個進行放大): 注意看 ip 地址這部分,一開始是我的 PC 向瀏覽器所監聽的端口發送建立請求,這時你看橙色框起來的部分— 那部分雙方告知自己的窗口大小,以及 WS(理解成緩存窗口) 注: 這很容易亂,收/發窗口 和擁塞窗口不是一個概念,我這裏畫個容易理解的圖:
流量控制(避免將緩存塞滿):
[ 作用] : 通信兩端處理數據速度不一致問題。
(畢竟個人電腦的性能相比於服務器還是遜色一點)
問: 若當 xp 再一次 發送 rwnd=5 時的數據包,在傳輸時被丟棄,那雙方一直會處於等待狀態,都等待對方的消息,那此時 web 有啥措施可以避免這種情況發生?
簡單點說,就是通信雙方維持一個窗口大小,當我處理不過來時,你停下來等等我,等我處理完後,通知你繼續和我通信。
擁塞控制(避免將網絡塞滿):
-
產生擁塞原因(A+B+…+E 的數據量大於 網線帶寬最大量):
類似於高速公路的堵車,導致一個車都不能行駛。 -
作用
類比成交通警察,當發生堵車時,需要警察的指揮,才能快速恢復交通。 -
解決辦法
- 慢恢復算法
也就是,第一發送一個,收到對方的 ACK,第二次發送兩個,也都收到,那麼繼續增加… 直到出現丟包現象則控制 cwnd 爲剛開始發送時的大小。
- 快重傳 / 快恢復算法
原理:
算法圖:
這個算法是,當出現丟包,馬上控制擁塞窗口爲最大時的一半。
- 慢恢復算法
================ >.< =================
小結:穩住,真的沒那麼難。 ============== ?。? ==========