TCP連接隊列

在 Linux 網(wǎng)絡通信中,backlog、net.core.somaxconn 和 ss 命令中的 Recv-Q/Send-Q 共同影響 TCP 連接的建立

  • 全連接隊列(Accept Queue)和半連接隊列(SYN Queue)都是針對服務端(TCP 服務端)的機制,限制請求連接數(shù),不是報文大小
  • 客戶端 只需發(fā)起 SYN 并等待 SYN+ACK,然后發(fā)送 ACK 完成握手,不涉及隊列管理
半連接隊列\(zhòng)全連接隊列
  • 半連接隊列 的大小 僅由 tcp_max_syn_backlog 決定,與 somaxconn 無關。

  • 全連接隊列 的大小由 min(somaxconn, 應用程序的 backlog) 決定(例如 Nginx 的 listen backlog=512)。

  • 兩者分工明確:
    半連接隊列:處理未完成三次握手的連接(SYN_RECV)。
    全連接隊列:處理已建立但待應用程序接受的連接(ESTABLISHED)。

1. backlog(應用層參數(shù))
  • 定義:backlog 是應用程序在調用 listen() 時指定的參數(shù),表示 全連接隊列(Accept Queue)的最大長度
  • 功能:當服務端完成三次握手后,連接會從 半連接隊列(SYN Queue) 轉移到 全連接隊列(Accept Queue),等待應用調用 accept() 處理
2. net.core.somaxconn(內(nèi)核參數(shù))
  • 定義:somaxconn 是 Linux 內(nèi)核參數(shù),表示 所有 TCP 監(jiān)聽套接字(socket)的隊列長度上限,包含全連接。
  • 功能:限制所有應用程序的 backlog 最大值。即使應用設置 backlog=1000,若 somaxconn=128,實際隊列長度仍為 128
3. ss 命令中的 Recv-Q 和 Send-Q
  • 作用: 通過 ss -ntlp 可查看 TCP 連接狀態(tài)
  • 不同狀態(tài)的解讀
狀態(tài)                           Recv-Q 含義                     Send-Q 含義
ESTABLISHED          應用未讀取的字節(jié)數(shù)(堆積數(shù)據(jù))    已發(fā)送但未收到 ACK 的字節(jié)數(shù)
LISTEN               當前全連接隊列中的連接數(shù)          全連接隊列的最大長度(backlog)
其他狀態(tài)              通常為 0                         通常為 0 
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容