假设主机中有两个接口属于同一子网,连接到普通的 L2/L3 交换机端口,该端口具有单个 VLAN,接口 IP 为 10.0.0.1。
nxge0 (10.0.0.201) (00:14:4f:fb:d7:af) --> ex0/1
nxge1 (10.0.0.202) (00:14:4f:fb:dbe:91) --> ex0/2
主机中的路由表表明,对于所有目的地为 10.0.0.0/24 的数据包,首先使用 nxge0 接口,然后使用 nxge1。因此,所有到 10.0.0.0/24 的数据包都将从 nxge0 接口发出。假设有人从交换机 ping 到 10.0.0.202。首先,交换机将从 ARP 回复中了解 10.0.0.202 的 mac 地址。然后它将使用目标 mac 作为 00:14:4f:fb:dbe:91 和 ICMP 回显请求构建一个数据包。数据包到达主机,主机发送 ICMP 回显回复。现在有趣的部分是数据包将具有源 mac 地址 (00:14:4f:fb:d7:af),因为它是从 nxge0 接口发出的。
在交换机端,我们看到 ping 成功。上述情况对任何协议来说都是问题吗?我的理解正确吗?谢谢你的帮助。
答案1
一种令人讨厌的情况是,当两个接口的链接速度不同,或意味着要作为调整流量的手段(管理接口与工作负载接口,通常是个好主意!)...对于这种情况,Linux 中有 sysctl 参数可以修改 arp 行为(如果是不同的子网 - 否则你仍然会感到惊讶,因为默认行为通常是对主机在任何接口上的任何地址回答 arp!).. 相同的子网甚至更加困难,因为正如您所发现的,路由决策是模棱两可的;您需要源路由。
答案2
ARP(地址解析协议)协议将识别数据包内的 MAC 地址并通知服务器,应该就是这样,我没有看到任何问题,我的意思是,协议方面。
我发现这个错误涉及类似的情况(https://www.nsnam.org/bugzilla/show_bug.cgi?id=1202),但看起来它只在非常特殊的情况下才会显现出来。