wxh_无香花自开 2024-03-05 16:26 采纳率: 0%
浏览 7

ARP不同网段的IP为什么能正常响应

Linux环境下,默认网络命名空间内的网卡eth0地址是10.0.0.2/24,执行以下命令
ip netns add test1
ip link add br0 type bridge
ip link set br0 up
ip link add veth00 type veth peer name veth01
ip link set veth01 up
ip link set veth01 master br0
ip link set veth00 netns test1
ip netns exec test1 ip link set veth00 up
ip netns exec test1 ip a a 192.168.0.2/24 dev veth00
ip netns exec test1 ip r a default dev veth00
ip a a 192.168.0.1/24 dev br0
此时执行以下ping命令
ip netns exec test1 ping 10.0.0.2 正常ping通
这里源IP跟目标IP不再同一网段,请问为什么能ping通?
还有通过tcpdump抓包显示ARP响应的10.0.0.2的mac地址是虚拟网桥br0的mac地址,这又是为什么?恳请解答,如果可以,帮忙推荐点教程

  • 写回答

3条回答 默认 最新

  • GISer Liu 2024-03-05 16:27
    关注

    该回答引用自GPT-3.5,由博主GISer Liu编写:

    根据问题描述,我们首先来分析一下为什么在不同网段的情况下仍然可以正常通信,并且 ARP 请求响应中的 MAC 地址是虚拟网桥 br0 的 MAC 地址。

    1. 通信原理分析:
    • 当你在 Linux 环境中创建了一个网桥 br0,并将 veth01 添加到了该网桥中,实际上就是将 veth01 与物理网卡 eth0 连接在了一起。
    • 而 veth00 则被放置在了一个名为 test1 的网络命名空间中,并配置了一个与 br0 在不同网段的 IP 地址(192.168.0.2/24)。
    • 当你执行 ping 10.0.0.2 的时候,由于 veth01 与 eth0 在同一网段,因此 ARP 请求会发送到 eth0 上,eth0 会响应自己的 MAC 地址给 test1 命名空间中的 veth00,此时 ARP 表中会更新 10.0.0.2 对应的 MAC 地址为 eth0 的 MAC 地址。
    • 然后,数据包被发送到了 eth0,由于 veth01 已经加入了 br0 网桥,所以数据包会从 eth0 经过 br0 转发到 test1 命名空间中的 veth00,从而实现了不同网段的通信。
    1. ARP 响应中的 MAC 地址为什么是虚拟网桥 br0 的 MAC 地址:
    • 当你执行 ping 10.0.0.2 的时候,在不同网段的情况下,ARP 请求会发送到默认网关,即 br0 的 IP 地址 192.168.0.1。
    • 而虚拟网桥 br0 的 MAC 地址会被用作 ARP 响应的源 MAC 地址,因为 ARP 响应应该返回给 ARP 请求的源地址,而在这里,源地址是 br0 的 IP 地址对应的 MAC 地址。
      因此,你可以通过创建虚拟网桥并将网卡加入网桥,来实现不同网段间的通信,同时 ARP 响应中的 MAC 地址是虚拟网桥的 MAC 地址是符合预期的。
      至于推荐教程,你可以参考 Linux 网桥的相关文档或教程,如《Linux Advanced Routing & Traffic Control
      HOWTO》中关于网桥的部分,或者在 Linux 官方文档中寻找关于网络命名空间和虚拟网桥的教程。

    如果该回答解决了您的问题,请采纳!如果没有,请参考以下方案进行修订

    用户答题指南

    评论

报告相同问题?

问题事件

  • 创建了问题 3月5日

悬赏问题

  • ¥15 求京东批量付款能替代天诚
  • ¥15 slaris 系统断电后,重新开机后一直自动重启
  • ¥15 51寻迹小车定点寻迹
  • ¥15 谁能帮我看看这拒稿理由啥意思啊阿啊
  • ¥15 关于vue2中methods使用call修改this指向的问题
  • ¥15 idea自动补全键位冲突
  • ¥15 请教一下写代码,代码好难
  • ¥15 iis10中如何阻止别人网站重定向到我的网站
  • ¥15 滑块验证码移动速度不一致问题
  • ¥15 Utunbu中vscode下cern root工作台中写的程序root的头文件无法包含