TCP最佳化

zongzw發表於2024-06-11

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