news 2026/4/25 15:01:17

第二十篇技术笔记:ARP - 古灵精怪嗓一开,快乐顽童必自来

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
第二十篇技术笔记:ARP - 古灵精怪嗓一开,快乐顽童必自来

写在开篇:

话说郭靖和黄蓉来到桃花岛,想找老顽童周伯通玩。

岛很大,山洞很多,老顽童不知道躲在哪个犄角旮旯。

周伯通有个毛病:你越找他,他越躲;你装找不到,他自己憋不住。

黄蓉眼珠一转,对郭靖使了个眼色。

郭靖会意,假装着急地喊:“老顽童——你在哪——?快出来——!”

没动静。

黄蓉又喊:“哎,看来老顽童不在岛上,咱们走吧。”

话音刚落,一个山洞里传出声音:

“谁说我不在!我在这儿呢!这山洞可好玩了,你们快来!”

郭靖和黄蓉相视一笑——这招果然灵。

郭靖掏出小本本,记下“老顽童 = 东边第三个山洞”,自言自语:“原来如此,先喊一嗓子,装作找不到,他自己就蹦出来了。”

他挠挠头,憨憨一笑:

“这难道就是传说中的ARP?”

一、ARP是啥?——桃花岛的“喊人协议”

ARP,全称Address Resolution Protocol,地址解析协议。

干啥的:在局域网里,根据IP地址找到MAC地址。

为啥需要它:郭靖知道老顽童的名字(IP地址),但岛上的通信系统只认山洞位置(MAC地址)。不找到山洞,信送不进去。

车上为啥需要:摄像头知道网关的IP地址,但不知道网关的MAC地址。没有MAC地址,以太网帧填不了目标MAC,数据发不出去。

一句话:古灵精怪嗓一开,快乐顽童必自来。

二、一个容易搞混的地方:帧头和ARP包里都有“源/目标MAC”

郭靖看了看后面的ARP包结构,挠挠头:“总镖头,我有个问题。以太网帧头里已经有一对源MAC/目标MAC了,怎么ARP包里又有一对?这不是重复了吗?”

总镖头捋了捋胡子:“问得好。不重复,它们各管各的事。

以太网帧头里的MAC:负责物理转发——告诉交换机“这帧要送到哪里”。
ARP包内部的MAC:负责逻辑询问——告诉收到帧的设备“谁在问、问的是谁”。

一个类比

你寄一封信:

  • 信封上写“寄件人:郭靖,收件人:桃花岛全体居民”——这是让邮递员(交换机)知道怎么送

  • 信纸上写“我是郭靖,我在找老顽童,他的地址是什么?”——这是让收到信的人(老顽童)知道你在问什么

信封上的地址信纸上的名字不是一回事。信封决定信送到哪里,信纸决定收信人知道你在找谁。

在ARP里

  • 帧头目标MAC=全F:让交换机广播给所有人(“把这封信送给岛上每一个人”)

  • ARP目标MAC=0:告诉收到的设备“我在找这个IP的MAC,还不知道”(“信纸上写着‘我在找老顽童的地址’”)

总结

层次作用请求时填什么郭靖版理解
以太网帧头物理转发(让交换机知道发给谁)目标MAC=全F(广播)“把这封信送给岛上每一个人”
ARP包内部逻辑询问(让收信人知道在找谁)目标MAC=0(未知)“信纸上写着‘我在找老顽童的地址’”

郭靖恍然大悟:“原来帧头是‘快递单’,ARP包是‘内容’。快递单决定谁收到这封信,内容决定收到信的人怎么处理。”

总镖头点头:“对了。所以老顽童收到广播帧,拆开一看,ARP包里写的是‘找老顽童’,他才知道‘这是在找我’。”

三、ARP怎么工作的?(喊一嗓子,等人回)

第一步:广播请求(郭靖黄蓉唱双簧)

郭靖喊:“老顽童——你在哪——?”(广播)

没反应。黄蓉补一刀:“看来老顽童不在岛上,咱们走吧。”

