Linux 内核 TCP 的核心引擎:tcp_input.c 与 tcp_output.c 的协同之道
在 Linux 网络协议栈的精密体系中,net/ipv4/tcp_input.c
与 net/ipv4/tcp_output.c
如同 TCP 协议的双子引擎,共同驱动着互联网最核心的可靠传输协议。它们一个主“收”,一个主“发”,完美协作实现了 TCP 复杂的状态管理、流量控制、拥塞避免和可靠传输机制。
一、 tcp_input.c:TCP 接收路径的指挥官
作为 TCP 输入数据路径的核心,tcp_input.c
是网络数据包进入内核后的第一站,肩负着关键使命:
-
数据包处理与验证
校验 TCP 包头合法性(校验和、长度),提取有效载荷,为后续处理奠定基础。 -
TCP 状态机驱动
实现复杂的状态转换逻辑(如LISTEN -> SYN_RCVD -> ESTABLISHED
),通过tcp_rcv_state_process
函数响应 SYN、ACK、FIN、RST 等控制报文。 -
数据重组与交付
管理接收缓冲区 (sk_receive_queue