高性能Linux:TCP/IP內核參數調優之TCP窗口擴大因子(TCP Window Scaling)選項(理論篇)

TCP報文窗口字段介紹

在TCP報文頭部,有一個16比特的窗口字段,用來表示接受方的緩衝區大小,發送方可以根據這個值的大小來調節發送的數據量,從而起到流控的目的。
在這裏插入圖片描述
TCP的流量控制由連接的每一端通過聲明的窗口大小來提供 。窗口大小爲字節數 ,起始於確認序號字段指明的值,這個值是接收端期望接收的字節。窗口大小是一個16 bit字段,因而窗口大小最大爲65535字節。

窗口大小對性能的影響

TCP基於通告窗口大小的機制,運行發送方在停止並等待確認前可以連續發送多個分組。由於發送方不必每發一個分組就停下來等待確認,因此該協議可以加速數據的傳輸。TCP傳輸速率和窗口大小成正相關,在某些情況下,提高窗口大小能夠提高傳輸速率。但TCP窗口大小隻有16bit,最大表示65535字節,對當前千兆接口已經是標配,在數據中心對服務器上開始部署10G接口的現實情況下,65535字節的窗口顯然是不夠的。

窗口擴大因子

TCP頭部的最後一個選項字段(options)是可變長的可選信息。這部分最多包含40字節。RFC 7323 TCP Extension for High Performance中對相關選項進行了詳細介紹,更詳細信息可參考這個文檔。
在這裏插入圖片描述
常見對TCP選項有7種,其中kind=3是窗口擴大因子選項。TCP連接初始化時,通信雙方使用該選項來協商接收通過的窗口擴大因子。假設TCP頭部中的通告窗口大小爲N,窗口擴大因子(位移數)是M,那麼TCP報文段的實際接收通告窗口大小爲:N * (2 ** M)。M的取值範圍爲0 ~ 14。這樣的話,通告窗口最大約爲1GB,能夠滿足大部分應用的需求。

Linux下如何使能窗口擴大因子

從Linux內核2.6.8以後,TCP窗口擴大因子功能缺省是使能的。可以通過下面的命令來查看和設置:

cat /proc/sys/net/ipv4/tcp_window_scaling
echo "1" > /proc/sys/net/ipv4/tcp_window_scaling

參考資料

  1. TCP/IP詳解,卷一,第1版
  2. RFC 7323 TCP Extension for High Performance

歡迎關注個人公衆號

在這裏插入圖片描述

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