天天看點

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

TCP封包視窗字段介紹

在TCP封包頭部,有一個16比特的視窗字段,用來表示接受方的緩沖區大小,發送方可以根據這個值的大小來調節發送的資料量,進而起到流控的目的。

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

TCP的流量控制由連接配接的每一端通過聲明的視窗大小來提供 。視窗大小為位元組數 ,起始于确認序号字段指明的值,這個值是接收端期望接收的位元組。視窗大小是一個16 bit字段,因而視窗大小最大為65535位元組。

視窗大小對性能的影響

TCP基于通告視窗大小的機制,運作發送方在停止并等待确認前可以連續發送多個分組。由于發送方不必每發一個分組就停下來等待确認,是以該協定可以加速資料的傳輸。TCP傳輸速率和視窗大小成正相關,在某些情況下,提高視窗大小能夠提高傳輸速率。但TCP視窗大小隻有16bit,最大表示65535位元組,對目前千兆接口已經是标配,在資料中心對伺服器上開始部署10G接口的現實情況下,65535位元組的視窗顯然是不夠的。

視窗擴大因子

TCP頭部的最後一個選項字段(options)是可變長的可選資訊。這部分最多包含40位元組。RFC 7323 TCP Extension for High Performance中對相關選項進行了詳細介紹,更詳細資訊可參考這個文檔。

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

常見對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

歡迎關注個人公衆号

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

繼續閱讀