写在开篇:
话说郭靖和黄蓉来到桃花岛,想找老顽童周伯通玩。
岛很大,山洞很多,老顽童不知道躲在哪个犄角旮旯。
周伯通有个毛病:你越找他,他越躲;你装找不到,他自己憋不住。
黄蓉眼珠一转,对郭靖使了个眼色。
郭靖会意,假装着急地喊:“老顽童——你在哪——?快出来——!”
没动静。
黄蓉又喊:“哎,看来老顽童不在岛上,咱们走吧。”
话音刚落,一个山洞里传出声音:
“谁说我不在!我在这儿呢!这山洞可好玩了,你们快来!”
郭靖和黄蓉相视一笑——这招果然灵。
郭靖掏出小本本,记下“老顽童 = 东边第三个山洞”,自言自语:“原来如此,先喊一嗓子,装作找不到,他自己就蹦出来了。”
他挠挠头,憨憨一笑:
“这难道就是传说中的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怎么工作的?(喊一嗓子,等人回)
第一步:广播请求(郭靖黄蓉唱双簧)
郭靖喊:“老顽童——你在哪——?”(广播)
没反应。黄蓉补一刀:“看来老顽童不在岛上,咱们走吧。”
这嗓子不是只喊给老顽童听的,是喊给全岛所有人听的。这叫广播。
| 层次 | 字段 | 值 | 含义 |
|---|---|---|---|
| 以太网帧头 | 目标MAC | FF:FF:FF:FF:FF:FF | 广播地址,让交换机发给所有人 |
| 以太网帧头 | 源MAC | 西厢第二间 | 郭靖的房间号 |
| ARP包内部 | 操作码 | 1(请求) | “我在问路” |
| ARP包内部 | 源MAC | 西厢第二间 | 谁在喊 |
| ARP包内部 | 源IP | 郭靖 | 喊的人是谁 |
| ARP包内部 | 目标MAC | 00: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位 | 0x0800 | IPv4 |
| 3 | 硬件地址长度 | 8位 | 6 | MAC地址6字节 |
| 4 | 协议地址长度 | 8位 | 4 | IP地址4字节 |
| 5 | 操作码 | 16位 | 1 | 请求 |
| 6 | 源MAC | 48位 | 发送方MAC | 谁在喊 |
| 7 | 源IP | 32位 | 发送方IP | 喊的人是谁 |
| 8 | 目标MAC | 48位 | 00:00:00:00:00:00 | 未知 |
| 9 | 目标IP | 32位 | 要找的IP | 找谁 |
应答时:操作码变成2(应答),目标MAC填上对方的MAC。
五、ARP缓存(郭靖的小本本)
郭靖的小本本上记着:
| IP地址(名字) | MAC地址(山洞位置) | 类型 |
|---|---|---|
| 老顽童 | 东边第三个山洞 | 动态 |
| 蓉儿 | 西厢第二间 | 动态 |
| 欧阳锋 | 北边毒舍 | 动态 |
小本本有保质期(通常几十秒到几分钟)。过期了要重新喊。
为什么要过期?因为老顽童会换山洞。今天在东边,明天可能跑到西边。如果不更新,郭靖还傻乎乎去东边找,找不到。
郭靖感叹:“这小本本跟我的记性差不多,时间长了就忘,得重新问。”
六、车上哪里用ARP?(每天都在喊)
场景1:摄像头发数据给网关
摄像头第一次发数据,不知道网关的MAC地址。
摄像头喊一嗓子:“谁是10.0.1.1?请告诉我你的MAC!”
网关回话:“我是10.0.1.1,我的MAC是GW_MAC。”
摄像头记到小本本上。
场景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。