实践课40分钟

26课:TCP通信实战分析

抓包分析三次握手

教学目标

1使用Wireshark捕获TCP会话
2分析三次握手报文
3观察数据传输和连接释放过程

📖 课前导入

前三节课我们从理论上学习了TCP、UDP和端口号。今天是传输层模块的实战课——我们要用Wireshark亲眼看到TCP三次握手、数据传输和四次挥手的全过程!

理论+实践 = 真正掌握!让我们开始抓包分析吧!

📚 一、实验准备

抓包实验准备步骤

已完成 0/5

步骤 1

打开Wireshark

启动Wireshark,选择你正在使用的网络接口(通常是"以太网"或"Wi-Fi")。

步骤 2

设置捕获过滤器

步骤 3

开始捕获

步骤 4

产生HTTP流量

步骤 5

停止捕获

📚 二、分析TCP三次握手 ⭐重点

在Wireshark中找到三次握手

使用显示过滤器 tcp.flags.syn==1 或直接查找开头的三个包。你会看到类似这样的序列:

No.SourceDestinationProtocolInfo
1192.168.1.1093.184.216.34TCP52341 → 80 [SYN] Seq=0
293.184.216.34192.168.1.10TCP80 → 52341 [SYN, ACK] Seq=0 Ack=1
3192.168.1.1093.184.216.34TCP52341 → 80 [ACK] Seq=1 Ack=1

包#1:客户端 → SYN

客户端(192.168.1.10:52341)向服务器(93.184.216.34:80)发送SYN包。Wireshark显示的Seq=0是相对序号(实际是一个随机大数)。

包#2:服务器 → SYN+ACK

服务器回复SYN+ACK。Ack=1表示确认了客户端的SYN(期望下一个是序号1)。同时发送自己的SYN(Seq=0)。

包#3:客户端 → ACK

客户端确认服务器的SYN。此时三次握手完成,TCP连接建立成功!接下来就是HTTP数据传输了。

小贴士

Wireshark小技巧:Follow TCP Stream

在Wireshark中右击任一TCP包,选择 Follow → TCP Stream,可以看到整个TCP会话的完整数据内容(类似聊天记录的形式)。红色是客户端发送的数据,蓝色是服务器返回的数据。

📚 三、分析HTTP数据传输

三次握手之后,紧接着就是HTTP请求和响应:

No.SourceDestinationProtocolInfo
4192.168.1.1093.184.216.34HTTPGET / HTTP/1.1
593.184.216.34192.168.1.10TCP[ACK] Seq=1 Ack=xxx
693.184.216.34192.168.1.10HTTPHTTP/1.1 200 OK (text/html)
7192.168.1.1093.184.216.34TCP[ACK] Seq=xxx Ack=xxx

包#4:客户端发送HTTP GET请求。展开Wireshark可以看到完整的HTTP请求头。

包#5:服务器先发一个TCP ACK确认收到请求。

包#6:服务器发送HTTP响应(200 OK + 网页内容)。如果网页较大,会分成多个TCP段发送。

包#7:客户端ACK确认收到响应数据。

在Wireshark中展开TCP首部查看

点击任一TCP包,在中间面板展开 Transmission Control Protocol 层,可以看到:

  • Source Port / Destination Port:源端口和目的端口
  • Sequence Number:序号(Wireshark默认显示相对序号)
  • Acknowledgment Number:确认号
  • Flags:标志位(SYN、ACK、FIN等)
  • Window Size:窗口大小
  • Checksum:校验和

📚 四、分析TCP四次挥手

数据传输完成后,TCP连接需要释放。在Wireshark中使用过滤器 tcp.flags.fin==1 找到FIN包:

No.SourceDestinationInfo
20192.168.1.1093.184.216.34[FIN, ACK]
2193.184.216.34192.168.1.10[ACK]
2293.184.216.34192.168.1.10[FIN, ACK]
23192.168.1.1093.184.216.34[ACK]
知识点

实际抓包中的四次挥手

实际抓包中,你可能会看到三个包而不是四个。这是因为服务器在发送ACK的同时可能直接发送FIN(合并了第2步和第3步),这叫做延迟确认+捎带FIN,是正常现象。

📚 五、TCP分析常用过滤器

过滤器作用
tcp只显示TCP数据包
tcp.port == 80源或目的端口为80的TCP包
tcp.flags.syn == 1只显示SYN包(连接建立)
tcp.flags.fin == 1只显示FIN包(连接释放)
tcp.flags.reset == 1只显示RST包(连接重置)
tcp.analysis.retransmission只显示重传的TCP包
tcp.stream eq 0只显示第一个TCP流的所有包
http只显示HTTP协议包
实践

动手实践任务

  1. 用Wireshark抓取访问 http://example.com 的完整TCP会话
  2. 找到并标记三次握手的三个包,记录每个包的Seq和Ack值
  3. 找到HTTP GET请求和200 OK响应,查看HTTP请求头中的User-Agent和Host字段
  4. 找到四次挥手(或三次),观察FIN和ACK标志位
  5. 使用 Follow TCP Stream 查看完整的HTTP请求和响应内容
  6. (挑战)抓取一个DNS查询(UDP端口53),对比TCP和UDP包的首部差异

Wireshark抓包分析TCP完整过程

实操演示:从三次握手到HTTP数据传输再到四次挥手的完整Wireshark分析过程

15:00
Wireshark抓包分析TCP完整过程推荐视频15:00

实操演示:从三次握手到HTTP数据传输再到四次挥手的完整Wireshark分析过程

✅ 课堂小测

随堂测验

1/4

在Wireshark中,如何只显示SYN包来定位三次握手?

📋 本课小结

1

三次握手在Wireshark中表现为SYN → SYN+ACK → ACK三个包。

2

数据传输可以看到HTTP请求/响应和TCP确认的交互过程。

3

四次挥手在实际中可能合并为三个包(FIN+ACK捎带)。

4

Follow TCP Stream是分析TCP会话内容的利器。

🏆 模块六总结:传输层——端到端通信

传输层模块学习完毕!核心知识点回顾:

第23课:TCP协议

报文结构、三次握手、四次挥手、流量/拥塞控制

第24课:UDP协议

8字节首部、TCP vs UDP对比、UDP应用场景

第25课:端口与套接字

端口分类、常用端口号、套接字概念、netstat命令

第26课:TCP抓包实战

Wireshark分析三次握手、数据传输、四次挥手

接下来进入应用层——DNS、HTTP、DHCP、FTP等我们每天都在使用的协议!