📄 一句话概括
connect 触发三次握手:SYN 带各自的起始序号、ACK 确认——三个报文后两边对齐了【对账的起点】,管道算接通。
📝 本节和前面几节的关系
2.2.1/2.2.2 备好了概念;本篇看接通时线上真实跑的报文。
一、三次往来的剧本
客户端发 SYN(附起始序号 b);服务器回 SYN+ACK(起始号 a+确认 b+1); 客户端再回 ACK(确认 a+1)。三个报文,连接建立。
二、起始序号的意义
两边的序号不是从固定值开始而是随机起始—— 防止上一条同名连接的迟到大包混进这条连接。
三、动手 Demo:连接的三次握手
把剧本按时报文写出来:
for s in ['客户端 -> 服务器 SYN b (我想连)',
'服务器 -> 客户端 SYN a+ACK b+1',
'客户端 -> 服务器 ACK a+1 (连上了)']:
print(s)
实跑输出:
--------------------------------------------------------------------
连接的三次握手
--------------------------------------------------------------------
connect 触发的实际报文流(教材叫【1 拉 2 按 3 承认】):
客户端 -> 服务器 SYN b (我想连,起始号 b)
服务器 -> 客户端 ACK b+1 (收到了)
服务器 -> 客户端 SYN a (我也要连,起始号 a)
客户端 -> 服务器 ACK a+1 (收到了)
实际传输里 SYN 和 ACK 搭一辆车,共 3 次往来。
各自报的起始号(a、b)后面全程用来对账。
⭐ 2026 现状:三次握手同时承担了 TCP Fast Open、 SYN Cookie 防攻击等新职责——骨架三十年没变。
30 秒实验
- Wireshark 过滤 tcp.flags.syn==1,抓一次真实握手。
- 数一数握手共几个报文、各带什么标志位。
- 想想 SYN 攻击为什么能让服务器瘫(半连接堆满)。
常见误区
- 以为握手是【拉网线】的动作——交换的是控制报文。
- 以为序号从 1 开始——随机起始,双方各一套。
自测三问(点开对答案)
1. 三次握手各发什么? —— SYN、SYN+ACK、ACK。 2. 起始序号为什么随机? —— 防旧连接的包混入。 3. 握手完成后两边对齐了什么? —— 对账起点(各自的序号)。- ☐ 下一节(2.3.1 将HTTP请求消息交给协议栈)
相关笔记
- 对应用程序的数据进行可靠传输(TCP) —— 12 课的同款图
- 使用ACK号确认网络包已收到 —— 起始号之后怎么对账
- 🔌 网络是怎样连接的 · 索引