悟夕导航

【TCP/IP 教程·第十弹(完结篇)】《三次握手+四次挥手实战番外:抓个包,算次手,分手也优雅》

71 0 0
前面九连炮把 TCP 理论轰了个遍,今天真枪实弹
现场抓包 → 现场算 Seq/Ack → 现场数挥手 → 现场看 2MSL。
学完就能跟妹子说:“我请你抓包,不算手,只算心。”

1. 实验拓扑(最简)

笔记本A ──(Wi-Fi)── 家用路由 ──(网线)── 笔记本B
 192.168.1.101              192.168.1.102

工具:Wireshark 4.x + iperf3 + curl
目标:A→B 建连、传 1 KB、主动断开,全程抓包。


2. 开局一把抓:过滤别眼花

启动 Wireshark,接口选 WLAN,Filter 直接:

tcp.port == 5201 and ip.addr == 192.168.1.102
5201 是 iperf3 默认端口,提前占坑,防止其他流量乱入。

3. 三次握手数值现场算

报文 1 SYN

Seq = 0          (相对序号,Wireshark 自动 *Relative*)
Win = 64240
Options: MSS=1460, WS=256, SACK_PERM=1

报文 2 SYN+ACK

Seq = 0
Ack = 1          (0+1)
Win = 65160

报文 3 ACK

Seq = 1
Ack = 1          (0+1)
记住公式:Ack = 对方 Seq + 负载长度
握手没负载,所以纯粹 +1,像点头礼。

4. 传 1 KB 数据:Seq/Ack 跳绳

A 发 1000 字节 →

Seq=1, Len=1000 → B 回 Ack=1001

B 发 500 字节 →

Seq=1, Len=500  → A 回 Ack=501

一眼看出:Ack 值 == 期望对方下一次的 Seq 值
丢包重传时,Seq 不变,像外卖重送同一订单。


5. 四次挥手:谁先发 FIN 谁当“甲方”

本例让 A 主动 Ctrl+C:

A → FIN  Seq=1001  Ack=501
B → ACK  Seq=501   Ack=1002
B → FIN  Seq=501   Ack=1002
A → ACK  Seq=1002  Ack=502
中间两次 B 的 ACK+FIN 不能合并(全双工),
但 Linux 常在 0.1 ms 内连发,肉眼看似“三次”。

6. TIME_WAIT 现场计时

A 发完最后 ACK,维持 2MSL(Linux 60 s)。
Wireshark 统计 → 该 Socket 60 秒内端口 64240 不再复用。

netstat -an | grep 5201 可见:
TIME_WAIT  192.168.1.101:64240 → 192.168.1.102:5201  ...

高并发服务器要调:

net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_tw_buckets = 50000

否则端口被吃光,新连接“Cannot assign requested address”。


7. 同时打开实测(彩蛋)

A、B 同一毫秒互打:

nc -p 5000 192.168.1.102 5000

抓包出现仅 2 条 SYN+ACK交叉,
没有第三次纯 ACK,2 次握手完成!

理论值成真,比相亲闪婚还快。

8. 常见“现场翻车”问答

Q:为啥我抓的 Seq 不是 0?
A:Wireshark 绝对序号太大,菜单 Edit→Preferences→Protocols→TCP→Relative Seq 打钩。

Q:挥手只有 3 条?
A:服务器启用 TCP_QUICKACK延迟 ACK≤40 ms,ACK+FIN 几乎同发,
肉眼合并,但计数仍是 4 次。

Q:RST 乱入?
A:你 Ctrl+Z 强杀进程,内核直接发 RST,连接异常中止
没有 TIME_WAIT,像掀桌子跑路。


9. 一键脚本:自动算重传率

tshark -r capture.pcap -q -z io,stat,1,"tcp.analysis.retransmission"

输出示例:

Retransmissions: 5 (0.20%)
生产环境 >1% 就要警惕丢包或拥塞。

10. 思维导图(回忆杀)

三次握手 → 同步序号 + 防旧连接
四次挥手 → 双向独立 + 2MSL 冷静
Seq/Ack → 对方 Seq + 负载长度
快速重传 → 3 重复 ACK
SYN Flood → 队列满,开 cookies
把这张图刻在桌面,
下次抓包不再懵,分手也能数清楚四次

全剧终 · 彩蛋

TCP/IP 九连炮 + 实战番外至此收官,
从外卖门牌→快递站→切蛋糕→宿管阿姨→电话簿→雷达→握手,
一路打怪升级到“抓包数分手”

江湖路远,协议常新
IPv6 普及、QUIC 替代、HTTP/3 跑在 UDP、
eBPF 让内核可编程、星链重构延迟……

愿你手握 Wireshark,
心中有栈,
眼里有光,
不再怕“网络不好”——
因为真正的大佬,自己就能修好它

—— 全系列完 ——

0
快来点个赞吧

发表评论

隐私评论

评论列表

来写一个评论吧