【TCP/IP 教程·第十弹(完结篇)】《三次握手+四次挥手实战番外:抓个包,算次手,分手也优雅》
前面九连炮把 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.1025201 是 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=1001B 发 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,
心中有栈,
眼里有光,
不再怕“网络不好”——
因为真正的大佬,自己就能修好它。
—— 全系列完 ——
发表评论
评论列表