这嗓子不是只喊给老顽童听的,是喊给全岛所有人听的。这叫广播

层次字段含义
以太网帧头目标MACFF:FF:FF:FF:FF:FF广播地址,让交换机发给所有人
以太网帧头源MAC西厢第二间郭靖的房间号
ARP包内部操作码1(请求)“我在问路”
ARP包内部源MAC西厢第二间谁在喊
ARP包内部源IP郭靖喊的人是谁
ARP包内部目标MAC00:00:00:00:00:00不知道对方的MAC,填0
ARP包内部目标IP老顽童要找谁

第二步:单播应答(老顽童自己憋不住)

老顽童听到“不在岛上”,急了,从山洞里回话:“谁说我不在!我在这儿呢!东边第三个山洞!”

这叫单播——只发给郭靖,不给别人听。

层次字段含义
以太网帧头目标MAC西厢第二间只发给郭靖
以太网帧头源MAC东边第三个山洞老顽童的房间号
ARP包内部操作码2(应答)“我回答你”
ARP包内部源MAC东边第三个山洞老顽童的房间号
ARP包内部源IP老顽童谁在回
ARP包内部目标MAC西厢第二间郭靖的房间号
ARP包内部目标IP郭靖回给谁

第三步:缓存记录(郭靖掏出小本本)

郭靖收到回复,掏出小本本(ARP缓存),记下:“老顽童 = 东边第三个山洞”。

下次再找他,直接去东边第三个山洞,不用喊了。

四、ARP头长什么样?(按传输顺序)

ARP头不是IP包,它直接封装在以太网帧里。类型字段是0x0806。按传输顺序,ARP头长这样

┌────┬────┬──┬──┬──┬──────────┬──────┬──────────┬──────┐ │硬件│协议│硬│协│操│ 源MAC │ 源IP │ 目标MAC │ 目标IP│ │类型│类型│长│长│码│ 48位 │ 32位 │ 48位 │ 32位 │ │16位│16位│8 │8│16│ │ │ │ │ └────┴───┴──┴──┴──┴─────────┴──────┴──────────┴──────┘

请求时各字段取值

顺序字段长度请求时取值含义
1硬件类型16位0x0001以太网
2协议类型16位0x0800IPv4
3硬件地址长度8位6MAC地址6字节
4协议地址长度8位4IP地址4字节
5操作码16位1请求
6源MAC48位发送方MAC谁在喊
7源IP32位发送方IP喊的人是谁
8目标MAC48位00:00:00:00:00:00未知
9目标IP32位要找的IP找谁

应答时:操作码变成2(应答),目标MAC填上对方的MAC。

五、ARP缓存(郭靖的小本本)

郭靖的小本本上记着:

IP地址(名字)MAC地址(山洞位置)类型
老顽童东边第三个山洞动态
蓉儿西厢第二间动态
欧阳锋北边毒舍动态

小本本有保质期(通常几十秒到几分钟)。过期了要重新喊。

为什么要过期?因为老顽童会换山洞。今天在东边,明天可能跑到西边。如果不更新,郭靖还傻乎乎去东边找,找不到。

郭靖感叹:“这小本本跟我的记性差不多,时间长了就忘,得重新问。”

六、车上哪里用ARP?(每天都在喊)

场景1:摄像头发数据给网关

摄像头第一次发数据,不知道网关的MAC地址。

  1. 摄像头喊一嗓子:“谁是10.0.1.1?请告诉我你的MAC!”

  2. 网关回话:“我是10.0.1.1,我的MAC是GW_MAC。”

  3. 摄像头记到小本本上。

场景2:域控制器发数据给另一个ECU

同样流程:喊 → 回 → 记。

没有ARP:摄像头知道网关的IP,但不知道MAC,帧填不了目标MAC,数据发不出去。ARP是“问路”的,没它,IP包连第一跳都出不去。

七、ARP欺骗(如果有人冒充老顽童)

