V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
amiwrong123
V2EX  ›  程序员

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

  •  
  •   amiwrong123 · 2021-12-01 20:31:24 +08:00 · 923 次点击
    这是一个创建于 1117 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    • arp 协议的字段里,目的 ip 和 源 ip 都是一样的(这就是 免费 arp 的定义)
    • 以太网帧的 目的 mac 地址,都是 广播 mac 地址

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

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

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

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

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

    3 条回复    2021-12-18 16:51:10 +08:00
    asilin
        1
    asilin  
       2021-12-16 09:57:29 +08:00   ❤️ 1
    第一种 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
        2
    amiwrong123  
    OP
       2021-12-18 11:13:44 +08:00
    @asilin #1
    谢谢你的详细解答。就有一个点我不是很理解:
    “免费”ARP 请求包并不能用来查看自己的 ip 地址有没有被别的机器抢占,这是“冲突探测”ARP 请求包的功能。

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

    比如当你发了“免费”ARP 请求包后,却收到了 ARP 回应报文。(其实我是觉得 这两个包 都能检测 ip 冲突)
    asilin
        3
    asilin  
       2021-12-18 16:51:10 +08:00   ❤️ 1
    “免费”ARP 请求包会导致局域网内的主机 /交换机更新 ARP 缓存表,如果局域网已经有了一台机器拥有对应的 IP ,这个时候,你用“免费”ARP 请求包会导致对方无法上网,相当于你成了 ARP 内网劫持者。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2039 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 16:12 · PVG 00:12 · LAX 08:12 · JFK 11:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.