什么是网络协议分析
你有没有遇到过网页打不开、APP加载慢,却不知道问题出在哪?其实,网络通信就像寄信,每一步都有规则可循。网络协议分析就是“拆信”的过程,通过查看数据是如何发送和接收的,来排查问题或学习通信机制。
常用的协议分析工具
说到抓包,Wireshark 是最常用的工具之一。它免费、开源,支持 Windows、macOS 和 Linux。安装后打开,你会看到所有正在使用的网络接口。选择正在上网的那个(比如 Wi-Fi 或以太网),点“开始”,就能实时看到经过的数据包。
抓一个 HTTPS 请求看看
打开浏览器访问百度,Wireshark 会立刻刷出一堆数据包。你会发现很多是 TCP 和 TLS 协议。HTTPS 基于 TLS 加密,所以你看不到具体传输的内容,但能看到连接建立的过程。
重点观察以下几个阶段:
- TCP 三次握手:SYN → SYN-ACK → ACK
- TLS 握手:客户端发“你好”,服务器回“证书+公钥”
- 加密通信开始
过滤器让分析更高效
数据包太多怎么办?用显示过滤器缩小范围。比如只看访问百度的流量:
ip.addr == 180.101.49.12
或者只看 HTTP 流量:
http
再比如筛选某个端口:
tcp.port == 443
这些过滤语句直接输入在顶部的过滤栏,回车即可生效。
分析 DNS 查询过程
当你在浏览器输入网址,第一步其实是查 IP 地址。这个过程叫 DNS 查询。在 Wireshark 中输入 dns 过滤,然后刷新一个网页,就能看到请求和响应。
点开一个 DNS 响应包,展开 “Domain Name System” 部分,可以看到返回的 A 记录(IPv4 地址)。比如你查 www.taobao.com,返回可能是一组 IP,这就是淘宝服务器的地址。
模拟一个简单的 TCP 通信
用 Python 写个小脚本,发一段文本到本地端口,再用 Wireshark 抓来看看:
import socket
# 客户端发送消息
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('127.0.0.1', 8888))
client.send(b'Hello from client')
client.close()
运行这段代码前,先在 Wireshark 开始抓包,过滤 tcp.port == 8888。你会看到完整的 TCP 三次握手、数据传输和四次挥手过程。虽然只是发了个“Hello”,但背后协议做了不少事。
理解常见协议字段
每个数据包都包含源 IP、目标 IP、源端口、目标端口、协议类型和数据长度。比如一条 HTTP 请求:
- 源 IP:你的电脑
- 目标 IP:网站服务器
- 目标端口:80(HTTP)或 443(HTTPS)
- 协议:TCP
这些信息组合起来,构成了网络通信的“身份证”。
实际应用场景
你在公司调试 API 接口,对方说“我们已经返回数据了”,但前端没收到。这时候抓个包,一看发现是中间代理把响应截掉了,问题立马定位。又比如家里路由器总掉线,抓包发现是 DHCP 续约失败,那就知道该去查路由器设置而不是怪宽带。
网络协议分析不是黑客技术,而是网络世界的“听诊器”。学会它,你就能听懂设备之间的“对话”。