
backlog是一個連接配接隊列,在Linux核心2.2之前,backlog大小包括半連接配接狀态和全連接配接狀态兩種隊列.
半連接配接狀态: 伺服器處于監聽狀态時收到用戶端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。可以在配置檔案 /proc/sys/net/core/somaxconn 中直接修改,或者在 /etc/sysctl.conf 中配置 net.core.somaxconn = 128 。