尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Wireshark抓包实战:OSI七层模型如何成为网络排错地图

Wireshark抓包实战:OSI七层模型如何成为网络排错地图 每次讲 OSI 七层模型我都能看到教室后排有同学在打哈欠。说实话这模型在教科书上确实挺无聊的——七个小盒子每个盒子配几句负责啥啥的定义考完试就忘干净了。但我在企业网络运维里泡了十几年之后越来越觉得OSI 七层不是拿来背的它是一张排错地图是一套问题到底出在哪的定位框架。尤其是你在 Windows 10 和 Server 2022 混布的网络环境里排查ping 不通共享文件夹连不上内网传输慢这类问题时没有分层思维你就是在黑夜里摸钥匙有了分层思维你手里拿的就是一张标好了房间号的地图。这篇文章我会用 Wireshark 做主角分别抓 ICMP 和 SMB2 的包带你走一遍从物理层到应用层的完整排查链路。我会把 Windows 10 当客户端、Server 2022 当服务端搭一个最小实验环境然后用真实抓包数据说话。你可以把它当成一份直接抄作业的实操笔记也可以当成一次面向网络排错思维的系统梳理。无论你是刚入门的学生、桌面运维、还是刚接管公司服务器的兼职网管这篇文章都值得你花二十分钟看完。1. 别背模型了OSI 七层真正的作用是一张排错地图1.1 为什么排错时从下往上是铁律你有没有遇到过这种情况客户说服务器连不上了你第一反应是去看服务启没启动结果服务好好的又去看防火墙规则也对。折腾半天最后发现是机房交换机的光纤跳线松了。这种故事在运维圈子里天天都在重演根子就在于大家习惯从上往下查但网络是自下而上工作的。OSI 七层模型从下往上依次是物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。排错为什么要从下往上因为每一层都建立在下层的基础上。物理层断了上面六层全废数据链路层不通网络层发出去的包没人转发网络层不通传输层的三次握手连机会都没有。这就像盖楼你要查的是哪一层楼板裂了而不是直接冲到顶楼修防水。我在实际排错时有个习惯先问自己一句底层能不能证明是通的。比如 ping 不通我不会先去翻应用日志而是先看链路层有没有掉线、网络层能不能通确认底层没问题再往上走。这不是死板的教条而是能实实在在地帮你避免在上面六层折腾一下午结果发现是网线问题的悲剧。1.2 用快递寄送理解数据包的逐层变身把 OSI 分层讲得特别抽象的人往往自己也没真抓过包。我用一个比较好懂的类比你寄一个快递。应用层是你把东西装进箱子比如 HTTP 请求、SMB 文件访问请求表示层负责给箱子贴标签、做压缩加密会话层负责确认这个包裹是哪一笔订单双方怎么建立联系。传输层是快递公司给你分配一个运单号TCP 端口、UDP 端口保证包裹能对应上收件人的具体部门网络层是快递公司的干线运输系统IP 地址告诉包裹从哪个城市到哪个城市数据链路层是同一城市内的配送路线MAC 地址、交换机转发保证包裹在局域网里一站一站地送物理层就是那条实实在在的路、那辆卡车、那根网线。你在 Wireshark 里抓到的每一个数据包其实就是箱子在最底层跑的时候的样子前面有物理层的前导码Wireshark 一般不显示然后是以太网帧头数据链路层接着是 IP 头网络层再是 TCP/UDP 头传输层最后才是应用层的数据。Wireshark 好就好在它把这些层次都明明白白地拆给你看你一眼就能知道哦这包现在走到哪一层了。2. 实验台搭建Windows 10 与 Server 2022 的抓包环境2.1 最小实验拓扑与角色划分要说实战光有理论不行得有一张能动手的桌子。我这里建议的最小拓扑是两台机器加一台傻瓜交换机Windows 10 专业版充当客户端IP 用 192.168.10.10/24安装 Wireshark。Windows Server 2022充当服务端IP 用 192.168.10.20/24开启文件和打印机共享、SMB 服务。一台普通千兆交换机把两台机器连在同一个广播域里排除路由器的干扰这样你看到的包就干干净净只有二层和三层相关的东西。有人问为什么要用 Server 2022用 Windows 10 互相连不行吗行但 Server 2022 的 SMB 服务更完整而且它的防火墙策略、共享配置在生产环境里更加常见你顺手把 Server 2022 的文件和存储服务角色摸一遍后面管理服务器也更熟。再加一个细节建议在实验时把 Windows 防火墙暂时关掉或者放行 ICMP 和 SMB 端口不然你会分不清是网络问题还是防火墙拦了这在实验阶段最容易让人抓狂。2.2 Wireshark 安装与抓包前的三个关键设置Wireshark 安装本身不复杂从官网下稳定版一路下一步就行。但装完之后有三件事我建议立刻做不然你后面抓包会非常痛苦。第一件安装 Npcap 时勾选支持 802.1Q VLAN 标签。这一步很多人忽略等你在带 VLAN 的网络里抓包时发现报文里全是乱码根本看不到 VLAN ID想排 VLAN 的错都没法排。实验环境没有 VLAN但你要有未雨绸缪的意识。第二件设置好抓包过滤器。比如只抓 192.168.10.10 和 192.168.10.20 之间的流量在 Wireshark 主界面上方的Capture Filter里填host 192.168.10.10 host 192.168.10.20。抓包过滤器是在内核层面直接过滤的可以大幅减少无关流量尤其在生产环境排查时不会让你抓一坨几十万包的大文件。第三件关闭名字解析或者至少搞明白它的影响。Wireshark 默认会尝试把 IP 解析成主机名、把端口解析成服务名。这功能在平时看包时挺方便但在排错时它会发 DNS 请求、会干扰时间线而且解析失败还会导致界面卡顿。我一般会在View → Name Resolution里把三个解析选项都关掉只看原始 IP 和端口。端口显示成数字还有一个好处你能自己记住 SMB 是 445、ICMP 没有端口号这些细节在脑子里越清晰读包越快。2.3 先抓一次健康流量建立基线很重要真正会抓包的人不是一上来就分析故障包而是先抓正常流量当基线。你只有见过正常长什么样才能在故障发生时一眼看出这不正常。我在实验环境里做的第一件事是在关掉防火墙的状态下从 Windows 10 去 ping Server 2022然后打开一次共享文件夹访问把整个过程抓下来存成 pcapng 文件命名为baseline.pcapng。这份基线文件就是我后面排查所有问题的参照物。你可以在这个基线上观察 ICMP 请求/回复的往返时间观察 SMB2 协商、会话建立、树连接这几个阶段的报文序列。有了基线后面任何一步多出来、少了、变慢了你都能立刻定位到具体是哪个环节出了问题。3. ICMP 抓包实战从 ping 不通到定位是哪一层的问题3.1 ICMP 报文在 Wireshark 里长什么样ICMPInternet Control Message Protocol通常被算作网络层协议但它其实是封装在 IP 数据报里面的。你在 Wireshark 里抓到一个 ping 包时展开来看大致是这个结构Ethernet II数据链路层能看到源 MAC 和目的 MAC。Internet Protocol Version 4网络层能看到源 IP、目的 IP、TTL、协议号ICMP 的协议号是 1。Internet Control Message Protocol里面就是 Type、Code、Checksum还有 Identifier 和 Sequence Number。举一个具体报文做例子。ping 的请求包通常是 Type 8Echo Request回复包是 Type 0Echo Reply。在 Wireshark 里正常的 ping 流量你会看到一对对整齐的请求和回复就像两个人一来一回地打招呼。如果只看到请求没有回复说明对方没收到或者回复在半路被丢掉了。TTLTime To Live这个字段值得你特别留意。Windows 默认发送的 ICMP TTL 是 128Linux 是 64某些网络设备是 255。你在抓包时如果看到同一个 ping 包里的 TTL 是 128就能大致推断出源系统是 Windows 家族。这在分析跨网段故障、识别 NAT 后面的设备类型时是很有意思的旁证。3.2 ping 不通的四种典型场景与分层定位实战中ping 192.168.10.20不通你用分层思维可以快速拆成四种可能场景一请求包都没发出来。在 Wireshark 里你什么都抓不到或者只看到本机 IP 发出去的包却没有对应的 ARP 请求。这大概率是本机路由表没有到 192.168.10.20 的路径配置或者你本机的网卡处于未连接状态。这一层的判断依据是Wireshark 的抓包列表为空你以为没抓到其实意味着报文根本就没进协议栈。场景二请求包发出去了但没收到回复。你会看到源 IP 到目的 IP 的 Echo Request而且每隔一秒重发一次但就是不见 Echo Reply。这时候你要看 ARP目的 IP 在同一个网段时发送方会先发 ARP 请求解析对方的 MAC。如果 ARP 一直得不到应答说明二层不通——可能交换机端口配置了 VLAN 隔离或者 Server 2022 的网卡没接好。这是二层问题的典型特征。场景三ARP 能通但 ICMP 包有去无回。你看到 ARP 成功解析了说明二层已经通了但 Echo Request 发出去之后依然没有回包。这时候要怀疑 Server 2022 的防火墙策略在丢弃 ICMP。Windows 防火墙默认是阻止入站 ICMP Echo Request 的你可能需要放行核心网络诊断规则或者把防火墙临时关掉做对照测试。场景四请求和回复都有但状态是Destination unreachable。这种情况说明中间某个路由器或目标主机返回了一个 ICMP 不可达消息Type 3。你再细看 CodeCode 0 是网络不可达、Code 1 是主机不可达、Code 3 是端口不可达。如果是端口不可达说明网络层是通的是传输层或上面的服务没有在监听。这个区分特别重要它的意义在于你已经跑到第四层甚至应用层了别再回头折腾交换机了。3.3 实战从请求超时到定位二层不通的完整链路我拿一个真实排错过程给你演示一下。某天 Server 2022 突然从客户端 ping 不通了我打开 Wireshark 抓客户端网卡的包看到的现象是客户端发出 ARP 请求Who is 192.168.10.20? Tell 192.168.10.10没有任何 ARP 回复。ARP 请求反复重试ping 显示请求超时。看到这个现象我基本可以确定问题出在二层——要么是服务器的网线被拔了要么是交换机端口配置了禁止 ARP 学习要么是服务器网卡被禁用了。结果跑到机房一看Server 2022 的网线不知道被哪个同事踢掉了。重新插上ping 立刻通了。这个案例看起来简单到有点好笑但它精准地说清楚了分层排错的价值我没有去翻防火墙、没有重启服务、没有查共享配置因为 ARP 都没通二层以上的一切排查都是浪费时间。这就是分层思维的效率。4. SMB2 抓包实战文件共享慢/连不上问题到底在哪一层4.1 SMB2 协议为什么值得专门抓包看在企业 Windows 网络环境里SMB 可能是仅次于 DNS 和 DHCP 的流量大户。员工访问共享文件夹、组策略下发、系统更新分发本质上都在走 SMB。SMB 最早问题很多SMB1 时代的蠕虫比如永恒之蓝就是利用 SMBv1 漏洞传播的让安全圈头痛了很久。后来的 SMB2 在性能、安全性上做了大量改进但排错的复杂度也跟着上来了。SMB2 使用 TCP 445 端口。它的通信过程不是简单的请求-响应而是有好几个阶段协商协议、建立会话、树连接、文件操作。每个阶段如果失败了表现都不一样。不懂这些阶段的人看到无法访问共享只会重试懂的人抓个包就知道是协商失败、认证失败还是访问权限不够。4.2 一次完整的 SMB2 会话建立流程拆解在 Wireshark 里你过滤smb2然后从客户端访问服务器共享文件夹会看到这样一串报文TCP 三次握手SYN、SYN-ACK、ACK建立到 445 端口的连接。SMB2 Negotiate 请求客户端问服务器你支持哪些 SMB 方言支持哪种安全机制SMB2 Negotiate 响应服务器回答我支持 SMB 3.1.1预认证完整性用 SHA-512。这一步协商成功了就说明传输层没问题、SMB 服务在正常监听。SMB2 Session Setup 请求客户端发送认证信息。这里可能会看到 NTLMSSP 或 Kerberos 相关的字段。SMB2 Session Setup 响应服务器返回登录成功。SMB2 Tree Connect 请求客户端请求连接到具体的共享比如\\192.168.10.20\share。SMB2 Tree Connect 响应服务器返回共享路径。文件操作Create、Read、Write、Close 等。这一连串过程在 Wireshark 里看起来有点多但并不复杂。你把每个阶段看成一个检查点如果看到 Negotiate 正常但没有 Session Setup问题大概率在认证如果 Tree Connect 报错Access Denied问题在共享权限或 NTFS 权限。4.3 实战SMB2 连接失败的典型特征与排查链路有一次我们内部的文件服务器迁移从 Server 2016 迁到 Server 2022客户端 Windows 10 突然有人说能 ping 通但访问共享提示找不到网络路径。我打开 Wireshark 抓包过滤tcp.port 445看到了典型的失败模式TCP 三次握手是成功的。客户端发出 Negotiate 请求。服务器回了一个 TCP RST 包连接被强制重置。出现 RST 说明不是二层三层的问题而是 445 端口上的服务要么没起来、要么防火墙给拦了。我登到 Server 2022 上一查发现文件和打印机共享这个防火墙入站规则被某次组策略刷新给禁用掉了重新启用之后连接立刻恢复。另一个常见失败模式是 SMB2 Negotiate 之后迟迟没有响应客户端开始超时重传。这种通常不是服务器拒绝而是服务器性能太差或者 SMB 服务挂死。你可以在 Wireshark 里看Time列如果重传的时间间隔呈指数增长说明服务器端承受不住或者服务假死这时候重启 Server 服务往往能解决问题但更重要的是去查根因——是不是有人在用迅雷跑共享文件夹下载。5. 把看到变成看懂Wireshark 过滤与分层分析的核心套路5.1 用好过滤器的三个层级很多人抓完包之后一脸懵因为流量太多不知道看什么。解决这个问题的核心就是过滤器。我把过滤器的用法分成三个层级每一层对应你在排错过程中的不同阶段。第一层抓包过滤器减少噪音。前面提过的host、port、net过滤器在抓包过程中就帮你过滤掉无关流量。第二层显示过滤器聚焦嫌疑。抓包完成后你还能继续筛选。想看 ICMP就输入icmp想看 SMB2就输入smb2想看 445 端口就输入tcp.port 445想把 ICMP 和 SMB2 都排除掉就输入!icmp !smb2。这一层是排错主力你完全可以一边看包列表一边调整过滤条件缩小嫌疑范围。第三层协议字段过滤精准定位。比如你想看哪些 SMB2 请求返回了错误可以输入smb2.nt_status ! 0想看在 IP 层发生了什么异常可以输入ip.flags.df 1看不分片标记的包。字段级过滤是 Wireshark 的进阶用法它的价值在于让你从按协议类型看包升级为按业务状态看包。5.2 数据包着色规则其实是一套分层诊断逻辑Wireshark 默认的着色规则值得你花十分钟研究一下。浅蓝色通常是 TCP 通信的包红色通常表示 TCP 错误黑色表示 TCP 重传或其他异常包。有一次我排查一个内网复制文件特别慢的问题打开 pcapng 一看满屏都是黑色的 TCP Spurious Retransmission 和 TCP Dup ACK。这说明 TCP 层面发生了严重的丢包或乱序问题出在三层以下——再往底层查最后发现是交换机的某个端口双工模式不匹配。你看Wireshark 的着色规则不是随随便便设计的它本身就是一套面向分层排错的视觉诊断工具先看颜色判断大致层次再看具体字段缩小到具体协议最后结合包内容定位到具体设备或配置。我建议你在拿到任何 pcapng 文件后第一件事不是逐包读而是先把红色、黑色、黄色的异常包数量统计一下心里有个全局轮廓再动手。6. 分层思维在网络安全里的实战用法6.1 安全事件发生在哪一层就用哪一层的工具说话OSI 分层不仅能排障更是安全分析的底层框架。很多没有经验的安全新人一听说被攻击了就手足无措其实你把它按层拆开攻击手段就会清晰得多。物理层有人偷偷在交换机上插了一个 rogue AP或者拔掉监控摄像头的网线。这种攻击不产生 IP 层流量Wireshark 只能看到二层帧的变化需要配合交换机的端口安全功能去防。数据链路层ARP 欺骗、MAC 泛洪。抓包特征是你看到大量相同的 ARP 回复或者某个 MAC 地址对应了大量 IP 地址。网络层常见的 ICMP 洪水、Smurf 攻击、IP 分片攻击。在 Wireshark 里你会看到大量 ICMP Echo Request 或者异常的 IP 分片包。传输层SYN Flood、端口扫描、TCP Reset 攻击。你在 Wireshark 里看到海量 SYN 包但几乎不完成三次握手基本可以判断有人在扫端口或打 SYN Flood。会话层和表示层这类安全问题和具体协议结合更紧密比如 SMB 的中间人攻击、SSL 剥离。你在抓包里看到 NTLM 认证包在非加密通道上裸奔这就是明显的会话层风险。应用层Web 注入、SMB 漏洞利用、恶意软件利用应用协议通信。分析这一层除了 Wireshark还要配合同事用日志审计和沙箱。所以你在做安全分析的时候先问这个攻击事件主要发生在哪一层然后选对应的证据面二层看交换机和 ARP 表三层看路由器和 ICMP四层看防火墙和抓包七层看应用日志。Wireshark 只是其中一环但它是连通底层和高层的那个放大镜。6.2 用分层思路做一次最小化排查我自己的习惯是遇到安全问题先不急着杀毒、封 IP而是按最小化排查的思路走一遍先确认物理层和链路层是否被污染。打开 Wireshark过滤arp看有没有异常的 ARP 洪泛再过滤eth.src检查有没有本不该出现的 MAC。再看网络层和传输层。过滤ip.src 你的服务器IP看有没有主动对外发起的大量非业务连接过滤tcp.flags.syn 1 tcp.flags.ack 0看有没有大量半开连接。最后才看应用层。过滤smb2看有没有奇怪的认证失败记录、有没有从外网 IP 发来的 SMB2 请求。这套流程的好处是每一步都只依赖当前层的数据不用猜。你发现二层有 ARP 异常就不用再去看应用日志了你发现四层有海量 SYN就要去防火墙看是不是开了危险端口。它和排障的逻辑完全一致——永远是先证明底层是否可信再谈上层。7. 实战中的几个常见坑与个人体会7.1 抓包要看双向只看一边容易误判我在带新人时反复强调一句话抓包一定要从客户端、服务端两边都抓或者找一台能看到两边流量的设备抓镜像端口。只看客户端发出去的包你只能知道有没有回应只有同时看到服务端的包你才能知道是服务端没收到还是收到了没回还是回了你却收不到。有一次排查共享文件慢的问题客户端看到一堆 Retransmission我以为是服务端出了问题结果去服务端一抓包发现服务端早就把数据包发出去了是中间交换机漏发了。两边一对照问题定位在交换机而不是服务器。7.2 Wireshark 的Expert Info是提示不是结论Wireshark 在打开 pcapng 文件时会自动分析并生成一个Expert Info窗口里面会有各种提示比如New TCP connectionDuplicate ACKSMB2 Create Response, Error: STATUS_ACCESS_DENIED。这些信息很有价值但我要提醒你它们只是提示不是最终结论。比如TCP Previous segment lost这个提示既可能表示真的丢了包也可能只是抓包工具自己丢包导致的假象。尤其是你在高流量环境下抓包抓包软件本身可能处理不过来产生很多伪重传、伪乱序提示。这时候你要结合实际拓扑和抓包位置综合判断不要见到提示就往上冲。7.3 防火墙是一个经典的OSI 边界混淆器说到 Windows 环境的排错防火墙永远是一个绕不开的坑。很多人以为防火墙只影响传输层以上其实像 Windows 防火墙这种主机防火墙它做过滤的时机早于网络协议栈的很多处理步骤很多看似底层不通的现象其实是防火墙干的。我之前就见过一个案例客户端 ping 服务器不通抓包显示 ARP 正常、ICMP 请求也到了服务器但服务器没有回包所有人都怀疑是防火墙的问题结果关了防火墙还是不通。最后才发现是一块物理网卡上的VMware Bridge Protocol没有勾选导致真实流量走了虚拟网卡却回不来。这说明一个很残酷的现实在真实环境里层的边界并不像教科书画得那么清晰。虚拟化、桥接、防火墙过滤、网卡卸载功能都可能让层与层之间的顺序变得复杂。所以我的建议是遇到疑难问题别死板地套七层而是把它当成一个起点再结合 Wireshark 的报文内容、设备的具体配置灵活判断。7.4 果断动手但也要学会留证据最后说一点我个人体会比较深的事情。做网络排错和安全分析动手确实要果断但一定要有留证据的意识。抓包文件命名最好带时间戳和场景说明比如20250611_ping_timeout_client.pcapng排查过程中每一步操作比如改防火墙、封端口、重启服务要记下来遇到问题能回滚。等你在生产环境里因为一次错误操作把整个网络搞断过你就知道这份记录有多值钱了。我这些年养成的习惯是每次排障或者安全分析结束都会把 pcapng 文件、关键截图、结论整理成一个简短的文档存到团队知识库里。看似占了点时间但下次遇到同类问题十分钟就能定位比重新走一遍完整链路快得多。这也算是把 OSI 分层思维连成了闭环——先用分层定位问题再用分层选择合适的工具最后把经验按分层归档回去。
返回列表