高效能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
參考資料
- TCP/IP詳解,卷一,第1版
- RFC 7323 TCP Extension for High Performance
歡迎關注個人公眾號
相關文章
- 實用TCP協議(2):TCP 引數優化TCP協議優化
- TCP之擁塞視窗原理TCP
- 查閱linux tcp核心引數kernel parameter tcp_max_syn_backlog含義之一LinuxTCP
- Qt TCP (小型聊天視窗)QTTCP
- TCP 擁塞視窗原理TCP
- 面試之TCP/IP面試TCP
- 【TCP/IP】TCP伺服器併發處理&原始碼TCP伺服器原始碼
- 【TCP/IP】TCP詳解筆記TCP筆記
- TCP接收視窗為什麼變大了?TCP
- Linux實時檢視TCP數量LinuxTCP
- TCP/IP族TCP
- TCP/IP模型TCP模型
- TCP / IP AT命令TCP
- 一篇帶你讀懂TCP之“滑動視窗”協議TCP協議
- TCP 流量控制-滑動視窗TCP
- 淺談TCP/IPTCP
- TCP/IP 基礎TCP
- tcp/ip協議TCP協議
- TCP/IP 筆記TCP筆記
- OSI和TCP/IPTCP
- TCP/IP 和SocketTCP
- 系列TCP/IP協議-TCP協議概述(011)TCP協議
- TCP/IP原始碼學習(23)——tcp_sendmsg(2)TCP原始碼
- TCP/IP五層模型-傳輸層-TCP協議TCP模型協議
- TCP/IP、UDP/IP協議TCPUDP協議
- Linux 高效能伺服器程式設計-TCP/IP 協議族Linux伺服器程式設計TCP協議
- TCP/IP協議族——高效能Linux伺服器程式設計TCP協議Linux伺服器程式設計
- 系列之TCP/IP協議-概述(001)TCP協議
- node之tcp篇入門理解TCP
- 大型站點TCP/IP協議優化TCP協議優化
- TCP/IP協議族TCP協議
- TCP/IP 協議族TCP協議
- TCP/IP網路模型TCP模型
- TCP/IP卷二 mbufTCP
- tcp/ip 學習(一)TCP
- socket,TCP/IP的理解TCP
- 系列TCP/IP協議-靜態IP選路(007)TCP協議
- Linux TCP/IP協議棧全過程LinuxTCP協議