TCP源码浅读(5)三次握手-主动方接收SYN+ACK

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

版本: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 相关信息,和发送第一握手时结构一致,只是状态变更了:

未完待续...

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值