资讯动态

北航计算机网络实验三:ARP与ICMP抓包分析实战报告

发布时间:2026/9/29 18:53:26 来源:尧图企业网站定制
简介这份PDF是北航研究生计算机网络课程的实验三报告面向正在学习网络层协议、需要完成ARP与ICMP相关实验的高校学生及自学者。报告围绕ARP地址解析、ARP缓存、默认网关与跨网段通信等核心机制展开结合Wireshark抓包结果逐项记录并分析报文结构。资源包共1个PDF文件约40KB内容为实验报告正文包含ARP请求与应答字段对照表、ICMP回送请求与应答、地址掩码及时间戳请求等报文的填写与分析。读者可借此对照实验步骤理解同网段与跨网段ARP解析的差异掌握默认网关在多网络环境中的作用并学习如何从抓包数据中提取协议字段、排查通信问题。目前已有111人学习下载适合作为网络层实验的参考范例与复习材料。1. 北航研究生计算机网络实验三一份能直接复现 ARP 与 ICMP 抓包分析的实战报告如果你正在做北航研究生计算机网络实验三或者任何一门要求用 Wireshark 抓 ARP、ICMP 报文并逐字段填表的网络层实验这份 PDF 报告的价值不在于“答案”而在于它把整个实验的操作路径、字段对照和现象解释都留了下来。实验三的核心是网络层ARP 请求与应答的报文结构、ARP Cache 的命中逻辑、默认网关在跨网段通信中的角色以及 ICMP 询问报文和差错报文的类型/代码字段。适合正在跟实验指导书一步步做、但抓完包不知道怎么看、填表时对不上字段的人。我拆完这份报告后最大的感受是它把“抓包—筛协议—对字段—解释现象”这条链路走通了你照着复现能省掉大量在 Wireshark 里瞎点的时间。2. ARP 报文结构与同网段解析从 Opcode 到四个地址字段2.1 先搞清楚 ARP 请求和应答到底差在哪实验报告里反复出现的一张表是 ARP 请求报文和 ARP 应答报文的字段对照。很多人第一次抓 ARP 包看到 Opcode 有 1 和 2 两个值就懵了其实这两个值就是 ARP 的全部“动作类型”1 表示 request2 表示 reply。请求是广播出去的所以链路层 Destination 是ff:ff:ff:ff:ff:ff应答是单播回来的链路层 Destination 就是请求方的 MAC。真正容易填错的是网络层的四个字段Sender MAC Address、Sender IP Address、Target MAC Address、Target IP Address。在 ARP 请求里Target MAC Address 是全零00:00:00:00:00:00因为请求方还不知道目标 MAC在 ARP 应答里Target MAC Address 才被填成请求方的 MAC。这个“请求时目标 MAC 为空、应答时目标 MAC 被填上”的对称关系是判断你抓到的包对不对的第一直觉。报告里给出的实测数据很典型同网段下PC A192.168.1.22ping PC B192.168.1.21ARP 请求的 Sender IP 是 192.168.1.22Target IP 是 192.168.1.21ARP 应答的 Sender IP 变成 192.168.1.21Target IP 变成 192.168.1.22。Sender 和 Target 在请求/应答之间正好互换这是 ARP 协议设计上最干净的一点。2.2 用 Wireshark 过滤并定位 ARP 报文实验指导书里让你在 2.6.1 步骤 6 截获报文统计 Protocol 字段。报告里填的是“有 2 个 ARP 报文有 8 个 ICMP 报文”。这个数字不是拍脑袋来的是 ping 一次产生 4 个 Echo request 4 个 Echo reply加上 ARP 请求和应答各 1 个。下面是我一般会用的过滤和统计方式# 在 Wireshark 显示过滤器里输入只看 ARP arp # 只看 ICMP icmp # 同时看 ARP 和 ICMP用于统计总数 arp || icmp # 只看 ARP 请求Opcode1 arp.opcode 1 # 只看 ARP 应答Opcode2 arp.opcode 2逻辑说明arp.opcode是 Wireshark 对 ARP 协议树里 Opcode 字段的过滤语法值 1 对应 request值 2 对应 reply。参数上如果你只想看某个 IP 相关的 ARP可以叠加arp.src.proto_ipv4 192.168.1.22这类条件。统计报文数量时不要用“包列表里肉眼数”直接看 Wireshark 底部状态栏的 Displayed 计数或者用Statistics Protocol Hierarchy看协议占比这样填“几个 ARP、几个 ICMP”不会出错。提示抓包前先清空 ARP Cache否则你可能抓不到 ARP 请求。Windows 下用arp -d *Linux 下用ip neigh flush all这样 ping 的时候才会强制走一次 ARP 解析。2.3 ARP Cache 的作用与“少了 ARP 报文”现象报告里有一个很关键的对比第一次 ping 和第二次 ping 抓到的报文不一样第二次“少了 ARP 报文”。原因就是 ARP Cache。主机收到 ARP 应答后会把 IP 和 MAC 的对应关系写进缓存默认存活时间通常几分钟。第二次 ping 同一个目标时主机先查 ARP Cache命中就直接发 ICMP不再发 ARP 请求。你可以用下面的命令验证缓存的存在和老化# Windows 查看 ARP 缓存 arp -a # Linux 查看邻居表 ip neigh show # Windows 删除所有 ARP 缓存条目强制重新解析 arp -d * # Linux 删除指定条目 ip neigh del 192.168.1.21 dev eth0逻辑说明arp -a输出里的 Type 字段如果是 dynamic说明是动态学习到的如果是 static说明是手工绑定的。参数上arp -d *在 Windows 下需要管理员权限删完之后再 ping你就能重新抓到 ARP 请求。这一步是实验里“比较两次 ping 报文差异”的操作基础不做清缓存你永远只能看到 ICMP看不到 ARP。3. 跨网段 ARP 与默认网关Target IP 为什么变成了网关地址3.1 同网段和跨网段 ARP 的核心差异实验报告里第二个重点是重新组网后 PC A 和 PC B 在不同网段PC A 的默认网关改成 192.168.1.10PC B 的默认网关改成 192.168.2.10。这时候再抓 ARP你会发现一个反直觉的现象PC A 发出的 ARP 请求Target IP Address 不是 PC B 的 IP而是 PC A 自己的默认网关 IP 192.168.1.10。原因很简单PC A 发现目标 IP 和自己不在同一网段它不会直接 ARP 询问 PC B而是把数据包交给默认网关。所以 ARP 请求问的是“网关的 MAC 是多少”网关回复自己的 MAC 后PC A 把整个 IP 包发给网关由网关继续转发。报告里写得很清楚跨网段时ARP 应答的链路层 Source 和网络层 Sender MAC Address 都是网关 S1 e0/1 的 MAC 地址3c:e5:a6:45:6b:bc而不是 PC B 的 MAC。这个差异是实验填表时最容易翻车的地方。很多人以为 ARP 请求的 Target IP 永远是目标主机 IP结果跨网段一抓发现对不上。记住一句话ARP 只在同一广播域内解析跨网段时解析的是网关地址。3.2 默认网关不设置的后果与验证方法报告里有一个直接的问题“如果不设置默认网关会有什么后果”答案是无法访问不同网段的主机。这个结论需要你亲手验证一次否则记不住。操作上把 PC A 的默认网关清空再 ping 另一个网段的地址你会看到 ICMP 差错报文里的 Destination unreachable。# Windows 查看当前路由表确认默认网关 route print # Linux 查看默认网关 ip route show # 临时删除默认网关Linux需要 root ip route del default # 重新添加默认网关 ip route add default via 192.168.1.10逻辑说明route print里0.0.0.0那一行就是默认路由Gateway 列就是默认网关。删掉默认路由后主机不知道把跨网段包发给谁内核直接返回“网络不可达”。参数上ip route del default只删默认路由不影响同网段直连验证完记得加回去否则后续实验全断。这一步做完你就能理解为什么实验报告里强调“默认网关是跨网段通信的出口”。3.3 用 ping 和 tracert 观察跨网段路径报告里还涉及 tracert 的工作过程PC A 向 PC B 发送 TTL 从 1 开始递增的 ICMP Echo 请求路径上每个路由器把 TTL 减 1减到 0 就回一个 ICMP 超时报文Type 11Code 0。PC A 通过收集这些超时报文就能画出路径。# Windows 跟踪路由-d 表示不解析域名 tracert -d 192.168.2.21 # Linux 跟踪路由 traceroute -n 192.168.2.21 # 指定最大跳数 tracert -h 5 192.168.2.21逻辑说明tracert默认最多 30 跳-h可以改小方便在实验环境里快速看到前几跳。-d不反查 DNS速度更快。抓包时配合icmp过滤器你能同时看到 Echo request、Time-to-live exceeded 和 Echo reply 三类报文。参数上TTL 的初始值在 Windows 下通常是 128Linux 下是 64但 tracert 会自己控制发送的 TTL不需要你手动改。4. ICMP 询问报文与差错报文Type/Code 字段对照与抓包排查4.1 四类 ICMP 询问报文的字段速查实验报告里填了三张 ICMP 询问报文的表回送请求/应答、地址掩码请求/应答、时间戳请求/应答。这些表的字段值很容易混我整理成下面这张对照表方便你抓包时直接对报文类型TypeCode关键字段典型值回送请求80Identifier / Sequence由 ping 程序生成回送应答00Identifier / Sequence与请求一致地址掩码请求170Address mask请求里为 0.0.0.0地址掩码应答180Address mask255.255.255.0时间戳请求130Originate/Receive/Transmit请求里后两个为 0时间戳应答140Originate/Receive/Transmit三个时间戳都有值逻辑说明Identifier 和 Sequence number 是保证请求和应答一一对应的关键字段。报告里特别问了“哪些字段保证回送请求和回送应答一一对应”答案是网络层的 Source/Destination 加上 ICMP 的 Identifier/Sequence。抓包时你在 Wireshark 里展开 ICMP 协议树看到Identifier (BE)和Identifier (LE)两个表示这是字节序的不同展示值本身是一样的。4.2 差错报文Destination unreachable 与 Time-to-live exceeded报告里第二个实验场景抓到了两类 ICMP 差错报文。第一类是 Destination unreachableType 3Code 0 表示网络不可达。它的 ICMP 协议部分除了 Type/Code/Checksum还封装了原始 Echo 请求的 IP 层和 ICMP 层这样源主机才知道是哪个包出了问题。第二类是 Time-to-live exceededType 11Code 0这是 tracert 依赖的报文。# Wireshark 过滤终点不可达 icmp.type 3 # 过滤超时报文 icmp.type 11 # 过滤所有 ICMP 差错报文Type 3、4、5、11、12 icmp.type 3 || icmp.type 4 || icmp.type 5 || icmp.type 11 || icmp.type 12逻辑说明icmp.type是显示过滤器里最直接的字段。参数上Type 3 下面还有 Code 0 到 Code 15分别表示网络不可达、主机不可达、协议不可达、端口不可达等。实验里常见的是 Code 0 和 Code 1。抓包时如果只看到 Echo request 没有 reply先看有没有 Type 3 回来这比盲目重 ping 有效得多。4.3 用 pingtest 程序构造非标准 ICMP 询问报告里用了一个 pingtest 程序来发地址掩码请求和时间戳请求这两种报文普通 ping 命令发不出来。如果你手头没有这个程序常见做法是用 Scapy 自己构造from scapy.all import * # 构造地址掩码请求 pkt IP(dst192.168.1.21)/ICMP(type17, code0)/ICMPAddrMask(address0.0.0.0) send(pkt) # 构造时间戳请求 pkt IP(dst192.168.1.21)/ICMP(type13, code0)/ICMPTimestamp(orig0, recv0, trans0) send(pkt)逻辑说明Scapy 的ICMPAddrMask和ICMPTimestamp是专门为这两类报文准备的层。参数上address0.0.0.0是请求报文的固定填法应答里会被填成实际掩码。orig、recv、trans三个时间戳在请求里通常填 0应答里由目标主机填写。发完之后在 Wireshark 里用icmp.type 17 || icmp.type 18过滤就能看到请求和应答成对出现。注意Scapy 发原始 ICMP 需要管理员/root 权限Windows 下还要装 Npcap。如果发不出去先检查权限和网卡选择不要一上来就怀疑代码。5. 实验避坑与排查填表对不上、抓不到包、网关配错怎么办5.1 抓不到 ARP 请求只看到 ICMP现象ping 的时候 Wireshark 里只有 ICMP没有 ARP。原因ARP Cache 里已经有目标 IP 的 MAC 映射主机不需要再发 ARP 请求。解决先执行arp -d *Windows或ip neigh flush allLinux清空缓存再 ping。如果还是抓不到检查 Wireshark 抓的是不是正确的网卡虚拟机组网时经常抓错虚拟网卡。5.2 ARP 请求的 Target IP 填成了目标主机 IP现象跨网段实验里填表时 Target IP Address 写成了 PC B 的 IP和报告里的网关 IP 对不上。原因没有理解 ARP 只在同一广播域内解析跨网段时解析的是默认网关。解决先确认 PC A 的默认网关配置再抓包看 Target IP 是不是网关地址。如果是同网段实验Target IP 才是目标主机 IP。5.3 ICMP 差错报文里看不到原始请求的 IP 层现象抓到 Type 3 或 Type 11 报文但展开后只有 ICMP 头没有封装的原始 IP 包。原因Wireshark 默认可能只解析到 ICMP 层需要手动展开“Internet Protocol”和“Internet Control Message Protocol”两层。解决在报文详情面板里逐层展开差错报文的 ICMP 数据部分会完整封装原始请求的 IP 头和 ICMP 头。如果确实没有可能是抓包长度不够检查 Wireshark 的 snaplen 设置。5.4 默认网关配错导致 ping 不通现象跨网段 ping 直接返回 Destination unreachable或者完全没有回应。原因默认网关 IP 写错或者网关接口没配好。解决用route print或ip route show确认默认路由指向正确的网关 IP在网关设备上确认接口地址和路由表。实验报告里 PC A 的网关是 192.168.1.10PC B 的网关是 192.168.2.10配错一个就全断。5.5 时间戳报文的三个时间戳字段分不清现象填表时 Originate、Receive、Transmit 三个字段不知道哪个对应哪个。原因没有理解时间戳请求/应答的语义。解决Originate 是发送方发出请求的时间Receive 是接收方收到请求的时间Transmit 是接收方发出应答的时间。请求报文里 Receive 和 Transmit 通常为 0应答报文里三个都有值。报告里的实测数据是 Receive 和 Transmit 都是 14 小时 23 分 57.871 秒说明处理延迟极小。6. 把实验报告变成可复用的抓包分析模板这份报告最大的价值不是让你抄答案而是它留下了一套可复用的分析路径。我后来把实验三的流程固化成了一个检查清单先清 ARP Cache再启动 Wireshark 抓包然后用arp || icmp过滤统计协议数量接着按“请求/应答”成对展开字段最后对照 Type/Code 表解释现象。这套流程不只适用于北航这个实验任何涉及 ARP 和 ICMP 的网络层排查都能套。如果你想把实验做得更扎实可以在报告基础上加一步用 Scapy 构造异常 ICMP 报文比如错误的 Code 值观察目标主机怎么回应。这一步能帮你理解 ICMP 差错报文的触发条件而不是只停留在填表。参数上Scapy 的ICMP(type3, code1)可以模拟主机不可达配合 Wireshark 抓包你能看到完整的差错报文结构。还有一个我踩过的坑虚拟机组网时网卡模式选错会导致 ARP 广播收不到。VMware 下用 NAT 模式宿主机和虚拟机之间的 ARP 行为跟桥接模式不一样。实验报告里用的是 192.168.1.x 网段如果你复现时发现 ARP 请求发出去没有应答先检查虚拟机网络模式再检查防火墙。Windows 防火墙有时候会拦 ICMP导致 ping 不通但 ARP 正常。从那以后我每次做网络层实验都强制自己先跑一遍arp -a和route print确认缓存和路由表的状态再开始抓包。这个习惯帮我省掉了大量“为什么抓不到”的无效时间。希望这份拆解能帮到你实验报告里的字段和现象照着复现一遍比看十遍理论都管用。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