首页 / 资讯中心 / 文章详情

eNSP抓包与协议分析:ARP、ICMP、TCP、VLAN、STP排错实战

eNSP抓包与协议分析:ARP、ICMP、TCP、VLAN、STP排错实战 ★ FEATURED ARTICLE
做“实验九”这个编号的抓包实验时我观察到的情况基本一致前面的实验大家都是在敲命令、配地址、ping 通、截图然后交报告到这一次要求打开抓包工具屏幕上立刻出现一屏花花绿绿的报文很多人的第一反应是“这东西该怎么看”。实验报告交上来抓包截图往往只有一张 ARP 广播分析栏写一句“观察到 ARP 请求报文”就没了。协议分析这件事难点不在操作而在读报文工具会替你解码每个字段但不会告诉你这个字段为什么是这值、这值异常意味着什么。借助 eNSP 搭建拓扑并抓包把 ARP、ICMP、TCP、VLAN、STP 这几类报文逐个拆开来看配合抓不到包时的完整排查链路能帮你在实验课之外真正读懂这一层。不管你是第一次接触报文分析的新手还是想拿抓包当排错工具的网工下面这些内容都可以直接照着做。1. 在模拟器里抓包的实际价值很多人心里有个默认前提模拟器是假的抓出来的包也是假的不如直接去真机上抓。这个想法对了一半。模拟器确实不经过物理芯片转发时延、丢包、线缆误码这些物理层现象它模拟不出来你在这里看到的“0 丢包”和真机上的“0 丢包”不是一回事。但协议本身的行为是完整的ARP 的广播域范围、TCP 的序号推进、VLAN 标签的剥离时机、STP 的选举过程这些全部由协议栈和转发逻辑决定跟是不是模拟环境没有关系。而这些恰恰是协议分析实验最想让你看到的东西。1.1 模拟器抓包和真机抓包的差别在哪真机上抓包你得考虑端口镜像、TAP 分流器、抓包设备接在哪个位置一套下来硬件成本不低。eNSP 的优势是把抓包操作简化到了“右键、开始抓包”这个程度任何一条链路、任何一个接口都能立刻把报文复制出来。缺点是隔离性太强你抓的是虚拟接口上的报文副本看不到物理层的信号质量也看不到交换机背板内部的转发过程。所以我的建议是把模拟器抓包当成“协议逻辑验证工具”而不是“性能分析工具”。用它来验证“这一步该不该发这个包”“这个字段该填什么”非常合适用它来判断“这条万兆链路有没有拥塞”完全不合适。这个定位会直接影响你怎么看抓包结果。比如在模拟器里你永远抓不到以太网前导码和帧间隙抓到的帧结构是裁剪过的你也抓不到物理层的 CRC 错误帧因为虚拟链路不产生误码。如果实验报告里出现“观察到物理层误码”这种结论那基本可以判断分析没有真正做。1.2 抓包点选错后面全白做这是这类实验里最主要的失分点比不会看报文更常见。抓包点的位置决定了你能看到哪一层的报文选错了后面无论换什么过滤器都救不回来。举个典型场景拓扑里有两台交换机 SW1、SW2 通过 Trunk 互联下面各挂一台 PC你要观察 VLAN 标签。如果抓包点选在 PC 的网卡接口上抓到的报文永远不带 802.1Q 标签因为标签在接入端口就已经被剥掉了。这时候你可能会怀疑 Trunk 没配好、怀疑 VLAN 没创建实际上配置全对只是观察位置在标签剥离之后。再比如观察 STP 选举抓包点必须在交换机端口上抓 PC 是抓不到 BPDU 的因为 PC 端口通常配置了边缘端口或者不参与生成树BPDU 根本不会往那边送。所以在开始抓包之前先在纸上把“我要看的这个报文它在这条路径上的哪个位置是以什么形态存在的”想清楚这一步花五分钟能省掉后面半小时的困惑。判断方法很简单问自己三个问题。这个报文从哪发出来、到哪去、中间经过哪些设备每经过一个设备头部的哪个字段会被改写或删除我希望观察的是改写前还是改写后三个问题答完抓包点自然就定了。2. 打通抓包链路eNSP 与抓包工具的对接细节抓包链路本身出问题的概率比协议分析出错高得多。我见过的情况里大概有三成是“右键开始抓包抓包工具弹出来了但列表里一个包都没有”。这类问题跟协议没关系纯粹是环境没配对。这一节先把这条链路走通后面才有分析可言。2.1 环境准备里最容易漏掉的三件事第一件是抓包工具路径。eNSP 本身不解析报文它只负责把虚拟接口上的报文导出来交给外部抓包工具显示。首次使用或者换过安装位置之后需要在模拟器的设置里指定抓包程序的可执行文件路径。路径指错了右键抓包会没有任何反应或者弹一个空窗口。这里有个细节路径里尽量不要包含中文和空格某些版本对这类路径处理有问题会静默失败。第二件是抓包驱动。Windows 平台上的抓包依赖底层驱动组件早期版本用的是老一套驱动新系统上安装经常报兼容性错误需要以兼容模式运行安装程序较新版本改用另一套驱动兼容性好一些但安装时要注意勾选“支持旧版 API”这一项否则 eNSP 调不起来。装完之后建议重启一次别嫌麻烦驱动没加载完就测试只会浪费时间。第三件是权限。抓包需要访问底层网络接口普通用户权限在部分系统上会被拦截表现同样是“窗口开了但抓不到”。以管理员身份运行模拟器能规避掉这一整类问题。提示装完驱动和抓包工具之后先别急着搭复杂拓扑。用一个最简的两台设备直连拓扑配好地址 ping 一次能抓到包再往下做。这一步验证的是环境不是协议先把它排除掉。2.2 抓包端口的三种选择及其观察差异在 eNSP 里抓包入口大致分三类观察到的内容差别很大值得单独说清楚。抓包位置能看到的内容看不到的内容适用场景PC/终端设备网卡应用层完整报文、已剥离标签的二层帧802.1Q 标签、Trunk 上的多 VLAN 流量应用层协议分析、端到端连通性验证路由器物理接口三层报文、ARP、路由协议报文交换机内部的 VLAN 处理过程路由协议、NAT、ACL 效果验证交换机端口Access/Trunk带标签或不带标签的二层帧、BPDU应用层内容若被加密或分片VLAN、STP、链路聚合分析这个表不是理论推演是实打实的操作经验。我一般建议做 VLAN 实验时同时在两端抓交换机 Trunk 口抓一次看到带 0x8100 标签的帧PC 网卡再抓一次看到标签已经消失。两张图放在一起对比比任何文字描述都有说服力报告里这么写分析深度立刻不一样。2.3 一次 ping 的完整报文序列环境通了之后先做一次最简单的验证两台设备配同网段地址互 ping。以 R1192.168.1.1/24ping R2192.168.1.2/24为例设备侧配置如下system-view sysname R1 interface GigabitEthernet0/0/0 ip address 192.168.1.1 255.255.255.0 undo shutdownR2 侧对称配置成 192.168.1.2。然后在 R1 的接口上开始抓包执行ping 192.168.1.2。正常情况下你会看到这样的序列先是两条 ARP一条广播的请求源 MAC 是 R1 接口 MAC目的 MAC 全 F一条单播的应答然后是 ICMP 的 Echo request 和 Echo reply一问一答重复四次默认 ping 发五个包第一个包的 ARP 解析时间会被算进去有时只看到四对完整的 ICMP这点后面还会提到。这个过程看着平淡但它是后面所有分析的基础模板。你要建立的核心认知是任何一次跨网段通信第一个包一定不是业务报文而是 ARP。这个认知在排查“ping 不通”时极其关键因为不通的原因可能压根不在三层而在二层地址解析就没成功。3. ARP 与 ICMP二三层交界处的第一个观察窗口ARP 和 ICMP 是抓包实验里最容易上手、也最容易被写敷衍的两类报文。上手是因为结构简单敷衍是因为很多人只看到了“广播”和“单播”的区别就停了。实际上这两个协议里藏着的细节足够撑起半篇实验报告。3.1 ARP 请求与应答的字段逐项拆解展开一条 ARP 请求头部字段是这么几组硬件类型、协议类型、硬件地址长度、协议地址长度、操作码后面跟着发送方硬件地址、发送方协议地址、目标硬件地址、目标协议地址。抓到的请求包里硬件类型是 1以太网协议类型是 0x0800IPv4硬件地址长度 6协议地址长度 4操作码 1。目标硬件地址那一栏是 00:00:00:00:00:00因为发送方还不知道对方 MAC这正是 ARP 请求存在的意义。应答包里操作码变成 2目标硬件地址被填上了真实 MAC而且注意应答是单播回给请求方的不是广播。这里有个特别值得在报告里写的观察点ARP 请求是广播但广播域有多大取决于当时的网络划分。如果你在同一个拓扑里划了两个 VLAN然后让跨 VLAN 的两台设备互 ping会看到 ARP 请求发出去了但对端收不到因为广播被限制在本 VLAN 内。这时候三层设备路由器或三层交换机会代答 ARP用自己的 MAC 回应请求方。抓包时你会看到应答包里的源 MAC 不是目标主机的 MAC而是网关的 MAC。这个现象叫代理 ARP是理解“为什么跨网段通信时帧的目的 MAC 是网关而不是最终主机”的最佳素材。还有一个容易被忽略的细节ARP 表项有老化时间一般是几分钟。如果你 ping 完之后等了很久再 ping会看到 ARP 又重新解析了一次。有些人做实验时发现“第一次 ping 丢一个包第二次就全通”就是因为在等 ARP 解析这个现象在报告里解释清楚比单纯写“网络正常”有价值得多。3.2 ICMP 的 type/code 组合与常见误判ICMP 的头部只有四个字段值得关注类型、代码、校验和外加标识符和序列号。类型 8 是请求类型 0 是应答这一对构成了 ping 的基础。但 ICMP 的价值远不止 ping它的类型 3目的不可达和类型 11超时才是排错时的重点。类型 3 下面细分代码代码 0 是网络不可达代码 1 是主机不可达代码 3 是端口不可达。三者的区别非常实用。你在设备上 ping 一个不存在的网段收到的是代码 0说明路由表里压根没有这条路由ping 一个存在网段里不存在的主机收到代码 1说明路由有了但 ARP 解析失败用 UDP 探测一个开着的主机的关闭端口收到代码 3说明包到了但服务没起。类型 11 是 TTL 耗尽这是 traceroute 的工作原理基础。TTL 每经过一个三层设备减一减到 0 就丢弃并回一个类型 11 的 ICMP。做实验时可以用tracert配合抓包把每一跳回来的 ICMP 超时报文都抓下来观察源 IP 的变化这个练习对理解 TTL 的作用比看教材直观得多。这里必须提醒一个常见误判抓包时看到 ICMP 请求发了但没看到应答不等于网络不通。有可能是应答包走了另一条路径抓包点没覆盖到也有可能是设备的 ICMP 应答被限速或者被策略禁掉了。正确做法是同时在两端抓包对比而不是只看一端就下结论。在 eNSP 里这个操作成本很低两端各开一个抓包窗口就行真机上可没这么方便所以更该在模拟环境里养成两端对照的习惯。4. 三次握手在抓包中的表现与序号误读TCP 抓包是这类实验的分水岭。前面 ARP、ICMP 结构简单看两眼就懂TCP 一上来就是序号、确认号、标志位、窗口、选项稍不留神就理解错了。而错得最多的地方恰恰是最基础的序号显示。4.1 相对序号与绝对序号抓包工具默认显示的是相对序号也就是把第一个包的序号当成 0 或 1后续的序号都相对于它计算。这样显示的好处是直观握手时看到 Seq0、Ack1一目了然。但它掩盖了真实的初始序号而真实初始序号是个随机值这正是 TCP 防伪造攻击的设计之一。如果你在报告里写“TCP 连接的初始序号为 0”那就是被相对显示误导了。要看到真实值需要在抓包工具的协议设置里把 TCP 的“相对序号”选项关掉重新看就会发现每个连接的初始序号都是一个大随机数两边各不相干。这个开关位置不难找但不知道它存在的人会一直以为初始序号就是 0。同样的道理时间戳的显示方式也可以切换。默认显示的是相对抓包开始的时间分析长连接时很有用但对比两台设备之间的交互延迟时用绝对时间更直观。这些显示选项不影响报文内容只影响你怎么看但选择哪种显示方式直接决定了你能不能看出问题。4.2 从握手到挥手在时间线上的完整形态用一个 TCP 连接把整条时间线走一遍是最有效的学习方式。随便找个支持 TCP 的服务端客户端发起连接抓包观察。握手三个阶段客户端发 SYN标志位只有 SYN 置位序号是随机值 x服务端回 SYNACKSYN 和 ACK 同时置位序号是另一个随机值 y确认号是 x1客户端再发 ACK确认号是 y1。三步走完连接建立。数据传输阶段序号按实际发送的字节数递增。这里有个容易搞混的点SYN 和 FIN 这两个标志位各占一个序号所以握手时的确认号是 x1 而不是 x。抓包里看到“确认号比对方的序号大 1”别急着怀疑算错了先看对方那个包是不是带了 SYN 或 FIN。挥手四个阶段主动关闭方发 FINACK被动方回 ACK被动方再发 FINACK主动方回 ACK。主动方在发出最后一个 ACK 之后进入 TIME_WAIT 状态等待两倍报文最大生存时间通常是几十秒到两分钟。抓包时如果你在关闭之后继续抓会看到这个连接在抓包列表里“挂着”一段时间才消失这不是没关干净是正常状态。注意抓包工具默认的 TCP 分析会把连接分段染色握手一段、数据传输一段、挥手一段。如果染色显示异常比如握手只显示两个包通常是抓包起点晚于连接建立漏掉了第一个 SYN。这种情况不能当异常来分析。5. 交换环境里的 VLAN Tag 与 STP 观察二层的内容比三层更容易“看不见”因为交换机在转发时改写头部很多时候你以为抓到了其实抓到的是改写后的版本。这一节讲两个最典型的情况。5.1 VLAN Tag 在哪个位置被剥掉802.1Q 标签插在源 MAC 之后、类型字段之前一共四个字节。前两个字节是标签协议标识固定值 0x8100看到这个值就说明这帧带标签后面两个字节里高三位是优先级中间一位是丢弃 eligible 标志低十二位是 VLAN ID。VLAN ID 有效范围是 1 到 40940 和 4095 保留。关键在剥离时机。接入端口收到无标签帧会根据端口配置的 VLAN 打上标签再往内部转发发出时如果是对端也是接入端口标签被剥掉。Trunk 端口则相反发出时保留标签。所以在交换机之间的 Trunk 链路上抓包能看到 0x8100在 PC 网卡上抓包永远看不到。这个差异可以直接拿来做验证实验拓扑里划两个 VLAN把 Trunk 口和 PC 口分别抓一次对比同一个 ping 过程的帧结构。Trunk 侧能看到标签PC 侧看不到而且能观察到标签里的 VLAN ID 值跟你配置的一致。这个对比做出来VLAN 的原理就不用再背了。顺带说一个实际的排查用法如果两个 VLAN 之间意外通了抓 Trunk 口看标签。如果某些帧的标签里 VLAN ID 跟预期不符说明有端口的 PVID 配错了或者某个口被误配成了 Hybrid 且放行了不该放行的 VLAN。这个手法比逐条查配置快得多。5.2 BPDU 的观察窗口与组播目的地址生成树协议报文的目的 MAC 是固定的组播地址 01-80-c2-00-00-00这个地址不会被普通交换机的 MAC 表学习也不会被转发到其他端口只在生成树参与者之间传递。所以抓 BPDU 必须抓在交换机端口上抓 PC 口是抓不到的。抓到的 BPDU 里重点看几个字段根桥标识、根路径开销、发送者标识、端口标识、消息年龄、最大年龄、Hello 时间、转发延迟。选举逻辑就看这几个先比根桥 ID优先级加 MAC越小越优根桥相同再比根路径开销还相同再比发送者 ID最后比端口 ID。抓包时在拓扑里改一下某台交换机的优先级让它从非根变成根再抓一次能清楚看到根桥标识和根路径开销的变化以及端口角色从阻塞转到转发的整个过程。这个实验里有个时间细节值得记录拓扑变化后端口状态迁移要经历阻塞、侦听、学习、转发四个阶段默认配置下每个阶段停留十几秒加起来三十秒左右。抓包时你会看到 BPDU 一直在发但业务报文在这段时间内不通。有人做实验时发现“配完要等半分钟才通”以为配置有问题其实是收敛时间。想加速可以调转发延迟但生产环境不建议乱调。6. 抓包结果为空时的排查顺序这一节是纯实战。抓包抓不到数据原因至少有七八种乱试的效率极低按固定顺序查能最快定位。6.1 从接口状态到抓包工具的逐层确认我习惯按这个顺序往下走第一层确认接口是不是真的在工作。抓包抓的是经过这个接口的报文如果接口没起来、地址没配、协议没协商上那么本来就没有报文经过抓不到是正常的。在设备上执行display interface brief看接口状态是不是 up两边都确认一遍。第二层确认抓包点是不是在流量路径上。这点前面讲过但实际排查时还是经常栽。判断方法很直接把抓包点换到离源端最近的接口再抓一次如果那里有包说明流量确实发了问题在路径上如果那里也没包问题在源端本身。第三层确认抓包工具是否真的连上了接口。有些版本在抓包窗口里会显示一个接口列表如果列表是空的或者选中的接口名字明显不对比如选到了本机的物理网卡而不是模拟器生成的虚拟接口那抓到的东西跟你要分析的完全无关。这种情况最迷惑人因为窗口里有包在滚但那些包是本机其他程序产生的流量。第四层确认过滤器没有误伤。这一条单独展开讲。6.2 过滤器写错造成的“假空包”抓包工具里有两套过滤器作用时机完全不同混用是高频错误。抓包过滤器在抓取阶段生效语法是一套底层的表达式语言写进去之后不匹配的包根本不记录。显示过滤器在分析阶段生效语法是工具自己的一套只是把已抓到的包筛出来显示原始数据还在。对比项抓包过滤器显示过滤器生效时机抓取时分析时语法示例host 192.168.1.1 and icmpip.addr 192.168.1.1 icmp写错的后果包根本没抓到无法补救只是不显示改一下就能看到建议用法流量极大时缩小范围日常分析优先用这个常见事故是这样的想着只看 ICMP就在抓包过滤器里写了icmp但实际想观察的是 ARP 解析过程结果 ARP 包一个都没抓到然后误以为设备没发 ARP。正确的做法是先用显示过滤器抓全量再筛只有在流量大到抓包文件撑爆内存时才动用抓包过滤器而且写完之后要立刻验证一下有没有误伤。显示过滤器写错的表现更隐蔽。比如想抓某个主机的所有流量写成ip.addr 192.168.1.1单等号某些版本会直接报错提示语法问题还好办写成ip.src 192.168.1.1就只显示源地址匹配的包回程包全部被隐藏你会以为只有去没有回。这类错误的排查方法是把过滤器清空看总数对不对再一条条往上加。7. 用抓包结果反推配置问题的思路抓包的终极价值不是“看懂报文”而是“用报文解释现象”。这一节讲三个我常用的反向推断思路。7.1 用报文的时间差找环路二层环路的表现是广播包无限增殖抓包时能看到同一个内容、同一个序列的广播帧反复出现而且时间间隔极短几微秒一个。判断是不是环路有一个简单方法抓一条链路的包按源 MAC 排序如果同一个源 MAC 的广播帧在短时间内大量重复且 TTL 没有递减二层没有 TTL但可以看到帧内容完全一致基本可以判定成环。更精确的观察点是生成树的收敛过程。如果抓包时看到 BPDU 里根桥标识频繁变化说明拓扑在反复震荡这通常是链路不稳定或者配置冲突导致的环路只是结果不是原因。这个区分很重要直接把“环路”写进结论但没找到根因等于没分析。7.2 用重传与零窗口判断“看起来通”的链路有一种情况特别容易骗人ping 能通但业务时快时慢。只看 ping 结果会得出“网络正常”的结论抓包才能看出问题。关键指标有三个。重传同一个序号的数据包出现多次说明对端没确认发送方超时重发。零窗口接收方通告的窗口大小为 0说明它缓冲区满了暂时收不了数据发送方必须等窗口更新才能继续。重复确认同一个确认号连续出现多次通常意味着中间有报文丢失接收方在催发。这三个指标在抓包工具里都有现成的分析功能连接列表里会直接标出重传次数和窗口变化。做实验时人为制造一下把一个接口的速率降下来或者用流量发生器打满带宽再抓包看这些指标怎么变。这种“制造问题再观察”的练习比正常情况下的抓包有价值得多因为你知道了异常长什么样以后遇到才认得出。7.3 用 DHCP 交互序列判断地址获取卡在哪一步终端拿不到地址是个高频问题抓包能把排查范围一下子缩小到具体步骤。正常的 DHCP 交互是四步客户端广播 Discover服务端回应 Offer客户端广播 Request 确认选择服务端回 Ack。四个包的源和目的地址很有意思Discover 源地址是 0.0.0.0、目的地址是 255.255.255.255Offer 源地址是服务器地址、目的地址是待分配地址有些实现用广播Request 同样是广播源地址还是 0.0.0.0Ack 之后客户端才会正式使用分配的地址。按断点判断只看到 Discover 没有 Offer说明请求没到服务器或者服务器没配地址池、没开启服务看到 Offer 没有 Request说明客户端没接受这个提议可能是地址冲突检测失败看到 Request 没有 Ack说明服务器拒绝了常见原因是地址池耗尽或者租期配置有问题。这套判断逻辑在模拟环境里练熟到真实网络里一样能用。DHCP 的报文格式和交互流程是标准化的不因为环境不同而改变。最后分享一个我在带这类实验时反复强调的习惯每抓一次包先在纸上画一遍预期会看到什么再去对照实际抓到的内容。预期和实际的差异才是分析的价值所在。如果每次都抓完再想“这里面有什么”看到的永远只是报文列表不是协议行为。另外抓包文件记得及时另存模拟器关闭后临时文件会丢回头想补截图就得重做一遍这个亏我吃过不止一次。
阅读完成 · 觉得有帮助?
咨询建站