ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

北航研究生计算机网络实验:ARP与ICMP抓包分析实战复盘

北航研究生计算机网络实验:ARP与ICMP抓包分析实战复盘 简介这份PDF是北航研究生计算机网络课程的实验三报告面向正在学习网络层协议、需要完成ARP与ICMP相关实验的高校学生及自学者。报告围绕ARP地址解析机制展开涵盖ARP请求与应答的交互过程、ARP缓存的作用、ARP报文各字段结构以及默认网关在跨网段通信中的必要性并借助Wireshark抓包对同网段与不同网段下ARP解析的异同进行了对比分析。资源包内仅含1个PDF文件大小约40KB内容为完整的实验记录与问答包括命令执行结果、报文统计、字段填表及ICMP地址掩码请求、时间戳请求等分析。已有111人学习下载。读者可借此对照实验步骤理解IP与MAC地址映射原理掌握抓包工具的使用方法并参考其中的分析思路完成自己的实验报告与排错验证。1. 北航研究生计算机网络实验从 ARP 到 ICMP 的一次抓包复盘如果你正在做北航研究生计算机网络实验大概率会在实验三附近卡住一阵子——题目看起来只是“抓包分析 ARP 和 ICMP”真上手却发现 Wireshark 里刷出来的报文比想象中杂得多ping 一个地址能牵出 ARP 请求、ARP 应答、ICMP 回显请求、ICMP 回显应答好几层。这个实验真正想让你搞清楚的不是“ping 通了没有”而是一次 ping 背后网络层和链路层到底交换了哪些报文、每个字段为什么长这样。它适合已经学过 IP 编址、子网掩码但还没亲手把协议字段和真实报文对上号的读者。下面我按自己当年踩坑的顺序把 ARP 解析、ICMP 分析、抓包过滤和排错讲一遍能照着复现。2. 实验三到底在考什么ARP 与 ICMP 的分工2.1 为什么 ping 之前先要有 ARP很多人第一次做这个实验会疑惑我明明敲的是ping 192.168.1.1为什么抓到的第一个包不是 ICMP而是 ARP原因在于ICMP 报文要被封装进 IP 数据报IP 数据报要被封装进以太网帧而以太网帧的头部需要目的 MAC 地址。你只知道对方的 IP不知道对方的 MAC这个映射就得靠 ARP 来查。ARP 的工作逻辑很朴素在同一个广播域里喊一嗓子“谁是这个 IP把你的 MAC 告诉我”。这个“喊”就是 ARP 请求目的 MAC 填广播地址ff:ff:ff:ff:ff:ff被问的那台主机单播回一个 ARP 应答把自己的 MAC 填进去。拿到 MAC 之后ICMP 报文才有资格被封装成帧发出去。这里有个容易被忽略的点ARP 缓存是有寿命的。Windows 上默认的邻居可达时间大概几十秒到几分钟Linux 上由gc_stale_time等参数控制。所以你在实验里连续 ping 同一个地址可能第一次看到 ARP后面几次就看不到了——不是实验做错了是缓存命中了。想稳定复现 ARP要么换一个没通信过的目标 IP要么先清缓存。2.2 ICMP 在 ping 里承担的角色ICMP 是 IP 层的“信使协议”它本身不传输用户数据只负责传递差错和控制信息。ping 用的是 ICMP 里的两类报文类型 8Echo Request回显请求和类型 0Echo Reply回显应答。一个 Echo Request 的 ICMP 头部结构是类型(1字节) 代码(1字节) 校验和(2字节) 标识符(2字节) 序列号(2字节) 数据。标识符通常用来区分不同的 ping 进程序列号用来区分同一个进程发出的第几个包。你在 Wireshark 里看到的Identifier和Sequence number就是这两个字段。ping 命令输出的timexx ms是怎么来的是发送方记录发出 Echo Request 的时间戳收到 Echo Reply 时再取一次时间两者相减。所以这个 RTT 里包含了往返链路延迟、中间设备处理延迟以及对方主机的响应时间。实验里如果要求你分析时延就要把这个逻辑讲清楚而不是只抄一个数字。2.3 实验环境怎么搭才不翻车北航这个实验一般是在虚拟机或者实验室固定拓扑里做。我建议的搭法是两台主机可以是两台虚拟机也可以是一台物理机加一台虚拟机接在同一台交换机或同一个虚拟网络里配同一网段的不同 IP。这样 ARP 广播能正常收发ICMP 也不会被三层设备拦掉。如果你用虚拟机网络模式选桥接或者仅主机都行但要注意NAT 模式下虚拟机和宿主机之间的 ARP 行为会被虚拟化层改写抓到的包可能不“干净”。做协议分析实验优先选桥接或仅主机让报文尽量接近真实链路。配好之后先在命令行确认三件事ipconfig或ip addr看 IP 和掩码对不对arp -a看当前缓存ping对方地址确认能通。这三步做完再开 Wireshark能省掉一半“抓不到包”的排查时间。3. 用 Wireshark 抓一次完整的 ping 过程3.1 抓包前的过滤器和网卡选择打开 Wireshark第一件事是选对网卡。虚拟机上通常有好几张虚拟网卡选错了就什么都抓不到。判断方法看哪张网卡的流量在跳或者先在命令行 ping 一下网关观察哪张网卡有计数增长。选好网卡后先别急着抓。建议先设一个捕获过滤器只抓和实验相关的流量避免被后台流量淹没。针对这个实验常用的捕获过滤器是# 只抓 ARP 和 ICMP减少无关流量干扰 arp or icmp捕获过滤器在抓包前生效语法是 BPFBerkeley Packet Filter。arp or icmp的意思是只保留 ARP 协议或 ICMP 协议的帧其他 TCP、UDP、DNS 流量直接丢弃。这样抓出来的包数量少分析起来清爽。如果你已经抓了一大堆包想事后筛选那就用显示过滤器语法不同# 显示过滤器只看 ARP arp # 只看 ICMP icmp # 只看 ICMP 里的 Echo 请求和应答 icmp.type 8 || icmp.type 0注意捕获过滤器和显示过滤器的语法不能混用。arp or icmp在显示过滤器里也能用但icmp.type 8这种字段级过滤只能用在显示过滤器里。新手最容易在这里翻车把显示过滤器填进捕获过滤器框结果报语法错误。3.2 清缓存、开抓包、发 ping 的标准顺序要抓到完整的 ARP ICMP 流程顺序很重要。我一般这么做第一步清掉对方的 ARP 缓存。Windows 上用管理员权限运行# Windows清空 ARP 缓存 arp -d * # Linux清空邻居表 ip neigh flush all第二步在 Wireshark 里点开始抓包。第三步回到命令行执行 ping只发少量包# Windows发 4 个包 ping 192.168.1.20 -n 4 # Linux发 4 个包 ping 192.168.1.20 -c 4第四步ping 结束后停止抓包保存文件。这个顺序能保证你抓到“ARP 请求 → ARP 应答 → ICMP 请求 → ICMP 应答”的完整序列。如果先 ping 再开抓包ARP 可能已经缓存好了你就只能看到 ICMP实验报告里缺了 ARP 部分。3.3 读懂 ARP 报文的每个字段抓到 ARP 包后展开 Wireshark 的协议树重点看这几个字段字段含义实验里要关注什么Hardware type硬件类型以太网为 1确认是 EthernetProtocol type上层协议IPv4 为 0x0800确认是 IPHardware sizeMAC 地址长度6固定值Protocol sizeIP 地址长度4固定值Opcode操作码1请求2应答区分请求和应答Sender MAC/IP发送方 MAC 和 IP请求里是发起方信息Target MAC/IP目标 MAC 和 IP请求里 Target MAC 全 0ARP 请求里Target MAC 字段填的是全 0因为发起方还不知道对方 MACARP 应答里Sender 和 Target 的角色互换Target MAC 填的是请求方的 MAC。这个“角色互换”是实验报告里经常要求你画图说明的点。还有一个细节ARP 请求是广播目的 MAC 全 fARP 应答是单播。你在 Wireshark 的 Ethernet II 头部能看到这个区别。如果抓到的是广播应答那说明网络里有异常可能是 ARP 欺骗或者配置错误。3.4 ICMP 回显请求与应答的对照分析ICMP 部分相对简单但要分析到位得把请求和应答对着看。展开一个 Echo Request记录下 Type8、Code0、Identifier、Sequence number、Data 长度再找到对应的 Echo Reply对比 Type0、Code0以及 Identifier 和 Sequence number 是否一致。一致的 Identifier 和 Sequence number 说明这是对同一个请求的应答。如果实验要求你分析“为什么 ping 不通”一个常见原因是请求发出去了但没收到应答这时候要看是对方没回还是回包在路上被丢了。Data 字段里通常填的是一串递增的字符Windows 默认是abcdefghijklmnopqrstuvwabcdefghiLinux 默认是时间戳。这个数据本身没有协议意义只是用来填充和校验。但你可以通过 Data 长度算出 ICMP 报文总长再结合 IP 头部长度算出帧长验证 MTU 相关的问题。4. 实验里最容易踩的五个坑4.1 抓不到 ARP缓存没清或目标不对现象Wireshark 里只有 ICMP没有 ARP。原因ARP 缓存里已经有对方的 MAC系统直接命中缓存不再发 ARP 请求。或者你 ping 的是网关而网关的 ARP 早就缓存好了。解决先执行arp -d *Windows或ip neigh flush allLinux清缓存再 ping 一个同网段但没通信过的 IP。如果还是抓不到检查两台主机是否在同一广播域——跨网段的话ARP 请求的是网关不是最终目标。4.2 ping 不通但 ARP 正常问题出在三层现象抓到了 ARP 请求和应答说明链路层通了但 ICMP 没有应答。原因可能是对方开了防火墙丢弃了 ICMP也可能是 IP 地址配错、子网掩码不匹配导致回包路由不对。解决先临时关掉对方防火墙测试实验环境里可以这么做如果通了就是防火墙问题。如果不通检查两边的 IP 和掩码确认在同一子网。用ipconfig或ip addr看别凭记忆。4.3 抓到重复的 ICMP 应答dup现象ping 输出里出现DUP!Wireshark 里看到同一个 Sequence number 有多个 Echo Reply。原因网络里存在环路或者有设备在做重复转发。也可能是虚拟化环境里网卡被桥接了两次。解决检查虚拟机的网络模式确认没有同时桥接到多张物理网卡。如果是物理网络检查交换机有没有配错 VLAN 或生成树。实验环境里最常见的就是虚拟机网络配置重复。4.4 过滤器写错导致“什么都抓不到”现象设了捕获过滤器后Wireshark 一个包都不显示。原因捕获过滤器语法错误或者过滤条件太严把该抓的包也滤掉了。比如写成arp and icmp这两个协议不会同时出现在一个帧里结果就是零。解决先用空过滤器抓一小段确认有流量再逐步加过滤条件。捕获过滤器用arp or icmp不要用and。显示过滤器可以更灵活但要注意字段名拼写icmp.type不能写成icmp_type。4.5 实验报告里字段解释张冠李戴现象报告里把 ARP 的 Opcode 说成“协议类型”或者把 ICMP 的 Identifier 说成“端口号”。原因对协议字段的理解停留在表面没有对着 RFC 或教材确认。解决ARP 的 Opcode 是操作码1 请求、2 应答Protocol type 才是上层协议类型。ICMP 没有端口概念Identifier 是标识符用来匹配请求和应答。写报告前把谢希仁《计算机网络》里对应章节翻一遍或者直接看 Wireshark 的字段提示别自己编。5. 把实验做深从抓包到协议行为的验证5.1 用 ping 的 -l 参数验证 MTU 与分片基础实验做完后可以加一个进阶验证用不同大小的 ping 包观察分片行为。Windows 上用-l指定数据长度Linux 上用-s# Windows发送数据部分为 2000 字节的 ping ping 192.168.1.20 -l 2000 -n 2 # Linux发送数据部分为 2000 字节的 ping ping 192.168.1.20 -s 2000 -c 2如果链路 MTU 是 15002000 字节的数据加上 ICMP 头部8 字节和 IP 头部20 字节会超过 MTU触发分片。在 Wireshark 里你会看到多个 IP 分片每个分片的 Flags 字段里 MFMore Fragments位为 1最后一个分片 MF 为 0Fragment offset 递增。这个验证能让你真正理解 IP 分片机制而不是只背概念。5.2 用 TTL 观察路径与超时报文ping 的 TTL 字段也值得玩一下。默认 TTL 在 Windows 上是 128Linux 上是 64。你可以用-iWindows或-tLinux指定 TTL# Windows指定 TTL 为 1 ping 192.168.1.20 -i 1 -n 2 # Linux指定 TTL 为 1 ping 192.168.1.20 -t 1 -c 2TTL 为 1 时如果目标不在同一网段第一跳路由器会把 TTL 减到 0然后回一个ICMP 超时报文Type 11Code 0。在 Wireshark 里抓到这个报文你就把“TTL 防止环路”这个知识点和真实报文对上了。如果目标在同一网段TTL1 也能通因为没有路由器参与转发。5.3 免费 ARP 与 IP 冲突检测热词里提到的“免费 ARP 可以用来探测 IP 地址是否冲突”在这个实验里也能验证。免费 ARPGratuitous ARP是主机主动广播自己的 IP 和 MAC 映射目的地址填自己的 IP。它的一个用途就是IP 冲突检测主机启动时发一个免费 ARP如果收到应答说明有人已经在用这个 IP。你可以在 Wireshark 里过滤arp.opcode 1 arp.src.proto_ipv4 arp.dst.proto_ipv4观察有没有免费 ARP。实验环境里如果手动配了重复 IP就能抓到冲突提示。这个点写进报告比只分析普通 ARP 请求应答更有深度。5.4 我自己的习惯先画时序图再写报告最后说一个我自己的习惯。做完抓包后别急着填报告表格先在纸上画一张时序图横轴是时间纵轴是两台主机把 ARP 请求、ARP 应答、ICMP 请求、ICMP 应答按顺序标出来每个报文旁边写上关键字段值。画完这张图报告里的分析部分基本就成型了而且不容易出现逻辑跳跃。这个实验的价值不在于“ping 通了”而在于你能否把教材上的协议字段和真实报文一一对应。我当年第一次做的时候也是对着 Wireshark 一脸懵后来逼着自己把每个字段都查一遍、画一遍才真正把 ARP 和 ICMP 吃透。希望帮到你。本文还有配套的精品资源点击获取
返回列表