郭靖喊了一嗓子:“老顽童——你在哪——?”

结果一个坏人(欧阳锋)抢先回话:“我在这儿!北边毒舍!”

郭靖信了,记到小本本上。下次找老顽童,直接去了北边毒舍——被欧阳锋逮个正着。

这就是ARP欺骗(ARP Spoofing)。

(这涉及到信息安全,后面单独搞一篇掰扯。)

八、ARP和IP、MAC的关系(一张图看懂)

概念类比在ARP里的角色
IP地址老顽童的名字郭靖只知道这个名字
MAC地址老顽童的山洞位置郭靖需要找到这个才能送信
以太网帧头目标MAC信封上的“给所有人”广播,让全岛都听到
ARP包内部目标MAC纸条上的“找老顽童的MAC”未知,填0
ARP应答老顽童回话单播,指路
ARP缓存郭靖的小本本记下“老顽童=东边第三个山洞”

九、这些坑,靖哥哥替你先踩了

  • 坑1:以为“ARP请求的目标MAC填0”。后来才搞明白,以太网帧头的目标MAC是广播FF:FF:FF:FF:FF:FF,不是0。ARP包内部的目标MAC才填0。

  • 坑2:以为“ARP是IP协议的一部分”。后来才搞明白,ARP直接封装在以太网帧里,类型字段是0x0806,不是IP包(0x0800)。

  • 坑3:以为“ARP应答也是广播”。后来才搞明白,ARP应答是单播,只发给提问的人,不给别人听。

  • 坑4:以为“ARP缓存永久有效”。后来才搞明白,缓存会过期(通常几十秒到几分钟),过期要重新喊——因为老顽童会换山洞。

想通的那一刻:原来ARP就是“喊人问路”。知道名字(IP),不知道山洞(MAC),喊一嗓子,等回话,记小本本。

十、下步目标

ARP搞清楚了。下期DoIP初探

下期预告:就DoIP吧。

十一、写在最后

这一篇最大的收获:ARP就是桃花岛上古灵精怪嗓一开,快乐顽童必自来。

没有ARP,IP包连第一跳都出不去。没有郭靖黄蓉那一声喊,老顽童再近也找不到。

这难道就是传说中的ARP?

慢即是快,快即是慢。

打完收工,886。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/25 14:54:12

3步搭建你的专属直播录制系统:开源StreamCap深度解析

3步搭建你的专属直播录制系统:开源StreamCap深度解析 【免费下载链接】StreamCap Multi-Platform Live Stream Automatic Recording Tool | 多平台直播流自动录制客户端 基于FFmpeg 支持监控/定时/转码 项目地址: https://gitcode.com/gh_mirrors/st/StreamCap …

作者头像 李华
网站建设 2026/4/25 14:53:58

构建银河麒麟V10 SP2离线环境下的高效私有yum仓库

1. 为什么需要私有yum仓库 在银河麒麟V10 SP2服务器环境中,很多企业都会遇到一个共同的痛点:生产服务器通常不允许直接连接互联网,这就导致无法使用官方的yum源来安装软件。想象一下,每次需要安装一个简单的nginx,都得…

作者头像 李华
网站建设 2026/4/25 14:53:28

Zotero SciPDF:3分钟实现学术文献PDF自动下载的终极解决方案

Zotero SciPDF:3分钟实现学术文献PDF自动下载的终极解决方案 【免费下载链接】zotero-scipdf Download PDF from Sci-Hub automatically For Zotero7 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-scipdf 在学术研究的海洋中,文献管理是每…

作者头像 李华
网站建设 2026/4/25 14:51:38

PyMICAPS:气象工作者的终极Python可视化解决方案

PyMICAPS:气象工作者的终极Python可视化解决方案 【免费下载链接】PyMICAPS 气象数据可视化,用matplotlib和basemap绘制micaps数据 项目地址: https://gitcode.com/gh_mirrors/py/PyMICAPS 你是否曾为气象数据的复杂可视化而烦恼?面对…

作者头像 李华