连接队列
它指的就是tcp状态节点的队列。tcp 状态分俩种,一种是完全连接状态即(established) , 一种是半连接状态(SYN_SEND 或 SYN_RECV)。
对于服务器来说,listen状态的节点当收到syn同步报文段后,会进行三次握手,当三次握手完成后,就生成一个 established 节点放到完全连接队列中,本质上 listen状态的节点是不负责具体的通信的,它并不接受具体的数据报文段,它只负责监听。(这就是为什么accept 系统函数,执行完毕后并不是listensocket去通信,而是accept返回的socket去通信。
完全连接队列与半连接队列
半连接队列都是处于SYN_SEND/SYN_RCVD状态的节点,它的大小由系统参数确定,/proc/sys/net/ipv4/tcp_max_syn_backlog来决定默认32位下512,64位下2048,最大8192。(测试环境是 Centos 6.5 32/64位)
完全连接队列是由listen 函数中的backlog参数决定的。它的大小在 0~/proc/sys/net/core/somaxconn之间(我的默认该值是128)。
修改内核参数
sudo sysctl -w net.core.somaxconn=2048 即可生效