1. 初始状态
- 服务器:监听套接字处于
LISTEN状态,等待来自客户端的连接请求。
分配全连接队列和半连接队列资源
-
分配全连接队列:
- 内核为监听套接字分配一个全连接队列(
accept_queue),用于存储已完成三次握手、处于已建立状态的连接。 - 全连接队列的大小由系统参数(如
somaxconn)控制,默认情况下是有限制的,以防止过多的连接占用资源。
- 内核为监听套接字分配一个全连接队列(
-
分配半连接队列:
- 内核为监听套接字分配一个半连接队列(SYN 队列),用于存储尚未完成三次握手的连接请求。
- 半连接队列实际上是一个哈希表,每个哈希桶存储一个指向
struct request_sock *的指针列表。这使得内核可以高效地查找和管理未完成的连接请求。 - 半连接队列的大小由系统参数(如
tcp_max_syn_backlog)控制,默认值也有限制,以防止 SYN Flood 攻击等安全威胁。
-
初始化队列头指针:
- 将全连接队列头指针
queue->rskq_accept_head初始化为NULL,表示当前没有待接受的连接。 - 将半连接队列的各个哈希桶初始化为空(即
NULL),准备接收新的连接请求。
- 将全连接队列头指针
TCP三次握手:从半连接到全连接队列

最低0.47元/天 解锁文章
1054

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



