抓包实战系列第 6 篇。
上一篇我们分析了一次完整 HTTP 请求:DNS、TCP 三次握手、HTTP 请求、HTTP 响应、连接关闭。今天把其中最关键的一段单独拎出来:TCP 三次握手。我们不再只背 SYN、SYN+ACK、ACK,而是从真实抓包里看它们到底长什么样。
开场:背得滚瓜烂熟,抓包还是看懵
很多人都能背出三次握手:
客户端发 SYN 服务端回 SYN+ACK 客户端再回 ACK面试时也能说:
为了确认双方收发能力,并同步初始序列号。
这句话没错。
但一打开 tcpdump 或 Wireshark,很多人又会开始迷糊:
Flags [S] Flags [S.] Flags [.] seq 3824179201 ack 1972458302 win 64240 options [mss 1460,sackOK,TS val 123456 ecr 0,nop,wscale 7]这是什么?
为什么 seq 不是 0?
为什么 ack 要加 1?
为什么 Wireshark 里又显示 Seq=0、Ack=1?
MSS、Window Scale、