**1. 干什么** 三次握手(SYN、SYN+ACK、ACK)由内核协议栈完成,用户态仅调用 connect 并阻塞等待结果,应用代码不直接构造握手包。 **2. 谁在调** * 用户态主体:客户端程序。 * C 库封装层:`connect`。 * 内核态主体:TCP 状态机,发送 SYN、接收 SYN+ACK、回 ACK、维护序号与重传。 **3. 做什么业务** 客户端调用 connect (fd, 对端地址,长度) 后进入阻塞。内核协议栈发送 SYN,接收对端 SYN+ACK 后回 ACK,完成三次握手并把连接置为已建立,connect 才返回成功。序号计算、超时重传均由内核处理,应用层无 "发 SYN" 函数。 **4. 组件清单** * TCP 状态机(SYN\_SENT、ESTABLISHED 等) * 初始序号与重传定时器 * connect 阻塞等待 * 原始套接字(半开扫描例外路径) **5. 最小可运行** ``` # 单独观察connect期间内核完成三次握手 strace -e trace=connect ./cli 1