我们在网络编程时,一般过程是创建套接字,然后绑定端口,然后开始监听,那么这个所谓的监听数量为什么一般很小,但是能接收很多连接,恩,后来才知道不在一个过程上,下面先从listen函数看起。
listen(socket, backlog);
socket backlog定义内核监听队列的最大长度。
内核为任何一个给定的监听套接字维护两个队列:
1) 未完成连接队列。每个这样的SYN分节对应其中一项:已由某个客户端发送到服务器,服务器等待完成三次握手过程。这些套接字处于SYN_RECV状态。
2) 已完成连接状态队列。处于ESTABLISHED状态。
查看listen监听队列内容 netstat -nt | grep 端口号
syncookies功能,它控制着系统内核ipv4参数修改是否生效。如果启动,那么内核参数修改无效。
$cat /proc/sys/net/ipv4/tcp_syncookies 查看是否开启
$echo 0 > /proc/sys/net/ipv4/tcp_syncookies 通过echo禁用syncookies