1、初识网络报文:什么是报文?为什么需要过滤?抓包工具初体验。
各位同学,咱们今天正式开课。
说到网络调试,你第一个想到的是什么?
我个人习惯,第一件事就是打开Wireshark。为什么?因为网络世界里,报文就是一切。说白了,报文就是网络通信的“语言”。两台设备要聊天,就得靠报文来传话。
1.1 什么是报文?
报文,英文叫Packet,也有人叫它数据包。你可以把它想象成一封快递信。
这封信里,有收件人地址(目标IP)、寄件人地址(源IP)、信件内容(数据载荷),还有信封上的邮戳(时间戳、校验码)。
举个例子,你在浏览器里输入 www.baidu.com,回车。你的电脑会发出一串报文,大概长这样:
源IP: 192.168.1.100
目标IP: 14.215.177.39
协议: TCP
端口: 443 (HTTPS)
数据: GET / HTTP/1.1
嗯,这里要注意,报文不是一整块数据。它是一层一层封装起来的。就像俄罗斯套娃,最外面是物理层,然后是网络层、传输层,最里面才是应用层的数据。
我在项目中遇到过一位同事,他死活找不到一个HTTP请求失败的原因。后来我帮他抓了个包,发现报文在传输层就被丢了。为什么?因为TCP校验和不对。你看,不懂报文结构,你连问题出在哪一层都搞不清。
核心要点:报文 = 头部(控制信息)+ 载荷(实际数据)。头部决定了报文怎么走,载荷决定了报文说什么。
1.2 为什么需要过滤?
你想想看,一个正常的办公网络,一秒钟能产生多少报文?
我告诉你,少则几百,多则上万。如果你直接打开Wireshark,不设任何过滤条件,那屏幕上的数据就像瀑布一样往下刷。你根本看不清哪条是你要的。
这就是为什么需要过滤。
过滤,说白了就是“大海捞针”。你要从成千上万的报文中,精准地找到那几条有问题的。
常见的过滤场景有哪些?我列几个:
- 按IP过滤:只看某台设备的通信。比如
ip.addr == 192.168.1.100 - 按协议过滤:只看HTTP、DNS或TCP。比如
http或dns - 按端口过滤:只看某个服务的流量。比如
tcp.port == 443 - 按关键字过滤:搜索报文内容。比如
frame contains "password"
我曾经排查过一个DNS解析慢的问题。客户说网页打开要等5秒。我抓了包,发现DNS查询报文发出去后,等了3秒才收到响应。为什么?因为DNS服务器配置了递归查询,但上游服务器超时了。如果没有过滤,我根本不会注意到那3秒的延迟。
我的建议:刚开始学抓包,别急着看全部报文。先想清楚你要查什么问题,然后只过滤出相关的报文。这样效率最高。
1.3 抓包工具初体验
工欲善其事,必先利其器。咱们先来体验一下Wireshark的基本操作。
第一步:选择网卡
打开Wireshark,你会看到一个网卡列表。选哪个?
如果你要抓本机访问外网的流量,选你的Wi-Fi或以太网卡。如果你要抓虚拟机或容器里的流量,可能需要选虚拟网卡。
嗯,这里有个坑。我刚开始用Wireshark时,选了“任何”网卡,结果抓了一堆乱七八糟的广播包。后来才知道,要选对网卡,不然你看到的全是噪音。
第二步:开始抓包
双击网卡,Wireshark就开始抓了。你会看到一行行报文不断刷新。别慌,先按一下红色的“停止”按钮,让数据停下来。
现在,你看到的每一行,就是一个报文。双击某一行,可以看到它的详细结构:
Frame: 物理层信息
Ethernet II: 数据链路层(MAC地址)
Internet Protocol Version 4: 网络层(IP地址)
Transmission Control Protocol: 传输层(端口、序列号)
Hypertext Transfer Protocol: 应用层(HTTP请求/响应)
第三步:应用过滤
在顶部的过滤栏里,输入 http,回车。你会发现,屏幕上只剩下HTTP报文了。这就是过滤的威力。
再试试 ip.addr == 8.8.8.8,看看有没有和Google DNS通信的报文。
避坑指南:我曾经在客户现场抓包,忘了关Wireshark的“混杂模式”,结果抓到了整个局域网的所有流量。客户当场就炸了,说我在偷窥他们的数据。所以,记得在“捕获选项”里,只勾选你需要的网卡和过滤条件。
1.4 报文过滤的两种方式
Wireshark的过滤,其实分两种。很多人搞混了,我帮你理清楚。
| 过滤类型 | 作用时机 | 语法示例 | 特点 |
|---|---|---|---|
| 捕获过滤 | 抓包之前设置 | host 192.168.1.1 |
只抓符合条件的报文,减少磁盘占用 |
| 显示过滤 | 抓包之后设置 | ip.addr == 192.168.1.1 |
隐藏不符合条件的报文,不影响原始数据 |
我个人习惯,先用捕获过滤缩小范围,再用显示过滤精确定位。比如,我知道问题出在和某台服务器的通信上,就先设捕获过滤只抓那个IP的流量。这样抓下来的文件小,分析起来也快。
你想想看,如果你直接抓全量流量,一个文件可能几百兆。打开都费劲,更别说分析了。所以,学会过滤,是网络调试的第一步。
1.5 本章小结
好了,咱们今天聊了不少。
报文,就是网络通信的基本单位。过滤,就是帮你从海量数据中找到关键线索。Wireshark,就是你的“网络显微镜”。
下一章,我会带你深入Wireshark的界面,看看每个窗口到底在说什么。到时候,你会发现自己已经能看懂那些“天书”了。
记住,别怕报文多。你只要学会过滤,就能掌控全局。