树荫下的停留 2023-05-24 09:50 采纳率: 100%
浏览 17
已结题

Linux作为gw时的arp细节?

vm1:eth0=192.168.1.10/24, eth1=192.168.56.10/24
vm2:eth0=192.168.1.11/24
问几个关于本地网络最本质的问题:

  1. 为什么在vm1本地上ping自己的地址,不管是ping 1.10还是56.10, tcpdump -p icmp 都收不到任何流量?

  2. 理论上来说这俩网卡属于2个子网,那么ARP 层面需要网关处理吗,ARP层面是怎么获取的呢,也就是说smac和dmac分别是啥呢,截取不到所以也没法看到

  3. 在vm2上没加指定路由的情况下,从vm2直接ping 192.168.56.10并不通,但是为什么可以直接arping 192.168.56.10呢,得到的响应告诉vm1 192.168.56.104的mac地址你写我192.168.1.10的mac地址就行。这里的arp代理过程是怎么样的呢,跟实际的router有什么区别呢?加上路由后,vm2 ping 56.10时
    下面三段的smac和dmac分别是怎么样呢?
    a、vm2.eth0--->vm1.eth0: smac=vm2.eth0.mac dmac=vm1.eth0.mac?
    b、vm1.eth0--->vm1.eth1: smac and dmac? 我怎么觉得只需要经过路由表,然后就在三层被内核送到vm1.eth1网卡了,还需要普通的以太网帧吗
    c、返回的时候呢?

  • 写回答

1条回答 默认 最新

  • AiENG_07 2023-05-24 10:58
    关注

    关于第一个问题,因为ping自己的地址不需要进行ARP操作,因为不需要知道自己的MAC地址,也就不存在在ARP表中。此外,因为在本机上进行ping操作,所以在网络层面实际上是调用了本地的协议栈,因此不会有经过物理网卡的流量。

    对于第二个问题,如果vm2直接ping 192.168.56.10并不通,但是可以直接arping 192.168.56.10,这是因为当vm2的ARP请求到达vm1时,vm1会将自己的MAC地址作为响应返回给vm2,而不需要知道vm2的网关,这就是ARP代理的过程。而加上路由后,vm2 ping 56.10时,根据路由表信息,将在vm1.eth0和vm1.eth1之间进行路由选择,如果是在同一网段内,则不需要经过路由器,直接以MAC地址作为目标地址进行通信。

    对于第三个问题,如果是在同一网段内,那么a中vm1.eth0的MAC地址和vm2.eth0的MAC地址应该分别是vm1.eth0的MAC地址和vm2.eth0的MAC地址;在b中,smac应该是vm1.eth0的MAC地址,dmac应该是vm1.eth1的MAC地址,因为在VM1上面需要经过以太网帧进行转发;在c中,smac应该是vm1.eth1的MAC地址,dmac应该是vm1.eth0的MAC地址,因为返回数据时需要经过以太网帧进行转发。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 1月23日
  • 已采纳回答 1月15日
  • 创建了问题 5月24日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度