我们在网络编程时,一般过程是创建套接字,然后绑定端口,然后开始监听,那么这个所谓的监听数量为什么一般很小,但是能接收很多连接,恩,后来才知道不在一个过程上,下面先从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
$cat /proc/sys/net/ipv4/tcp_max_syn_backlog
查看内核

本文详细介绍了TCP连接的建立过程,包括内核中的SYN和ACCEPT队列,以及backlog参数的作用。同时,解释了TCP发送数据的步骤,如MSS、慢启动和拥塞窗口的概念。在接收方面,讨论了内核处理TCP报文的四个队列,以及接收阙值和用户进程读取数据的过程。
最低0.47元/天 解锁文章
1875

被折叠的 条评论
为什么被折叠?



