北航计算机网络实验三:ARP与ICMP抓包分析及ping命令详解
发布时间:2026/9/29 22:33:07 作者:尧图编辑部 阅读量:1,286

简介这份PDF是北航研究生计算机网络课程的实验三网络层实验报告面向正在学习计算机网络、需要完成ARP与网络层相关实验的高校学生及自学者。报告围绕ARP协议展开涵盖ARP请求与应答的交互过程、ARP缓存的作用、ARP报文各字段结构以及默认网关在跨网段通信中的必要性并结合Wireshark抓包对ICMP回送请求与应答、地址掩码请求、时间戳请求等报文进行逐字段分析配有完整的实验数据表格与对比结论。资源包共1个PDF文件约40KB内容为实验报告正文便于直接查阅与对照填写。目前已有111人学习下载。读者可借此理清IP与MAC地址映射机制掌握同网段与跨网段ARP解析的异同并学习如何用Wireshark分析网络层报文适合作为实验参考与复习资料。1. 北航研究生计算机网络实验三从 ARP 到 ICMP 的一次抓包复盘如果你正在做北航研究生计算机网络实验三大概率会卡在同一个地方Wireshark 抓了一堆包却说不清 ARP 请求和 ICMP 回显之间到底谁先谁后、为什么 ping 同网段和跨网段的表现完全不同。这个实验的核心不是让你背协议字段而是逼你用抓包工具把「网络层转发」这件事看穿——ARP 怎么解析 MAC、ICMP 怎么封装在 IP 里、ping 命令背后到底发了什么。适合已经学过谢希仁《计算机网络》或王道八股、但一到动手就发懵的研一同学也适合想重新梳理 ARP 协议原理和 ping 命令用法的从业者。下面按我实际做实验的顺序把拓扑搭建、抓包分析、参数设置和踩过的坑一次讲清楚。2. 实验拓扑与抓包环境先把「能复现」这件事做扎实2.1 为什么选 GNS3 而不是 Packet Tracer北航这个实验常见做法是用 GNS3 搭拓扑原因是它跑的是真实的路由器镜像和主机协议栈抓出来的 ARP 报文头部字段、ICMP 超时行为跟真实网络一致。Packet Tracer 是模拟器ARP 缓存老化时间、ICMP 重定向这些细节会被简化做实验三的分析时容易得出错误结论。我一般会选 GNS3 加两台路由器、两台 VPCS 或 Linux 主机拓扑结构是主机 A — 路由器 R1 — 路由器 R2 — 主机 B中间用 /30 网段互联。这样既能观察同网段 ARP又能观察跨网段时 ARP 解析的是网关而不是最终目的主机。如果你手头只有虚拟机用两台 CentOS 7 或 Ubuntu 加一台做路由转发也能复现但要注意 Linux 默认不开转发需要手动开。GNS3 的好处是路由器镜像自带转发省去内核参数调试。实验开始前先确认三件事每台设备的 IP 和子网掩码配对了、路由器接口 no shutdown 了、抓包接口选在正确的链路上。这三件事任何一件出问题后面抓包全是空的。2.2 最小拓扑的配置命令下面是我常用的 GNS3 拓扑配置路由器用 Cisco IOS 镜像主机用 VPCS。先配 R1# R1 配置 enable configure terminal interface fastEthernet0/0 ip address 192.168.1.1 255.255.255.0 no shutdown interface fastEthernet0/1 ip address 10.0.0.1 255.255.255.252 no shutdown exit ip routing end writeR2 对称配置f0/0 接主机 B 网段 192.168.2.0/24f0/1 接 10.0.0.2/30。主机 A 配 192.168.1.10/24 网关 192.168.1.1主机 B 配 192.168.2.10/24 网关 192.168.2.1。配置完先在两台路由器上show ip interface brief确认接口 up再在主机上互相 ping。参数说明ip routing在部分 IOS 版本默认开启但显式写上避免翻车no shutdown必须敲否则接口是 administratively down抓包看不到任何流量。子网掩码用 /30 是为了省地址互联链路只需要两个可用 IP。如果你用 Linux 做路由器对应命令是sysctl -w net.ipv4.ip_forward1和ip addr add效果一样。2.3 Wireshark 抓包点的选择抓包位置决定你能看到什么。实验三里我建议至少抓两个点主机 A 的出口链路和 R1 的 f0/1 出口。主机 A 出口能看到 ARP 请求广播和 ICMP 请求的完整封装R1 出口能看到跨网段时源 MAC 变成 R1 的 MAC、目的 MAC 变成 R2 的 MAC而 IP 层源目地址不变。这个对比是理解「网络层端到端、链路层逐跳」的关键。Wireshark 过滤器用arp or icmp就够了不要一上来就抓全部否则背景流量会干扰。抓包前先在主机 A 上arp -d清空 ARP 缓存再执行 ping这样能抓到完整的 ARP 请求-应答过程。如果不清缓存第二次 ping 直接走缓存你就看不到 ARP 了这是很多同学第一次做实验时「抓不到 ARP」的头号原因。3. ARP 协议抓包分析请求为什么是广播、应答为什么是单播3.1 ARP 报文头部字段逐个拆抓到 ARP 包后Wireshark 的协议树会展开这些字段Hardware type、Protocol type、Hardware size、Protocol size、Opcode、Sender MAC、Sender IP、Target MAC、Target IP。实验报告里要求你解释的就是这些。Hardware type 为 1 表示以太网Protocol type 为 0x0800 表示上层是 IPv4Opcode 为 1 是请求、2 是应答。Hardware size 6 是 MAC 长度Protocol size 4 是 IP 长度。关键点在于ARP 请求里 Target MAC 字段是全 0因为请求方还不知道对方 MAC应答里 Sender MAC 填的是被请求方的 MACTarget MAC 填的是请求方的 MAC。这个对称关系是判断 ARP 包方向的最快方法。很多同学看 Opcode 分不清谁问谁答其实看 Target MAC 是否全 0 更直观。3.2 同网段 ping 的完整时序在主机 A 上清空 ARP 缓存后 ping 192.168.1.20同网段另一台主机Wireshark 里会看到这个顺序1. ARP Request Who has 192.168.1.20? Tell 192.168.1.10 2. ARP Reply 192.168.1.20 is at aa:bb:cc:dd:ee:02 3. ICMP Echo Request 192.168.1.10 - 192.168.1.20 4. ICMP Echo Reply 192.168.1.20 - 192.168.1.10ARP 请求是二层广播目的 MAC 是 ff:ff:ff:ff:ff:ff所有同网段设备都会收到但只有 IP 匹配的那台会回单播应答。ICMP 请求和应答都是单播因为此时双方 MAC 都已经知道了。这个时序说明ARP 是 ICMP 的前置条件没有 ARP 解析就没有 ICMP 的封装。如果你 ping 的是同网段但对方关机会看到 ARP 请求重复发三次左右然后 ICMP 报 host unreachable。这个重传次数由操作系统决定Linux 默认 3 次Windows 也差不多。实验报告里可以把这个现象写进去说明 ARP 解析失败时上层协议的表现。3.3 跨网段 ping 时 ARP 解析的是谁这是实验三最容易搞混的地方。主机 A ping 192.168.2.10跨网段主机 A 发现目的 IP 不在自己网段于是查路由表找到默认网关 192.168.1.1然后 ARP 请求的是网关的 MAC不是主机 B 的 MAC。抓包会看到ARP Request Who has 192.168.1.1? Tell 192.168.1.10 ARP Reply 192.168.1.1 is at aa:bb:cc:dd:ee:01 ICMP Echo Request 192.168.1.10 - 192.168.2.10注意 ICMP 包的源 IP 是 192.168.1.10目的 IP 是 192.168.2.10但二层目的 MAC 是网关的 MAC。到了 R1 之后R1 查路由表发现 192.168.2.0/24 走 f0/1于是重新封装二层帧源 MAC 变成 R1 f0/1 的 MAC目的 MAC 变成 R2 f0/1 的 MACIP 层不变。这个「逐跳改 MAC、端到端不改 IP」的对比是实验报告里必须写清楚的核心结论。3.4 用 arp -a 和 arp -d 验证缓存行为抓包之外用命令行验证 ARP 缓存更直接。在主机 A 上执行arp -a # 查看当前 ARP 缓存 arp -d 192.168.1.1 # 删除指定条目 ping 192.168.2.10 # 触发重新 ARP arp -a # 再看缓存确认网关 MAC 被重新学习参数说明arp -d在 Linux 上需要 rootWindows 上直接arp -d *清全部。清缓存后第一次 ping 会有短暂延迟因为要等 ARP 解析完成这个延迟在抓包时间戳上能看出来通常 1 到 3 毫秒。如果arp -a里出现(incomplete)状态说明 ARP 请求发了但没收到应答检查对方是否在线、防火墙是否拦截了 ARP。4. ICMP 与 ping 命令回显请求里到底装了什么4.1 ICMP 报文结构在 Wireshark 里的呈现ICMP 回显请求的字段很少Type 8、Code 0、Checksum、Identifier、Sequence number后面跟 Data。回显应答 Type 0、Code 0其余字段原样返回。Identifier 用来匹配请求和应答Linux 下通常是进程 IDWindows 下是固定值。Sequence number 从 1 开始递增每发一个 ping 包加 1。实验报告里常问「ping 命令发了几个包、每个包多大」。默认 Linux ping 发 4 个包每个 ICMP 数据部分 56 字节加上 8 字节 ICMP 头和 20 字节 IP 头总共 84 字节。Wireshark 里看到的 Frame length 是 98 字节因为还加了 14 字节以太网头。这个计算过程写进报告能体现你真的看懂了封装。4.2 ping 命令的常用参数与实验对应做实验三时这几个参数必须会ping -c 4 192.168.2.10 # 只发 4 个包默认行为 ping -s 1000 192.168.2.10 # 指定数据部分 1000 字节观察分片 ping -i 0.5 192.168.2.10 # 间隔 0.5 秒观察 ARP 缓存老化 ping -t 255 192.168.2.10 # 设置 TTL观察 ICMP 超时-s 1000会让 IP 包超过 MTU 1500触发分片Wireshark 里能看到 Fragment offset 字段。-t 255设小一点比如 1跨路由器时 TTL 减到 0路由器回 ICMP Time ExceededType 11。这两个参数是实验报告里分析 ICMP 差错报文的入口。注意-t在 Linux 是 TTL在 Windows 是-i别搞混。4.3 用 ping 输出反推网络状态ping 的输出不只是通不通。time0.5 ms说明同网段或直连time10 ms以上可能有跨广域网或拥塞Request timeout说明 ICMP 应答没回来可能是路由不可达、防火墙拦截或对方关机Destination Host Unreachable通常是 ARP 解析失败或路由表没有条目TTL expired in transit是 TTL 耗尽说明路径上有环路或 TTL 设太小。实验里如果出现dup!重复应答说明网络里有重复的 ARP 应答或 ICMP 应答常见于有环路的二层网络或 ARP 欺骗场景。这个现象在实验报告里可以作为扩展分析但不要跑偏去讲安全攻防聚焦在协议行为上。5. 避坑与排查实验三最容易翻车的五个地方5.1 抓不到 ARP 请求现象Wireshark 里只有 ICMP 没有 ARP。原因主机 ARP 缓存里已经有网关或目的主机的条目ping 直接走缓存。解决抓包前先arp -d清缓存或者重启主机网络接口。Linux 下ip neigh flush all更彻底。5.2 跨网段 ping 不通但同网段通现象ping 网关通ping 对端主机不通。原因路由器没开转发、路由表缺条目、或者对端主机网关配错。解决在 R1 上show ip route确认有 192.168.2.0/24 的路由在 R2 上确认有 192.168.1.0/24 的路由。如果是 Linux 做路由器检查net.ipv4.ip_forward1。5.3 ICMP 包显示为「不可达」但 ARP 正常现象ARP 请求应答都有ICMP 请求发出去了但回不来。原因对端主机防火墙拦截 ICMP或者对端没有到源网段的路由。解决临时关掉对端防火墙systemctl stop firewalld测试确认是防火墙问题后加规则放行 ICMP。路由问题则检查对端默认网关。5.4 Wireshark 抓到的包不完整现象只抓到请求没抓到应答或者包长度不对。原因抓包接口选错比如抓了主机的 loopback 而不是出口网卡或者抓包过滤器写错把应答过滤掉了。解决确认抓包接口是连接拓扑的那块网卡过滤器先用arp or icmp不加其他条件抓到后再用显示过滤器细分。5.5 ping 延迟忽大忽小现象同网段 ping 延迟从 0.5ms 跳到 50ms。原因GNS3 或虚拟机环境 CPU 占用高抓包和模拟本身消耗资源或者 ARP 缓存老化导致周期性重新解析。解决关掉不必要的抓包窗口给虚拟机分配足够内存把 ARP 缓存老化时间调长Linux 下net.ipv4.neigh.default.gc_stale_time减少重新解析频率。6. 进阶技巧用 tcpdump 在 Linux 主机上做无 GUI 抓包实验环境里如果主机是 Linux 且没有图形界面Wireshark 用不了tcpdump 是替代方案。我一般用这条命令抓 ARP 和 ICMPtcpdump -i eth0 -nn -e arp or icmp -w lab3.pcap参数说明-i eth0指定网卡-nn不解析主机名和端口名-e显示 MAC 层头部-w写入文件后续用 Wireshark 打开分析。抓完后用tcpdump -r lab3.pcap -e回放或者把 pcap 拷到有 Wireshark 的机器上。这个组合在服务器环境里特别实用因为很多生产机器不装图形界面。另一个技巧是用ping -f洪水 ping 观察 ARP 缓存压力但实验环境里慎用容易把 GNS3 打满。更温和的做法是ping -c 100 -i 0.2连续发 100 个包观察 ARP 缓存条目是否稳定、有没有出现 incomplete 状态。如果出现 incomplete说明 ARP 解析在高频请求下丢包这在真实网络里对应 ARP 表溢出或链路拥塞。最后说一个我踩过的坑实验报告里要求画时序图很多同学把 ARP 和 ICMP 画在同一层。正确画法是 ARP 在二层和三层之间ICMP 在三层之上ICMP 封装在 IP 里IP 再封装在以太网帧里。时序上 ARP 先完成ICMP 才能发出。这个层次关系画对了报告的分析部分基本就稳了。希望帮到你。本文还有配套的精品资源点击获取