1. 为什么是 Wireshark先搞清楚你要解决什么问题如果你正在排查一个莫名其妙的“慢网络”或者想搞清楚某个服务到底有没有收到请求Wireshark 几乎是绕不开的工具。它是一款开源网络协议分析软件能在网卡上抓取经过的数据包再把密密麻麻的报文解析成“人话”字段。很多人觉得 Wireshark 上手门槛高其实不是因为功能复杂而是因为一开始就把顺序学反了。这篇从零开始学 Wireshark 的文章不聊底层原理堆砌只按我实际踩过坑之后的路径来走先抓包、再过滤、然后会读包、最后能用统计看全貌核心目标是让你在真实排障时敢打开 Wireshark并能用它定位问题。Wireshark 能解决什么问题比如“某个端口到底有没有外部连接进来”“某个请求发出之后对方有没有回包”“TCP 为什么反复重传”“哪台设备在疯狂跑流量”。这些问题靠 ping、telnet 只能看到表象抓包则能把每个细节摊开。适合运维人员、后端开发者、网络安全入门者也包括想弄明白自己家里路由器为什么不稳定的爱好者。学习它不需要昂贵的硬件普通电脑加上一个小型可控实验环境就足够关键是你要清楚抓包不是为了“看包”而是为了证明某种通信行为是否发生以及发生后符合不符合预期。在正式操作前有三件事必须先确认。第一是权限在 Windows 上要以管理员身份启动在 Linux 上最好对网卡有读取权限否则接口列表可能看着正常但点开始后一个包也收不到。第二是网卡选型优先用真实物理网卡做实验避免一开始就在桥接网络里被一堆虚拟网卡扰乱视线。第三是环境受控别拿生产环境或者自己不熟悉的网络练手建议先在虚拟机、本地回环接口或者自己可控的小网段里抓包。这不是矫情而是未授权抓包在现实中很容易越界学习期间守好边界。搞清楚了“为什么学”下面进入正题。我会按零基础可复现的顺序设计步骤每一步都尽量给出“我为什么这么做”的理由而不是死记按钮位置。2. 第一次抓包从选择网卡到拿到有效文件2.1 选对网卡抓包成功一半打开 Wireshark 会看到主界面中间列出一堆可用接口包括有线网卡、无线网卡、回环接口甚至虚拟网卡。新手最容易犯的错是随机选一个接口开始抓包发现包要么多到刷屏要么一只不出现。原因多数时候不是 Wireshark 坏了而是接口选错了。你想看哪个服务的通信就应该先确定流量从哪张网卡进出。比如浏览器访问外网服务可能走的是无线网卡访问机器上的本机进程那叫回环流量Windows 下需要专门的回环捕获接口Linux 上通常直接选 any 或者 lo。我的习惯是抓包前先在另一个终端执行 ping 或一次真实请求产生流量然后在 Wireshark 接口列表里看哪张网卡的数字在跳动跳动最明显的那个就是当前业务流量的真实入口。捕获过程本身很简单双击接口开始抓包观察包数量上涨然后点击红色方块停止。但保存文件这一步值得讲究。默认保存格式选 pcapng它比老式 pcap 能保留更多接口信息、注释和数据包元数据。分析阶段我通常保留原始全量数据不做任何过滤导出因为前期“宁多勿漏”才是排障的第一原则分析可以稍后进行但数据没了就真的没了。2.2 不混用“抓包过滤器”和“显示过滤器”Wireshark 里有两套完全不同的过滤体系刚入门的人经常把它们的表达式写混。第一套叫抓包过滤器原理是抓包驱动在底层就把不关心的包丢掉第二套叫显示过滤器作用是在已经抓到的数据里隐藏无关包。初学者如果不理解区别最典型的困惑就是“我怎么填了表达式还是收到一堆包”。抓包过滤器的语法简单但能力有限主要用于减少磁盘写入压力和内存占用。它的典型写法是在捕获选项的 Capture Filter 框里输入类似host 192.168.1.100 and tcp port 80的表达式表示“只要从这台主机发到 80 端口的数据”。注意这里能用 and、or、not但用的是抓包层面的穷举逻辑不能用这样的等号。我更建议新手用显示过滤器它灵活很多抓包时先不加任何条件等数据抓完后在顶部绿色过滤框里填表达式比如ip.addr 192.168.1.100 tcp.port 80效果同样是只看指定流量但这是事后分析不会因为漏过滤导致证据缺失。2.3 长时间抓包前先做“减负”和自动停止有一次我为了复现一个偶发问题让 Wireshark 整整抓了一晚上早上起来发现文件已经占了好几个 GB打开时卡到怀疑人生。后来我学会了两种减负方式一是在捕获选项里设置文件大小自动切分比如每个文件 20MB最多保留 20 个文件形成环形缓冲这样既能覆盖问题发生的时间窗口又不会把硬盘写满二是用抓包过滤器只保留目标流量比如明确是某个端口或者某台主机的通信。如果你打算用自动停止功能直接在捕获选项里设置时间或数据包数量上限。比如“抓取 30 秒后自动停止”适合复现短时故障。还有个小技巧长时间抓包的时候把主界面上的实时刷新关掉关闭实时更新列表能显著降低负载抓包进程本身更稳。想分析时再打开文件性能体验完全不一样。注意普通交换网络中一块网卡默认只能看到自己发出的和发给自己的报文。如果你想用 Wireshark 分析“别人的机器”流量不是靠软件开关就能实现的需要交换机端口镜像或者中间设备配合。日常学习阶段抓本机流量就是最合理、最安全的起点。3. 显示过滤器网络分析中最值钱的一块基本功3.1 显示过滤器的语法其实只有三层显示过滤器比抓包过滤器友好得多因为它面对的是已经被 Wireshark 解析好的协议字段。语法概括起来就是协议名.字段名 判断符 值。比如想查看从某个 IP 发出的包写的是ip.src 192.168.1.10想看某个端口有关的包写的是tcp.port 443。判断符在 Wireshark 里最常用的是和!另外还有大于、小于、包含等写法。逻辑组合用and、or、not也支持、||、!。量不大的时候我建议统一用英文单词而不是符号因为后续如果要写复杂的组合表达式单词的可读性明显好很多。括号也很重要例如(ip.src 192.168.1.10 tcp.port 80) || dns的意思是“这台机器发出的 80 端口包或者所有 DNS 包”。程度浅的时候很容易忽略优先级但抓包一多括号就是避免逻辑混乱的救命稻草。字符串字段要用双引号包起来比如 HTTP 请求方法写成http.request.method GET。字段名本身不需要背只要在显示过滤器输入框里敲几个字母Wireshark 会自动补全协议和字段名称这比死记硬背效率高得多。我身边很多人一开始记不住几个字段后来几乎全是靠自动补全和右键菜单学会的。3.2 高频实用的过滤器示例平时处理问题我常用的显示过滤器并不复杂都在下面这张表里。这些写法足够覆盖大部分日常分析你想看的内容显示过滤器写法某个 IP 相关的全部流量ip.addr 192.168.1.10某个 IP 发出的流量ip.src 192.168.1.10某个 IP 收到的流量ip.dst 192.168.1.10只看 HTTP 的 GET 请求http.request.method GET只看 DNS 查询请求dns.flags.response 0只看 TCP 重传包tcp.analysis.retransmission只看 ARP 协议arp只看 DHCP 协议bootp其中ip.addr 某个地址是最常被使用的“大小王”写法因为它是“存在即匹配”只要数据包里的源 IP 或目标 IP 任意一个是这个地址都会被显示出来。如果你想了解某一台主机整体的通信情况用它准没错。但如果你已经明确知道要看“发出去”或“接收过来”就用ip.src或ip.dst更精准也更容易找到方向。3.3 ip.addr 与 ip.src / ip.dst 的混淆要趁早避开初学者经常进的一个坑是写了ip.addr 192.168.1.10 ip.addr 192.168.1.20发现结果为零于是怀疑软件坏了。实际原因很反直觉ip.addr是存在匹配两个ip.addr条件会被解释成“同一个包的任意 IP 字段同时要满足这两个条件”而一个数据包不可能同时既来源于两个 IP又发往两个 IP。想表达“这两台机器之间的通信”应该用ip.addr 192.168.1.10 ip.addr 192.168.1.20在很多老版本里确实会出问题更好的写法是(ip.src 192.168.1.10 ip.dst 192.168.1.20) || (ip.src 192.168.1.20 ip.dst 192.168.1.10)。这个细节不是考试题而是实战中极易踩的坑。因为人脑会觉得“我已经说了两个 IP ”但 Wireshark 的判定逻辑完全不同。我建议你第一次见到这类现象时就把它当成一个独立知识点记下来看到ip.addr要理解成“这个包身上挂着的 IP 里有它就行”不要拿它做“包的两个 IP 必须同时等于什么”的推演。4. 读懂一个数据包从看明白列表到拆解三层信息4.1 抓包主界面到底在展示什么抓到包之后主界面的上半部分是一个逐行刷新的数据包列表每一行代表一个帧。最需要关注的列是 No、Time、Source、Destination、Protocol、Length、Info。Source 和 Destination 让你知道通信双方是谁Protocol 告诉你这是什么协议Info 则用一句话描述了这一帧的关键行为比如“TCP 三次握手第一条 SYN”。下半部分分为包详情和包字节。包详情以树状结构展示协议字段包字节则是原始十六进制内容。新手一开始不需要细读原始字节重点看包详情。包详情从上到下是按协议栈顺序排列的一个普通 HTTP 包会依次出现 Frame 帧信息、Ethernet II 以太网二层、IP 网络层、TCP 传输层、HTTP 应用层。每一层都可以展开看到对应的源端口、目标端口、序号、确认号、标志位、应用层头部等。我习惯把这种结构理解成快递寄送以太网相当于楼栋地址IP 相当于城市地址TCP 端口相当于收件人姓名HTTP 则是箱子里真正要交付的东西。分层看一个包不再是黑盒而是一条完整运输链路。4.2 从一次 HTTP 请求中把层次拆开用一个最典型的本机访问网页例子抓包后按一次 CtrlF 搜索http.request就可以定位到应用层请求。选中这一行后Packet Details 面板会从上至下显示Frame 层会给出抓包时间、帧长度、捕获长度和实际长度Ethernet II 层给出发送方 MAC 和接收方 MACIP 层给出源 IP、目标 IP、TTL 和协议号TCP 层给出源端口、目标端口、序列号和确认号HTTP 层给出请求方法、请求 URI、Host、User-Agent 等字段。注意 Length 列显示的是“这一帧在网线上占了多少字节”不只是应用数据大小。比如返回内容只有几十字节但实际帧长度可能有几百字节因为链路层头、IP 头、TCP 头都会占空间。初看很反常但只要懂得分层就不会被 Length 和实际载荷的落差骗到。新手最容易理解错的是“TCP 层和应用层在哪里分界”。TCP 数据段里有一个载荷长度字段表示这是 TCP 协议交给应用层的数据到底有多少字节。Wireshark 会把这个载荷在详情面板里专门划给上面的应用层协议。学会看这个边界之后你再去看 MTU 问题、分片问题、粘包问题思路会清楚很多。4.3 用三次握手把 TCP 状态讲明白TCP 握手是理解网络协议最好的“入门实验”。抓到一次建立连接的过程后先用显示过滤器输入tcp.flags.syn 1能看到所有带 SYN 标志的包。第一个包通常是从客户端发往服务端的 SYN序列号是随机初始值我们叫它 ISN第二个包是服务端返回的 SYNACK此时包里有 SYN 和 ACK 两个标志位第三个包是由客户端发出的 ACK。三层信息里你会看到一组很有意思的数值变化第一个包发出时Wireshark 显示相对序列号为 0确认号为 0第二个包回来时确认号自动变成了 1意思是“我收到了你的第 0 字节我期待你下一个字节序号为 1”第三个包里确认号会等于第二个包的序列号加 1。我刚开始看到这个“加 1”非常疑惑以为数据有问题后来才明白这是 TCP 确认机制的体现对方告知“你传来的下一个字节我已经准备好了”。想看一条完整连接里的全部包右键任意一个握手包选择 Follow再选 TCP StreamWireshark 会自动填上tcp.stream eq 编号这样的过滤条件把所有属于同一连接的包挑出来。收发方向会被不同颜色区分方便回看时间轴。5. 用统计功能快速锁定大流量和慢请求5.1 协议分级两分钟看清抓包文件的全貌抓大文件时靠肉眼一行行翻包不现实。我的习惯是抓包结束后先进入 Statistics 菜单打开 Protocol Hierarchy。这个面板会以树状列表展示所有协议的使用比例包括数据包数量和字节占比。这步的价值在于快速判断“流量结构是不是符合预期”。比如你抓的是一个网页访问过程理应看到大量 TCP、TLS 或 HTTP但如果打开面板发现 ARP 占了一大片那说明局域网里存在不少地址解析开销如果看到 TCP 重传相关的分析标记占比高说明链路质量大概率有问题。协议分级不会告诉你具体哪台设备坏了但会告诉你该往哪个方向继续看。5.2 端点和会话找出谁是“流量大户”在 Statistics 里还有两个非常实用的入口Endpoints 和 Conversations。Endpoints 会按 IP 地址或端口聚合所有通信量显示每个终端的发送包数、接收包数、发送字节数、接收字节数。用它的好处是能快速回答“全网哪个地址在疯狂发包”这样的问题。某次我处理局域网拥挤问题一眼就在 Endpoints 里看到某台设备的字节数是其他设备的几十倍顺着这个线索才追到后台同步任务异常。Conversations 则按“一对”通信双方来聚合能看出 A 和 B 之间的流量占比。在这个面板里Wireshark 支持右键某个会话直接把它变成显示过滤器这是很顺手的功能。我通常先用 Endpoints 锁定嫌疑 IP再在 Conversations 里看它到底和谁在通信最后再追踪实际流量。整个流程下来比从头到尾翻包快得多也少走很多弯路。5.3 追踪流与排障一个真实风格的慢接口检查过程排障时追踪 TCP 流是信息量最大的操作。在数据包列表里选中任意一个 TCP 包右键选择 Follow再选 TCP StreamWireshark 会还原出整个会话的数据内容。只要应用层是明文协议比如 HTTP、Telnet 这类你能直接在窗口里看到双方往来的原文。配合编码设置乱码通常也能恢复成可读文本。遇到“接口很慢但不报错”的问题我的排查顺序大概是这样的先抓本机网卡进出流量用显示过滤器找出目标端口的请求再使用 Follow TCP Stream看请求到底发出去没有如果客户端已经发出但服务端迟迟没有响应那就把显示过滤器切成tcp.analysis.retransmission检查有没有大量重传。有一次我发现客户端发出的请求包反复重传服务端一个确认都不给最后排查到是链路两端设备协商出的工作模式不匹配而不是应用代码的问题。如果没有 Wireshark 这层证据单看业务日志很可能找错方向。如果你想知道一段会话的耗时可以选中会话的第一个包和最后一个包直接看 Time 列的差值。也可以用 IO Graph 画出一条流量曲线观察某个时间点是否出现断崖式下降或冲高峰。这些操作都不复杂但能让你从“看单个包”升级到“看整段通信”这是网络分析至关重要的思维转变。注意Follow TCP Stream 只能还原应用层原文。如果是 HTTPS你会看到一段 TLS 加密数据明文字段是看不到的。这种时候不要尝试硬解应该回到业务层面在服务端或客户端能解密的地方抓取或者把过滤器切到 TLS 协议分析证书和握手过程。6. 常见问题与排查技巧实录6.1 为什么抓了半天一个包都没有这个情况太常见了我第一次用 Wireshark 也栽过。如果你已经点了开始捕获包计数一直为零可以按以下顺序排查确认当前是不是管理员权限Windows 下权限不够时某些接口虽然能选但根本收不到包。确认选中的物理网卡是否真的承载了业务流量。如果机器有虚拟机和多个物理接口看错接口很容易抓空。先制造已知流量比如执行一次 curl 请求或者 ping 网关再看包数量是否上涨。检查是不是开了抓包过滤器而且过滤条件写得太窄把本应有的流量丢完了。如果是无线网卡普通模式下通常只能捕获自己收发相关的帧并不代表能看到同一 Wi-Fi 下所有人的流量这一点尤其容易让人误解。还有一个常被忽略的点回环接口。本机访问本机服务流量不会经过物理网卡必须选择回环接口捕获。没有对应接口时Windows 下要去安装新版抓包驱动并开启回环捕获支持Linux 下可以用 any 接口覆盖所有接口包括回环。6.2 过滤器表达式“不生效”的三大原因过滤器写了没反应大多数不是软件 bug而是三种低级错误。第一种是把写成了比如tcp.port80这在显示过滤器里是无效表达式输入框会直接标红提示。第二种是用大写协议名比如TCPWireshark 的协议名约定是小写应该写成tcp。第三种是混用抓包过滤器和显示过滤器语法在顶部的显示过滤框里写host 192.168.1.1这类 BPF 风格表达式不会被当成显示过滤器处理。遇到过滤器报错时看表达式输入框是否有红底提示。Wireshark 一般会告诉你哪里解析失败。不要死记硬背多用自动补全在输入框敲tcp.后会弹出所有以 tcp 开头的字段省时又准确。6.3 抓包文件太大打开慢怎么办抓包时间越久文件越大直接打开几十 GB 的文件会非常痛苦。除了在抓包规则里做环形缓冲还可以用命令行工具 tshark 对文件做预处理只保留需要的协议再输出成新文件。比如下面这条命令tshark -r big.pcapng -Y tcp.port 443 -w https_only.pcapng-r指定读取文件-Y指定显示过滤器-w写出新文件。这条命令会把大文件过滤成只含 443 端口流量的小文件后续分析负担小很多。同样的思路也可以用来按 IP、按时间去重写文件。还有一种分而治之的思路用 Wireshark 自带的导出特定分组功能先筛选再导出。导出格式一般选 pcapng别选文本导出因为文本格式会丢掉时间戳和协议结构后续无法继续过滤。7. 给零基础的学习顺序先掌握什么、后掌握什么很多人下载 Wireshark 后先把每个菜单点一遍结果一个也没记住。我的建议是把学习分成四步走。第一步只抓包不分析。随便打开一个网页抓上几十秒看看包列表长什么样。第二步学显示过滤器。把前面那张高频过滤器表抄下来每天练几个组合条件直到能不看资料写出tcp.port 某个端口这类表达式。第三步挑一个协议精读。HTTP 或 DNS 都行把请求响应的每一层展开看一遍。第四步再学统计面板用 Endpoints、Conversations、Protocol Hierarchy 去分析一个已知场景。如果你准备长期靠 Wireshark 工作建议早点接触命令行工具 tshark。它的过滤语法和 Wireshark 完全一致但能批量处理文件、定时抓包、自动导出结果脚本化能力比图形界面强很多。不过前提仍然是先熟悉图形界面的字段和协议结构再转命令行否则容易因为看不见完整上下文而迷茫。我个人的体会是Wireshark 学习中最难的部分不是语法、不是界面而是“你根本不知道要找什么”。所以每次抓包前先写下一句判断我想确认什么行为发生比如“我想确认客户端是否发出 DNS 查询”“我想确认服务端是否回包”。有了这个问题驱动后面的过滤器、读包、统计都会顺理成章。最后再建议你养一个习惯每次抓包文件都保存原始样本命名里带上时间、场景、接口和过滤条件几个月后回看这些笔记比任何截图都有价值。