教学目标
📖 课前导入
前三节课我们从理论上学习了TCP、UDP和端口号。今天是传输层模块的实战课——我们要用Wireshark亲眼看到TCP三次握手、数据传输和四次挥手的全过程!
理论+实践 = 真正掌握!让我们开始抓包分析吧!
📚 一、实验准备
抓包实验准备步骤
已完成 0/5 步
打开Wireshark
设置捕获过滤器
开始捕获
产生HTTP流量
停止捕获
📚 二、分析TCP三次握手 ⭐重点
在Wireshark中找到三次握手
使用显示过滤器 tcp.flags.syn==1 或直接查找开头的三个包。你会看到类似这样的序列:
| No. | Source | Destination | Protocol | Info |
|---|---|---|---|---|
| 1 | 192.168.1.10 | 93.184.216.34 | TCP | 52341 → 80 [SYN] Seq=0 |
| 2 | 93.184.216.34 | 192.168.1.10 | TCP | 80 → 52341 [SYN, ACK] Seq=0 Ack=1 |
| 3 | 192.168.1.10 | 93.184.216.34 | TCP | 52341 → 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. | Source | Destination | Protocol | Info |
|---|---|---|---|---|
| 4 | 192.168.1.10 | 93.184.216.34 | HTTP | GET / HTTP/1.1 |
| 5 | 93.184.216.34 | 192.168.1.10 | TCP | [ACK] Seq=1 Ack=xxx |
| 6 | 93.184.216.34 | 192.168.1.10 | HTTP | HTTP/1.1 200 OK (text/html) |
| 7 | 192.168.1.10 | 93.184.216.34 | TCP | [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. | Source | Destination | Info |
|---|---|---|---|
| 20 | 192.168.1.10 | 93.184.216.34 | [FIN, ACK] |
| 21 | 93.184.216.34 | 192.168.1.10 | [ACK] |
| 22 | 93.184.216.34 | 192.168.1.10 | [FIN, ACK] |
| 23 | 192.168.1.10 | 93.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协议包 |
动手实践任务
- 用Wireshark抓取访问 http://example.com 的完整TCP会话
- 找到并标记三次握手的三个包,记录每个包的Seq和Ack值
- 找到HTTP GET请求和200 OK响应,查看HTTP请求头中的User-Agent和Host字段
- 找到四次挥手(或三次),观察FIN和ACK标志位
- 使用 Follow TCP Stream 查看完整的HTTP请求和响应内容
- (挑战)抓取一个DNS查询(UDP端口53),对比TCP和UDP包的首部差异
Wireshark抓包分析TCP完整过程
实操演示:从三次握手到HTTP数据传输再到四次挥手的完整Wireshark分析过程
实操演示:从三次握手到HTTP数据传输再到四次挥手的完整Wireshark分析过程
✅ 课堂小测
随堂测验
第 1/4 题在Wireshark中,如何只显示SYN包来定位三次握手?
📋 本课小结
三次握手在Wireshark中表现为SYN → SYN+ACK → ACK三个包。
数据传输可以看到HTTP请求/响应和TCP确认的交互过程。
四次挥手在实际中可能合并为三个包(FIN+ACK捎带)。
Follow TCP Stream是分析TCP会话内容的利器。
🏆 模块六总结:传输层——端到端通信
传输层模块学习完毕!核心知识点回顾:
第23课:TCP协议
报文结构、三次握手、四次挥手、流量/拥塞控制
第24课:UDP协议
8字节首部、TCP vs UDP对比、UDP应用场景
第25课:端口与套接字
端口分类、常用端口号、套接字概念、netstat命令
第26课:TCP抓包实战
Wireshark分析三次握手、数据传输、四次挥手
接下来进入应用层——DNS、HTTP、DHCP、FTP等我们每天都在使用的协议!