免费 ARP 的分组, request 和 reply 的分组在使用有什么区别?

2021-12-01 20:31:24 +08:00
 amiwrong123

https://www.zhihu.com/question/64514922/answer/221264172

这篇文章我看到了三种 免费 ARP 报文,它们的共同点是

但是这三个 免费 ARP 报文 还各不相同:

这是一个 reply 的 免费 ARP 报文,ARP 字段的目的 mac 和源一样

这是一个 reply 的免费 ARP 报文,ARP 字段的目的 mac 是全 1

这是一个 request 的 免费 ARP 报文,ARP 字段的目的 mac 是全 0 (比如,我猜这个是在机器开机的时候使用,查看自己的 ip 地址有没有被别的机器抢占)

所以这三种 免费 ARP 报文 是分别在什么时候使用?(虽然这个问题不重要可能,但还是想问一下)

924 次点击
所在节点    程序员
3 条回复
asilin
2021-12-16 09:57:29 +08:00
第一种 ARP 回应包没在环境中见过,自己发自己收?不理解,感觉像是 ARP 攻击。

第二种是“免费”ARP 回应包,其与“普通”的 ARP 回应包区别在于:
- 目标地址为广播地址 ff:ff:ff:ff:ff:ff
- target IP 有值,且值与 sender IP 相同

“免费”ARP 回应包一般很少见,作用和“免费”ARP 请求包一样,都是用于更新当前网络其他主机 /交换机的 ARP 缓存表,但是不一定有效。
实际上我们一般都是用“免费”ARP 请求包来达到相同的作用。

第三种就是常见的“免费”ARP 请求包了,一般都是用来更新当前网络其他主机 /交换机的 ARP 缓存表。
注意:“免费”ARP 请求包并不能用来查看自己的 ip 地址有没有被别的机器抢占,这是“冲突探测”ARP 请求包的功能
至于为什么目标 MAC 是全 0 ,而不是 ff:ff:ff:ff:ff:ff ,这取决于发送机器本身:
一般来说 Linux/Windows 等操作系统就是全 0 ,而一些 TCP/IP 协议栈比较简单的嵌入式设备中,只允许目标 MAC 和 target mac 保持一致,也就是 ARP 请求包的 target mac 都为 ff:ff:ff:ff:ff:ff

至于“冲突探测”ARP 请求包,则是 sendip 为 0.0.0.0 的 ARP 请求包,它之所以这样设计,主要是为了不更新 LAN 内网络的主机 /交换机的 ARP 缓存表,且不期望有回应。

说了这么多,你可能就比较混乱了,主要是 ARP 包的结构导致的,在 ARP 包内部,分别有下面四个字段:
- sender mac
- sender ip
- target mac
- target ip
而在 ARP 包外部,则是 L2 层的以太网帧,分别有下面的字段:
- 源 MAC
- 目标 MAC
- 协议类型,这里 ARP 为 0x0806
- ARP 包内容
- FCS 帧校验码

所以,需要明白“target mac”和“目标 MAC”不是一种东西,也就理解上面的话了。
amiwrong123
2021-12-18 11:13:44 +08:00
@asilin #1
谢谢你的详细解答。就有一个点我不是很理解:
“免费”ARP 请求包并不能用来查看自己的 ip 地址有没有被别的机器抢占,这是“冲突探测”ARP 请求包的功能。

我知道 “冲突探测”ARP 请求包有这个功能,但是我感觉 “免费”ARP 请求包好像也能检测阿。

比如当你发了“免费”ARP 请求包后,却收到了 ARP 回应报文。(其实我是觉得 这两个包 都能检测 ip 冲突)
asilin
2021-12-18 16:51:10 +08:00
“免费”ARP 请求包会导致局域网内的主机 /交换机更新 ARP 缓存表,如果局域网已经有了一台机器拥有对应的 IP ,这个时候,你用“免费”ARP 请求包会导致对方无法上网,相当于你成了 ARP 内网劫持者。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/819384

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX