版本:linux 4.18.1
作为学习笔记,本篇只讨论常规的交互过程,旨在理清 linux 内核对 TCP 相关的信息管理。
主动方调用 connect 函数向被动方发起第一次握手后一直处于阻塞状态,直到收到被动方的响应,即第二次握手,主动方才可以继续接下来的处理。
先前我们说过,所有接收的 TCP 信息都会调用 tcp_v4_rcv 函数,看下代码

老套路,收到请求后先查找 sock,本次查找到的 sock 是第一次握手时添加到 ehash 中出处于 TCP_SYN_SENT 状态的那个 sock;
然后对 SYN+ACK 包做各种合法性检查,检查通过后,将 sock 变更为 TCP_ESTABLISHED 状态;
最后构建第三次握手的 ACK 包发送给服务端。
看下此刻 内核中保存的 tcp 相关信息,和发送第一握手时结构一致,只是状态变更了:

本文档详细解析了Linux 4.18.1内核中TCP连接的建立过程,重点讲述主动方connect后的阻塞、SYN+ACK验证、状态转换及三次握手关键步骤。

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



