<var id="plhz1"><strike id="plhz1"><listing id="plhz1"></listing></strike></var>
<var id="plhz1"></var>
<var id="plhz1"></var>
<menuitem id="plhz1"><strike id="plhz1"></strike></menuitem>
<var id="plhz1"><strike id="plhz1"><listing id="plhz1"></listing></strike></var>
<cite id="plhz1"></cite>
<cite id="plhz1"><strike id="plhz1"><thead id="plhz1"></thead></strike></cite>
<cite id="plhz1"><video id="plhz1"></video></cite><var id="plhz1"></var>

liang1234_ / tcp / TCP/IP協議中backlog參數

   

TCP/IP協議中backlog參數

2020-09-03  liang1234_

  TCP建立連接是要進行三次握手,但是否完成三次握手后,服務器就處理(accept)呢?

  backlog其實是一個連接隊列,在Linux內核2.2之前,backlog大小包括半連接狀態和全連接狀態兩種隊列大小。

  半連接狀態為:服務器處于Listen狀態時收到客戶端SYN報文時放入半連接隊列中,即SYN queue(服務器端口狀態為:SYN_RCVD)。

  全連接狀態為:TCP的連接狀態從服務器(SYN ACK)響應客戶端后,到客戶端的ACK報文到達服務器之前,則一直保留在半連接狀態中;當服務器接收到客戶端的ACK報文后,該條目將從半連接隊列搬到全連接隊列尾部,即 accept queue (服務器端口狀態為:ESTABLISHED)。

  在Linux內核2.2之后,分離為兩個backlog來分別限制半連接(SYN_RCVD狀態)隊列大小和全連接(ESTABLISHED狀態)隊列大小。

  SYN queue 隊列長度由 /proc/sys/net/ipv4/tcp_max_syn_backlog 指定,默認為2048。

  Accept queue 隊列長度由 /proc/sys/net/core/somaxconn 和使用listen函數時傳入的參數,二者取最小值。默認為128。在Linux內核2.4.25之前,是寫死在代碼常量 SOMAXCONN ,在Linux內核2.4.25之后,在配置文件 /proc/sys/net/core/somaxconn 中直接修改,或者在 /etc/sysctl.conf 中配置 net.core.somaxconn = 128 。

 

  可以通過ss命令來顯示

復制代碼
[root@localhost ~]# ss -lState Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:http *:* LISTEN 0 128 :::ssh :::* LISTEN 0 128 *:ssh *:* LISTEN 0 100 ::1:smtp :::* LISTEN 0 100 127.0.0.1:smtp *:*
復制代碼

  在LISTEN狀態,其中 Send-Q 即為Accept queue的最大值,Recv-Q 則表示Accept queue中等待被服務器accept()。

  另外客戶端connect()返回不代表TCP連接建立成功,有可能此時accept queue 已滿,系統會直接丟棄后續ACK請求;客戶端誤以為連接已建立,開始調用等待至超時;服務器則等待ACK超時,會重傳SYN ACK 給客戶端,重傳次數受限 net.ipv4.tcp_synack_retries ,默認為5,表示重發5次,每次等待30~40秒,即半連接默認時間大約為180秒,該參數可以在tcp被洪水攻擊是臨時啟用這個參數。

  查看SYN queue 溢出

[root@localhost ~]# netstat -s | grep LISTEN102324 SYNs to LISTEN sockets dropped

  查看Accept queue 溢出

[root@localhost ~]# netstat -s | grep TCPBacklogDropTCPBacklogDrop: 2334

參考資料:

TCP SOCKET中backlog參數的用途是什么?

TCP/IP協議中backlog分析與設置以及TCP狀態變化

TCP3次握手和backlog溢出 

TCP queue 的一些問題

TCP洪水攻擊(SYN Flood)的診斷和處理

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發布,不代表本站觀點。如發現有害或侵權內容,請點擊這里 或 撥打24小時舉報電話:4000070609 與我們聯系。

    0條評論

    發表

    請遵守用戶 評論公約

    類似文章 更多
    喜歡該文的人也喜歡 更多

    ×
    ×

    .00

    微信或支付寶掃碼支付:

    《個圖VIP服務協議》

    全部>>
    快3