第一次打开 Wireshark 做 “Lab 1 : Introduction” 的时候,很多人其实根本不知道这个工具到底要我们干什么。我也是从计算机网络的第一堂实验课开始接触它,当时只被告诉一句话:“用它抓包,看里面的协议。” 这句话听起来平平无奇,但真正上手之后我才发现,这门实验最大的价值不是让你学会点几个按钮,而是把课本里那些抽象到不行的 TCP、DNS、HTTP 概念,直接变成一条条可以点击、可以展开、可以对照报文的真实记录。做完了这个入门实验,后面再去学 TCP 三次握手、HTTP 请求结构,会轻松很多,因为你已经在抓包里亲眼见过它们长什么样了。
这个实验适合谁?我觉得两类人最有必要认真做一遍:一类是正在计算机网络课程上被各种协议名词折磨的学生,另一类是刚入职、需要排查网络问题的开发或运维。前者的目的是建立“协议不是理论、是数据”的直觉,后者则是把 Wireshark 从“听说过”变成“真会用”。这篇文章我就用做这份入门实验的实际经历,把它背后的操作逻辑、抓包原理、常见困惑一次讲清楚。
1. 这个实验到底在练什么
1.1 为什么第一课往往选择 Wireshark
网络协议有个很坑的地方:你看不见它。两台机器通信,TCP 握手发了什么、DNS 查了什么、HTTP 请求头长什么样,这些在终端里都是黑盒。Wireshark 解决的就是这一件事——把网络通信的内容“拍摄”下来,并且按照协议层级拆开给你看。
“Lab 1 : Introduction”作为第一课,其实是在完成一次认知切换。之前你理解的“上网”,可能是输入网址、按下回车、页面出现;做完实验之后,你要把这一整个过程拆成无数个独立的数据包:先有 DNS 查询解析域名,再建立 TCP 连接,然后发出 HTTP 请求,最后接收响应。这个拆解过程,就是网络工程师最基本的分析思维。
从工具使用角度来说,这个实验还有一个隐藏任务:让你熟悉 Wireshark 的主界面和抓包流程。很多人以为抓包是打开软件点个按钮就完事,结果一进去面对满屏滚动的数据直接傻眼。入门实验就是要先把这些基本功解决掉,后面才能谈得上“分析”。
1.2 实验之前需要具备的最小知识
做这个实验之前,不需要你背下所有协议报文格式,但有三个基础概念最好先有个印象:
第一,协议分层。最常见的分层模型里,数据从应用层开始,往下依次经过传输层、网络层、链路层。Wireshark 抓到的每个数据包,本质上是一个“套娃”结构:最外层是网卡能识别的帧信息,往里是 IP 头部,再往里是 TCP 或 UDP 头部,最里面才是应用数据。你在 Wireshark 里展开一条记录时,看到的也是这样的层级结构。
第二,IP 地址和端口。IP 地址决定了数据包去哪里,端口决定了数据包到达主机后交给哪个应用程序处理。Web 服务默认用 80 端口(HTTP)和 443 端口(HTTPS),DNS 服务用 53 端口。这些数字在后面写过滤器的时候会频繁出现。
第三,请求与响应的概念。大多数网络通信是“一问一答”的模式:你的浏览器发一个请求,服务器回一个响应。Wireshark 抓到的数据包,需要用这种“一问一答”的视角去看,才不觉得乱。
这些概念都不难,哪怕你只记得“IP 是地址、端口是门牌号”这个程度,也足够开始做实验了。剩下的,边抓边学,效率反而更高。
2. 抓包之前的环境准备
2.1 安装 Wireshark 与底层驱动
安装这一步看着简单,实际上有个非常关键的选项容易被直接跳过。在 Windows 上安装 Wireshark 时,安装界面会让你选择是否安装 Npcap。这个组件不是可选项,它是 Wireshark 能抓到数据包的根本前提。Wireshark 本身只是个分析展示界面的壳,真正负责从网卡上“截取”数据包的是 Npcap 这个底层驱动。如果安装时取消了这个组件,或者电脑上旧版本驱动冲突,启动后会看到接口列表是空的,没法抓包。
遇到这种情况的处理办法也很固定:去 Npcap 官网单独下载安装包重装,装完之后重启 Wireshark,接口列表就会出现了。这里还有个值得注意的事情:安装 Npcap 时如果勾选了“Support raw 802.11 traffic”相关选项,后续在无线网卡上抓到的内容会更底层,能看到 802.11 管理帧,但对于入门实验来说,保持默认设置即可。
在 Linux 环境下稍微不同。Ubuntu 这类系统可以通过 apt 安装 wireshark 和 tshark,但安装过程中系统会询问是否允许非 root 用户抓包。这里建议选择“是”,然后把当前用户加入 wireshark 用户组,这样就不需要每次都用 sudo 启动 Wireshark。命令很简单:
sudo apt install wireshark tshark sudo usermod -aG wireshark $USER改完用户组之后需要重新登录一次才能生效。如果没有加入用户组,双击打开 Wireshark 时能看到界面,但接口列表为空或者显示没有权限,这是 Linux 下最常见的第一个坑。
2.2 选对网卡接口是成功的一半
启动 Wireshark 之后,第一眼看到的是一个接口列表,上面是设备下的所有网卡接口名称。无线网卡通常叫类似“WLAN”或“wlan0”的名字,有线网卡叫“以太网”或“eth0”,回环接口叫“Loopback”或“lo”。做入门实验时,绝大多数人用的是笔记本连 WiFi,那就要选无线网卡的接口双击开始抓包。
很多时候有人会问:为什么我切换到了抓包界面,但看到的数据包很少?多半是因为选错了接口,抓的是虚拟机的虚拟网卡或者没在通信的有线网卡。判断方法很简单:看接口旁边实时跳动的数据包数量,数字一直在变化的才是当前正在通信的那块网卡。家里的路由器、光猫产生的管理流量也会被看到,这属于正常现象,不用在意。
还有一个容易被忽略的地方是“混杂模式”。Wireshark 默认会开启混杂模式,意思是网卡不仅仅接收发给自己的数据包,还会接收在当前网络中广播的所有数据包。对于入门实验,保持默认开启就行了。只有在某些特定场景下,比如抓取交换机下其他设备流量,混杂模式才体现出区别,但这超出了第一课的范畴。
2.3 给第一次抓包定一个“干净”的环境
做入门实验,最怕的就是打开抓包开关后,屏幕上数据刷刷刷地跳,根本分不清哪条是你“自己制造”出来的流量。所以正式抓包之前,我建议先做两件事:
第一,关闭其他网络占用程序。音乐播放器、网盘下载、后台视频播放软件,这些都会源源不断地产生流量,让抓包结果噪音巨大。第一课的目的是看清楚协议的交互过程,不是在噪音里找信号。关闭这些程序,能让你的抓包文件干净很多,分析时也省力。
第二,准备一个明确的抓包目标。比如我要访问一个简单的 HTTP 网站,或者用 ping 命令测一个地址,这个目标本身就是你的实验对象。不要开着抓包然后发呆等数据,那样抓到的只是后台杂讯。后面做实验时的标准动作应该是:启动抓包、马上执行目标操作、停止抓包,整个过程控制在十几秒内,效果最好。
3. 第一次实操:从访问一个网页开始
3.1 完整跑一遍抓包流程
我把入门实验的标准流程拆成了几个步骤,照着做就能拿到一份能交作业的抓包文件。
第一步,打开 Wireshark,确认接口列表里能看到你的网卡。根据你的网络环境,选择无线网卡或以太网接口。双击接口图标,此时 Wireshark 进入捕获状态,顶部会显示实时跳动的数据包数量。
第二步,立刻在浏览器里访问一个网站地址。这里要特别提醒一下:如果访问的是 HTTPS 网站,数据包里的内容大多是加密的,初学者看不出请求和响应的明文结构。做第一个实验,尽量找一个 HTTP 协议的网站地址。这一步的关键是触发真实的网络流量,让 DNS 查询、TCP 连接、HTTP 请求这些过程完整发生一遍。
第三步,回到 Wireshark 窗口。此时你应该能看到大量的数据包,如果你刚才的动作够快够干净,这些包里会包含你需要的完整交互过程。点击左上角的红色方块按钮停止抓包。
第四步,保存抓包结果。菜单里选择保存,默认格式是 pcapng,这个格式可以保留注释、统计信息等额外内容,是推荐格式。文件名按实验要求命名即可。养成“抓完就存”的习惯很重要,分析过程最好在一个已经保存的文件上进行,免得误操作丢失数据。
3.2 过滤器的正确打开方式
第一次看到满屏的数据包记录时,彻底懵掉是正常的。这时需要用过滤器把“有用”的数据单独筛出来。Wireshark 的过滤器分两种,很多人一开始分不清楚:捕获过滤器是在抓包之前设置的,作用是从源头丢弃不想要的数据包;显示过滤器是在抓包之后设置的,作用是把已经抓到的数据里符合条件的包显示出来。
入门实验核心用的是显示过滤器。在 Wireshark 窗口顶部的过滤栏里,直接输入表达式,回车,列表就会立即变化。我建议第一次实验先记住三个最简单的过滤表达式:
http dns tcp输入http,界面里就只剩 HTTP 协议的请求和响应报文;输入dns,就只剩 DNS 查询和响应;输入tcp,就能看到所有 TCP 连接相关的数据。这些过滤表达式本质上是在按协议名筛选,也是后续所有复杂过滤器的基础。
稍微进阶一点的用法,是按 IP 地址或端口过滤。比如你只想看你自己的电脑和某个服务器之间的通信:
ip.addr == 192.168.1.100 and tcp.port == 80这样写的意思是把源地址和目标地址中任意一个等于指定 IP 的、并且端口是 80 的数据包都列出来。过滤器的语法,说穿了就是“字段名 操作符 值”的组合,多试几遍就能掌握规律。
3.3 看看你抓到的第一份“作业”
当你用http过滤之后,列表里剩下的数据包会简洁很多。此时可以挑选几条记录,开始观察 Wireshark 主界面下半部分:一条数据包记录被点击时,下面会展开两个区域,上面是协议树,下面是原始字节。
协议树是逐层展开的。最外层是网卡帧信息,包含实际长度和抓取长度;然后是 IP 层,包含源地址、目标地址、TTL 等信息;再往上是 TCP 层,包含端口号、序列号、确认号、标志位;最上面是 HTTP 层,包含请求方法、请求地址、状态码等。
我建议第一次接触协议树时,按照“从外到里,一层层点开”的顺序看一遍。你会直观地理解“套娃”结构到底是什么意思,也会第一次意识到:原来一条 HTTP 请求记录里,真的能清清楚楚看到我输入的网址、请求头属性、浏览器信息这些内容。
4. 从“能看到”到“能看懂”
4.1 三个主区域协同读包
初次使用 Wireshark,对着界面会疑惑:为什么同一个包要在三个地方显示?其实这三个区域正好对应由浅入深的阅读顺序。
上方的数据包列表是“摘要视角”,每一行只显示一个数据包最核心的信息:编号、时间戳、源地址、目标地址、协议、长度、摘要信息。这个视角适合快速浏览整体状况,比如你能看到某段时间内一连串 TCP 包从源地址发往目标地址,大体能判断是发生在下载数据还是握手过程。
中间的协议树是“结构化视角”,把一个数据包拆成层叠的多级结构。它是 Wireshark 最强大的信息窗口,初学者在列表里看不懂的细节都藏在这里,比如 TCP 窗口大小、序列号、各种标志位。
下方的原始字节区是“最底层视角”,显示的是数据包在网线上传输时的十六进制形式和 ASCII 形式。当你点击协议树中的任意一个字段,原始字节区的对应字节会被高亮,这个联动效果非常值得玩一次:你选中 IP 层的源地址字段,再去看字节区,就能亲眼看到那几个字节对应着这个地址。
对入门实验来说,学会用前两个区域就够了。字节区更像是排查疑难问题时的“深度检查工具”,不急着现在就完全掌握。
4.2 认识一定会遇到的基本协议
做一次网络浏览的抓包实验,你会反复看到几种协议,这里用它们出现的顺序说说意义。
首先是 DNS。你在浏览器里输入网址,但这串字母机器不认识,需要先通过 DNS 服务器查出对应的 IP 地址。所以在数据包列表一开始,往往会看到几条dns协议的数据包,过滤后能看到查询记录和应答记录。DNS 数据包大多使用 UDP 53 端口,为什么用 UDP?因为一次查询交换的数据很少,没必要经历 TCP 三次握手的开销。
其次是 TCP。拿到 IP 地址之后,就要和服务器建立 TCP 连接。建立过程就是著名的三次握手:客户端发一个 SYN 标志位为 1 的包,服务器回一个 SYN+ACK 包,客户端再回一个 ACK 包。在 Wireshark 里,tcp过滤器下,你能在 Infomation 列清楚看到相对序列号和确认序列号的交替变化。第一次亲眼看三次握手,比背十遍课本都管用。
最后是 HTTP。连接建立之后,浏览器发送 HTTP 请求,服务器返回 HTTP 响应。用http过滤后,每条请求的 Method 字段是GET或POST,响应包的 Info 列里是类型和状态码。把请求包和响应包配对着看,就能理解一个典型的网页访问生命周期:查 DNS、建 TCP 连接、发请求、收响应。
再有就是 ARP。如果你抓包时先 ping 一个同一网段的地址,会看到目标地址的 ARP 包。它做的事情是询问:“这个 IP 地址对应的 MAC 地址是多少?”这属于局域网中链路层的基本机制,Wireshark 里能清清楚楚看到这种广播请求和单播回复。
4.3 加密流量带来的第一课
抓包过程中访问 HTTPS 网站时会发现一个现象:数据包里确实能看到 TCP 连接过程,但 HTTP 层的内容变成了一堆无法解读的密文,协议显示为TLSv1.3。这是加密协议在工作,Wireshark 默认情况下看不到应用层明文。
这件事反而是一堂很有价值的入门课。它让你意识到,Wireshark 并不是万能的——它能看到数据包的任何“壳”信息,比如从哪里来、到哪里去、走哪个端口、什么时候发的,但加密后的“瓤”它看不到,除非显式配置解密用的密钥或做中间人解密。对于入门实验,你只需要知道这个现象存在即可,不用尝试解密。后面学到 TLS 时,你会发现这也是它有趣的地方:连接协商过程本身也是协议分析的好样本。
5. 第一次做实验,最常踩的坑
5.1 打开 Wireshark 看不到网卡接口
这个坑几乎每届都会有人遇到。Windows 下多半是 Npcap 驱动没有安装,或者安装了但被安全软件拦截了服务。Linux 下多半是权限问题,当前用户不在 wireshark 用户组里。排查思路很简单:先看系统网络连接是否正常,如果正常,就检查驱动和权限。
这里有一个非常容易忽略的小细节:安装 Npcap 之后,部分电脑需要重启 Wireshark,甚至有需要重启系统的,驱动才能被正确加载。不要装完驱动就急着说“还是不行”,先重启一下再试。
5.2 过滤后什么都没剩下
输入http之后列表空白,这是入门实验最打击人的瞬间。原因大概率是你抓包时访问的是 HTTPS 网站,而不是 HTTP 网站。Wireshark 里 HTTP 和 HTTPS 是两种不同的协议过滤器,HTTPS 的报文在应用层显示为 TLS 协议,http过滤器自然不会匹配它们。
另一个常见原因是过滤表达式写错。Wireshark 的过滤器语法严格区分括号、空格、双等号,比如tcp.port == 443不能写成tcp.port = 443。写错时输入框会变红,提示有语法错误。遇到这种情况就把表达式删掉重写,先复制官方示例,再改自己的参数。
5.3 抓包期间开了太多“后台噪音”
我见过不少同学的抓包文件,动辄几千条数据,打开一看大部分是各种软件的后台通信,根本找不到实验要求的那几条记录。这不是 Wireshark 的问题,是实验操作习惯的问题。
我的建议是:抓包之前,先花十秒钟做个“清场”。关掉不必要的软件、停止系统自动更新、关掉网盘同步。然后用过滤器和目标操作配合,抓包时间尽量短,这样才能得到一份小而清晰的实验样本。做实验不是看谁抓的包多,而是看谁抓的包有效。
5.4 不知道保存什么格式
Wireshark 支持多种保存格式,入门阶段不用纠结,默认的 pcapng 格式就是最合适的选择。它能保留抓包的元数据,后续重新打开、添加注释、导出统计信息都很方便。老式的 pcap 格式只在个别旧工具需要兼容时才用。
保存时还有一个非常实用的习惯:在保存对话框里给文件起一个有辨识度的名字,比如 lab1-http.pcapng,不要叫 untitled。等到后面实验越来越多,你会发现规范命名节省大量时间。
6. 这个入门实验做完后,我的几点体会
做完 Lab 1 之后很长一段时间,我才慢慢体会到它真正的价值。它不是让你学会用某款软件,而是让你完成了一次看待网络方式的转变。以前我看网络,是在浏览器地址栏输入网址,页面加载,就以为“网络把数据传过来了”。做完实验我才意识到,这背后是若干不同协议在按部就班地协作,每一步都有明确的报文证据。之后做 TCP 重传分析、HTTP 状态码排查时,我脑子里会自动浮现出 Wireshark 里那些包的样子,这种画面感对理解问题帮助极大。
最后分享一个我后来一直沿用的习惯:每次抓完包,不只分析自己感兴趣的那条记录,也顺手看看它前后相邻的几条包在干嘛。网络数据包不是孤立存在的,它们像对话中的一句话,只有连同上下文一起看,才能真正理解它想表达什么。这个习惯看起来不起眼,却让我在之后正式排查网络问题的时候少走了很多弯路。第一课只是个开始,但把这个基础打扎实了,后面每一份实验,都会越做越顺。