拓冰建站拓冰建站
首页 / 资讯中心 / 正文

用OSI七层模型与Wireshark抓包:Windows网络排错实战指南

干这行这么多年我越来越觉得 OSI 七层模型根本不是什么纸上谈兵的理论而是一张排查网络故障时的活地图。遇到问题先问一句“这故障到底发生在哪一层”再结合 Wireshark 抓包看一眼数据包的实际交互过程比对着命令行瞎敲 test 命令高效得多。我见过太多同事在 Windows 10 和 Server 2022 的环境里因为 SMB2 共享连不上或者是 ICMP 测试不通来回折腾了一整天最后发现要么是防火墙策略拦在了某一层要么是 MTU 分片把包憋死了。这就是典型的分层排错思维没建立起来。这篇文章把我基于 Windows 10 Server 2022 环境做网络排错的经验完整梳理一遍以 OSI 七层模型为主线用 Wireshark 抓包分析 ICMP 和 SMB2 这两种极具代表性的协议从联通性测试到文件共享访问一条链路走到底。你会看到我是怎么通过抓包确定故障落在第二层、第三层还是第七层也会看到 SMB2 协商过程中那些状态码到底在暗示什么。无论是刚入行的运维、安全方向的学生还是正在备考网络认证的朋友这套方法都能帮你在日常排错里少走弯路。1. OSI 七层模型实战思维先定层再动手1.1 七层模型不是考试题是排错地图OSI 七层模型从上到下分别是应用层、表示层、会话层、传输层、网络层、数据链路层和物理层。很多教材喜欢从第七层开始往下背但在实际排错时我的习惯正好相反——先问物理层通不通再问链路层通不通一路往上走。这就像修水管你得先确认总阀开了没有再去检查分路阀门最后才看水龙头。注意一个非常容易混淆的点TCP/IP 协议族并不是严格按七层来封装的。比如应用层协议 HTTP、SMB2 直接依赖传输层的 TCP表示层和会话层的功能在 TCP/IP 模型里基本被“吸收”掉了。所以我们在 Wireshark 里看到的协议树更多是 TCP/IP 模型的实际映射但这不影响用 OSI 七层思维来排错。你懂每一层提供什么服务、出了故障会有什么现象就够了。1.2 Windows 环境下每一层对应的工具与现象我整理了一张日常排错时最常用的“分层对照表”你可以直接保存下来当速查卡OSI 层典型协议/技术Windows 排错工具故障现象示例第七层 应用层HTTP、SMB2、DNS、RDPnet use、浏览器开发者工具、Get-SmbConnection共享可以 ping 通但访问失败、网页返回 500第四层 传输层TCP、UDPnetstat -ano、Test-NetConnection -Port 445端口不通、连接超时、大量 TIME_WAIT第三层 网络层IP、ICMP、路由协议ping、tracert、pathping跨网段不通、路由丢包第二层 数据链路层ARP、以太网、VLANarp -a、检查交换机端口状态能通同网段但跨 VLAN 不通、ARP 解析失败第一层 物理层网线、光纤、网卡Get-NetAdapter、查看网卡指示灯网线松动、光衰过大、端口 Down这张表的核心价值在于你拿到一个故障现象后可以迅速反推它最可能发生在哪一层。比如用户报“我看不到共享文件夹了”先别急着抓包先ping一下服务器 IP通了就说明物理层、IP 层没问题问题大概率集中在传输层 ACL 或应用层 SMB 配置。这就是分层排错的底层逻辑。1.3 最常见的排错误区有一个很典型的误区只要ping不通就认为网络“完全不通”。实际上在 Windows 环境下默认防火墙会直接丢弃 ICMP Echo Request但 TCP 445 端口可能照样能通。反过来也一样ping通了也不代表应用就能通因为应用走的是 TCP/UDP 的特定端口而 ICMP 和 TCP 走的是完全不同的协议路径。我实习那会儿就栽过这个跟头。用户报数据库连不上我ping服务器通于是断言网络没问题折腾了半天才发现是防火墙策略只放行了 ICMP没有放行 TCP 1521 端口。所以我现在给所有带的新人立的第一条规矩就是ping通只代表 OSI 第三层甚至只代表 ICMP 这个协议通了绝不代表应用层通了。2. Wireshark 抓包环境准备装对工具抓包就成功了一半2.1 Windows 10 / Server 2022 上安装 Wireshark 的关键点Wireshark 本身是个图形化抓包工具但它真正干活的是底层驱动。在 Windows 上安装时安装到选择组件那一步一定要把 Npcap 勾上新版叫 Npcap老版本叫 WinPcap。Npcap 负责在网卡驱动层拦截数据包没有它 Wireshark 只能看别人抓好的文件自己什么都抓不到。Npcap 安装时有两个选项需要注意一个是“支持 802.1Q VLAN 标签”如果交换机端口是 trunk 类型且带 VLAN建议勾上否则抓到帧里可能带奇怪的长度字段另一个是“限制应用到管理员账户”这个按需选择但我建议用普通权限启动 Wireshark 做只读分析抓包时再以管理员权限运行这样可以降低安全风险。注意在 Server 2022 上如果开启了“安装规则”或组策略强制签名驱动Npcap 的驱动签名偶尔会被拦。遇到这种情况先到事件查看器看内核级驱动的报错再考虑是否需要在测试环境临时调整驱动签名策略。2.2 抓包前必配的捕获选项与过滤规则打开 Wireshark 主界面后不要直接双击网卡开抓先点“捕获选项”Capture Options看一眼你的网卡列表。在多网卡服务器上尤其重要——Windows Server 2022 经常有管理口、业务口、心跳口好几块网卡抓错网卡等于看了一个无关局域网的口什么都分析不出来。抓包过程中我建议至少设置两组过滤条件捕获过滤器Capture Filter作用于数据包进入 Wireshark 之前语法基于 BPF。比如host 192.168.10.20 and port 445 or icmp显示过滤器Display Filter作用于已经抓到的数据包语法是 Wireshark 自己的表达式。比如ip.addr 192.168.10.20 (icmp || smb2)新手最常见的困惑是“我都加了 udp 过滤了怎么还能看到 ICMP 的数据包”。原因很简单你在“显示过滤器”里填了udp它只是把屏幕上已有的数据包临时筛选一遍ICMP 数据包其实早就已经被网卡捕获并且存放在内存里了。如果你要让 ICMP 压根不被抓进来必须使用“捕获过滤器”里的 BPF 表达式not icmp两者工作阶段完全不同。我把这个区别再说明白一点捕获过滤器是漏斗入口显示过滤器是筛子。你家里水龙头出来的是自来水所有流量捕获过滤器决定“哪些水进水桶”显示过滤器决定“你从水桶里把哪些水捞出来看”。想少占内存用捕获过滤器想灵活分析同一批数据用显示过滤器。2.3 Wireshark 界面常用功能的快速上手真正开始分析数据包时我最常用的是下面几个功能Expert Info专家信息Wireshark 自动帮你标注的异常信息汇总比如 TCP 重传、重复 ACK、SMB2 错误状态。这个按钮在最下方状态栏或“分析”菜单里遇到大型抓包文件时先看它能快速定位异常。Follow TCP Stream追踪 TCP 流右键任意一个 TCP 包选择“追踪流 - TCP 流”即可把整个 TCP 会话重组显示。分析 SMB2 这种有请求-响应序列的协议时非常好用。Decode As解码为如果某个端口跑的协议不是默认端口比如 SMB2 跑在 4445 上右键数据包选“解码为”把目标端口手动指定为 SMB2 就能正确解析。Statistics - Flow Graph流量图以时间线方式展示两个 IP 之间的交互过程排错时看一眼就能判断谁是主动方、谁是响应方。3. ICMP 抓包实战ping 不通到底卡在哪一层3.1 ICMP 报文格式逐字段拆解ICMP 是网络层协议日常最常用的消息类型是 Echo RequestType 8和 Echo ReplyType 0。打开一个抓到的 ICMP 包Wireshark 的协议树里会显示Type类型8 表示请求0 表示应答3 表示目标不可达11 表示超时。Code代码补充说明类型。比如 Type 3 中Code 1 是主机不可达Code 3 是端口不可达Code 4 是需要分片但设置了不分片标志这个和 MTU 问题直接相关。Checksum校验和用于检测报文在传输过程是否损坏由发送方计算、接收方校验。Identifier标识符和 Sequence Number序列号用于匹配请求和应答。ping程序每发一个请求序列号就加一通过它你就能判断是否丢包、乱序。我一直强调排错不能只看“通”和“不通”要看 ICMP 的 Type 和 Code。比如ping不通时如果你抓包发现对方回了 Type 3 Code 13管理性禁止那就说明数据包已经到达了对方设备是对方的防火墙策略把 ICMP 丢弃了——这时候再去查网线和 IP 地址配置就纯属浪费时间。3.2 正常 ping 和 ping 不通的抓包对比在 Windows 10 上执行ping 192.168.10.20同时用 Wireshark 抓包正常情况下你会看到每组交互是两个包本地发一个 Type 8 Code 0服务器回一个 Type 0 Code 0。注意看 Identifier 和 Sequence Number 的对应关系请求的序列号是 1应答的序列号也是 1说明这是一对匹配的报文。如果 ping 不通抓包结果通常分为三种情况我分别说结论只看到请求包没有应答包说明 ICMP 请求发出去了但响应没有回来。要么是中间设备丢弃要么是目标主机防火墙不回。此时在 Windows 上用tracert -d逐跳看或者抓包看网关是否有回应。完全抓不到任何包问题很可能出在物理层、数据链路层或本机的 IP 配置上。先ipconfig确认网卡是否有有效地址再arp -a看网关 MAC 是否解析成功。收到 Type 3 目标不可达这说明网络层路由已经有响应了通常是路由器回的但目标主机或目标网络不可达。检查目标主机的网络配置、默认网关、网段是否正确。3.3 防火墙拦截 ICMP 在抓包中的表现Windows 10 和 Server 2022 默认开启的 Windows Defender 防火墙对 ICMP Echo Request 的默认策略就是“丢包但不应答”。所以在默认配置下你从另一台机器ping这台 Windows 主机会发现超时但抓包时你能在请求端看到 ICMP 请求发出去了而在被 poll 的主机上如果开启抓包依然看不到任何进来的 ICMP 请求包。等等这里有个细节很多人搞不懂为什么我在被 poll 的主机上抓包也看不到因为防火墙驱动在协议栈里的位置非常靠前它把数据包丢弃时数据包还没来得及传给上层的抓包驱动。这就是“抓包抓不到被防火墙丢弃的包”的经典现象。处理方法是在目标主机上用管理员权限执行New-NetFirewallRule -DisplayName Allow ICMPv4-In -Protocol ICMPv4 -IcmpType 8 -Direction Inbound -Action Allow放行之后再 ping就能看到应答包了。这个操作在 Server 2022 上同样适用只是改完以后记住这个规则是人为加的生产系统上不要随便开可能引入风险。3.4 利用 ICMP 做分层排错的完整思路假设你现在接到任务说 Windows 10 客户端无法访问 Server 2022第一步就是按链路做排查物理层/链路层看网卡指示灯、Get-NetAdapter确认网卡是 Up 状态arp -a确认网关的 ARP 能解析。网络层ping网关地址再ping服务器地址。如果通网关不通服务器说明问题在中间路由或服务器本身。传输层Test-NetConnection 192.168.10.20 -Port 445这个命令会做一次完整的 TCP 连接测试能有效区分“ICMP 被拦”和“端口真的不通”。应用层net use Z: \\192.168.10.20\share确认 SMB 共享能否挂载。在这个流程里Wireshark 的作用是在关键节点做抓包验证你每一步的猜测。思路简单说就是分层定位逐层排除最终锁定问题。4. SMB2 抓包实战Windows 文件共享访问慢或失败的真相4.1 SMB2 协议基础与关键端口SMBServer Message Block是 Windows 文件共享的核心协议从 Vista/Server 2008 之后主推 SMB2 版本SMB3.x 在 Server 2012 之后又增加了多通道和加密特性。在 Windows 10 Server 2022 环境下SMB2 默认使用 TCP 445 端口因此抓包过滤器可以直接写tcp.port 445。再说直白一点SMB2 做的事就是客户端向服务端请求打开文件、读写文件、枚举共享目录等操作。每次操作都是一个 SMB2 请求Request服务端处理完返回一个响应ResponseWireshark 里表现为成对的“SMB2请求”和“SMB2响应”包。4.2 从协商到文件操作SMB2 会话建立全过程我用 Wireshark 抓一次从 Windows 10 访问 Server 2022 共享的完整过程关键交互是下面几步TCP 三次握手客户端向服务器 445 端口发起 TCP SYN服务器回 SYN-ACK客户端再回 ACK。这是传输层的连接基础如果在这里看到 SYN 发出后没有 SYN-ACK说明 445 端口不通或被防火墙丢弃。SMB2 Negotiate协商客户端发送 Negotiate 请求服务器响应支持的 SMB 方言版本如 SMB 3.1.1。在这一步能直观看到双方协商出的最大读/写大小、是否支持加密等参数。SMB2 Session Setup会话建立客户端用 NTLM 或 Kerberos 认证凭据建立会话。这里经常出现 STATUS_LOGON_FAILURE0xC000006D说明用户名密码错误。SMB2 Tree Connect树连接客户端连接某个具体共享比如\\192.168.10.20\share。如果共享名不存在会返回 STATUS_BAD_NETWORK_NAME。SMB2 Create Read/Write文件操作客户端打开文件、读写数据。我把各阶段的常见状态码整理成了表格方便你对号入座状态码含义常见原因STATUS_LOGON_FAILURE (0xC000006D)登录失败用户名不存在、密码错误、域账号过期STATUS_ACCESS_DENIED (0xC0000022)拒绝访问共享权限或 NTFS 权限不足STATUS_BAD_NETWORK_NAME (0x00570001)网络名不存在共享路径写错、共享被删除STATUS_OBJECT_NAME_NOT_FOUND (0xC000003A)文件或目录不存在访问的路径不存在STATUS_USER_SESSION_DELETED (0xC0000203)用户会话被删除服务端并发会话超限或安全策略强制断开4.3 实战共享访问失败的抓包定位流程有一天我接到反馈说 Windows 10 客户端能 ping 通 Server 2022但访问\\192.168.10.20\public时总是提示“拒绝访问”。我打开 Wireshark 抓包过滤器用tcp.port 445很快看到交互过程TCP 三次握手正常SMB2 Negotiate 正常Session Setup 正常返回 STATUS_SUCCESSTree Connect 也成功了但紧接着的 Create 请求返回了 STATUS_ACCESS_DENIED。这时候结论已经很清楚了网络传输和认证都没问题问题出在授权环节。登录到 Server 2022打开共享文件夹的“共享权限”和“安全”选项卡发现 “Everyone” 只有“修改”权限但 NTFS 安全选项卡里没有给当前用户的读取权限。所以结论就是共享权限放行了NTFS 权限拦住了。修改完 NTFS 权限后再次访问Create 请求返回 STATUS_SUCCESS问题解决。这里一定要记住Windows 文件共享的最终权限是共享权限和 NTFS 权限的交集。只看一个而不看另一个你会在这个坑里反复横跳。4.4 用 Expert Info 快速定位 SMB2 异常面对一大把 SMB2 数据包时一个个点开看状态码效率太低。我的习惯是先打开 Expert Info 窗口它会自动把错误状态标成红色或黄色。还以刚才的例子来说Expert Info 直接就能列出 STATUS_ACCESS_DENIED 出现在哪个帧号点击即可定位到具体包。另一个实用功能叫“统计 - 对话”Statistics - Conversations可以按 IP 地址排序查看每个会话的数据量、持续时间。如果某个客户端到服务器的 SMB2 会话持续存在大量数据传输而另一个客户端只有零星几次请求那这“零星几次”的包就更值得盯着看。5. 网络安全视角用 Wireshark 从流量里嗅到异常5.1 正常流量和异常流量的区别到底在哪做过流量分析的人都有一种感觉见多了正常流量烂熟于心之后异常流量站在眼前会“扎眼”。但刚上手时不必靠玄学有几个硬指标可以参考频率异常ICMP Echo Request 每秒超过几十上百个基本是扫描或攻击流量。大小异常正常 ping 包 Payload 一般是 32 字节或按-l指定大小如果出现超大 ICMP 包超过 1400 字节且带 Dont Fragment 标志可能是探测或数据渗出尝试。端口异常SMB2 协议突然出现在非 445 端口比如 4445、8445或者客户端尝试连接大量不同 IP 的 445 端口——这是典型的蠕虫或横向扩散行为。时序异常同一个源 IP 在几秒内向目标 IP 发起大量 TCP SYN 但从不完成握手这是 SYN Flood 或端口扫描的特征。5.2 通过 ICMP 特征发现扫描行为在 Wireshark 里想快速筛查可疑的 ICMP 流量可以用显示过滤器icmp (frame.len 1400 || icmp.type 8)配合“统计 - 端点”Statistics - Endpoints看谁在发送大量 ICMP 包。如果某个 IP 的发送包数量远远大于接收包数量而且目标地址是多个不同网段那这个主机很可能已经中了会调用 ping 进行主机探测的恶意工具。我之前在内部网络排查时就发现有台 Windows Server 每隔五分钟向整个 /24 网段发一轮 ICMP Echo Request数量庞大到可以直接从“捕获文件属性”里看到流量峰值。顺着源 IP 一查发现是个运维脚本写死了ping -n 30 1.1.1.1忘了改参数结果糊里糊涂变成全网乱 ping。由此可见异常流量不全是攻击也可能是“手滑”或者“脚本事故”但无论如何都是运维风险。5.3 识别 SMB2 暴力破解与漏洞利用流量SMB2 是内网横向渗透的头号攻击面所以安全告警里经常能看到它的影子。Wireshark 抓到了以下几种特征的组合你就要警惕了暴力破解特征短时间内同一个源 IP 对同一个目标 IP 发起大量 Session Setup 请求而且响应里的状态码频繁出现 STATUS_LOGON_FAILURE0xC000006D。这意味着有人在尝试不同的账号密码组合。过滤表达式可以用smb2 smb2.nt_status 0xc000006d。漏洞利用特征内核常见的 SMB 漏洞大多通过畸形请求触发普通人靠肉眼从包结构里一眼看出来不太现实但流量层面仍能看到异常请求包长度极端非常大或非常小、请求序列不按正常流程走比如还没有 Negotiate 就直接发 Create。加密 SMB 流量SMB3 加密后Wireshark 里的 Payload 会显示为 “Encrypted” 或 “SMB2encrypted” 而不可直接读取。这种时候不要试图硬解重点看元数据会话建立时间、数据包大小分布、对方 IP 是否为非预期主机。5.4 用好 Wireshark 的统计与着色规则Wireshark 默认有着色规则TCP 重传是浅蓝色TCP 异常是红色/黑色纹理SMB2 错误状态也会有特殊颜色。我通常会在“视图 - 着色规则”里再自定义一条把包含nt_status 0xc000006d的包标成亮红色。这样在滚动抓包列表时暴力破解的包一眼就能揪出来。“统计 - HTTP”这类按协议维度的统计菜单在分析 SMB2 时没有直接对应选项但“统计 - 协议分级”Protocol Hierarchy可以帮你快速判断当前抓包文件里 ICMP、SMB2、TCP、DNS 各占多少比例。如果 ICMP 占比大且全是 Echo Request那你大概率在处理一次扫描事件。6. 常见问题速查与排错手记6.1 问题速查表我把自己踩过的坑以及带徒弟时他们常踩的坑整理成一张速查表日常排错时对着看故障现象优先排查方向Wireshark 过滤/操作ping 不通但共享能访问是否防火墙只允许了 445禁了 ICMPicmp看有没有 Type8/Type0 对ping 通但 SMB 访问超时445 端口是否通TCP 握手是否完成tcp.port 445看 SYN 有没有 SYN-ACK共享访问提示用户名密码错误Session Setup 返回的状态码smb2.nt_status 0xc000006d共享访问提示拒绝访问Tree Connect 后 Create 是否被拒smb2 smb2.nt_status 0xc0000022文件拷贝很慢是否有大量 TCP 重传或零窗口tcp.analysis.retransmission或tcp.analysis.zero_window添加了显示过滤器 udp 仍看到 ICMP你用的是显示过滤器不是捕获过滤器使用 BPF 捕获过滤器not icmp抓到 SMB2 内容看不懂尝试 Follow TCP Stream 看会话重组右键包 - 追踪流 - TCP 流非标准端口跑着 SMB2 解析异常手动指定协议解析右键包 - 解码为 - SMB26.2 我亲测有效的几个 Wireshark 使用技巧第一点不要贪多。初学者抓包最喜欢开着 Wireshark 抓流量一抓就是几百 MB 的文件结果分析时卡到怀疑人生。正确做法是先明确排查目标再用捕获过滤器把所有无关流量挡在外面比如只抓host 192.168.10.20。抓包时间能短则短几秒钟到一分钟往往就够了。第二点善用 “文件 - 导出特定分组”。排查到关键异常后把目标会话相关的几十个包单独导出成一个小 pcap 文件发给同事或写报告时特别方便。别人不用在几百 MB 的抓包里翻找你也不用担心把内部流量完整暴露。第三点给包做标注。右键某个关键包选择“分组注释”Packet Comment写上一句“这里是 Session Setup 失败现场”保存后这些注释会保留在抓包文件里。几个月后翻出旧文件复盘时你还能看懂当初的判断思路。6.3 分层排错和抓包习惯的养成建议最后说点习惯层面的东西。很多人以为掌握了 Wireshark 操作就等于会排错其实不然。工具只是放大你思路的工具思路不对工具越强反而越容易让你在海量数据里迷失。我的建议是每次遇到网络故障先花 30 秒在心里过一遍 OSI 七层模型把“物理层到应用层”每一层可能出问题的地方列出来再决定抓包位置、过滤条件和分析重点。这是个成本极低、收益极高的习惯养成之后你在 Windows 环境不管是客户端还是服务器端的排错速度会有非常明显的提升。提示在 Server 2022 上打开 Wireshark 抓包时务必使用“以管理员身份运行”否则一些网卡的抓包驱动无法加载。抓包结束后及时关闭捕获并保存文件避免大文件占用磁盘空间。实际上我后来做安全分析的时候也经常拿这套 OSI 分层思路来定界面看到异常 ICMP 先想到网络层扫描看到异常 SMB2 先想到横向渗透思路对了分析效率自然就上来了。我个人最大的体会是网工、运维和信息安全这三条线在底层是殊途同归的——你对协议交互的理解越深排错和发现异常的能力就越强。刚开始学的时候可以多抓包、多对比正常流量和异常流量的差异这比单纯看文档记住一百个状态码更有用。遇到某个状态码不认识不要急着搜索先回到数据包的完整交互序列里看它是怎么被触发出来的这样一次排错收获的往往比一次搜索收获的更多。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门