TCP最佳化是指客戶端和伺服器端雙方通訊鏈路的最佳化,透過最佳化儘量減少丟包重傳帶來的網路額外負擔。
各種丟包重傳的導致原因可以分為兩種:
• 傳送方發包速度高於網路鏈路所能承受的極限。
• 傳送方發包速度高於伺服器端所能承受的極限。
那針對這兩個問題,我們採取相應的最佳化:
-
針對第一個問題:
透過慢啟動的方式,客戶端逐漸加大傳送流量(倍數擴大),檢視網路所能承受的[cwnd],一旦網路過載,出現丟包,就縮小cwnd,直到網路恢復過來。透過在ip route上新增 initcwnd 10 的方式修改初始cwnd的大小,單位是MSS:
Maximum Segment Size
The maximum segment size (MSS) is a parameter of the Options field of the TCP header that specifies the largest amount of data, specified in bytes, that a computer or communications device can receive in a single TCP segment. It does not count the TCP header or the IP header (unlike, for example, the MTU for IP datagrams) -
針對第二個問題:
伺服器端在tcp握手建立之初,協商好[rwnd],通知客戶端以伺服器可以接受的速度傳送請求,避免伺服器過載。Rwnd 的大小取決於 頻寬和延遲的乘積。為什麼??
透過以下命令檢視接收視窗的大小:$ sysctl -a | grep tcp_mem net.ipv4.tcp_rmem =<MIN><DEFAULT><MAX>
https://cloud.tencent.com/developer/article/1918083