我有两个接口IF-A:10.0.0.1和IF-B:172.20.29.152。
向两个接口发送广播应生成2个数据包:
var udp = new UdpClient();
var target1 = IPAddress.Parse("10.255.255.255");
var target2 = IPAddress.Parse("172.20.255.255");
udp.Send(new byte[0], 0, new IPEndPoint(target1, 80));
udp.Send(new byte[0], 0, new IPEndPoint(target2, 80));
我跑了wireshark,看到4个数据包从我的电脑中消失了。 我发现,每次调用“udpClient.Send”都会创建两个相同的数据包 - 每个接口一个:
// First Send()
IF-A: from 10.0.0.1 to 10.255.255.255 (OK)
IF-B: from 10.0.0.1 to 10.255.255.255 (WTF?)
// Second Send()
IF-A: from 172.20.29.152 to 172.20.255.255 (WTF?)
IF-B: from 172.20.29.152 to 172.20.255.255 (OK)
这对我来说毫无意义。
详细信息:
数据包转储(4个数据包):http://pastebin.com/i71NZhaU
答案 0 :(得分:0)
我认为Eren可能是对的。查看传出数据包的src mac地址。 10.0.0.1中的两个帧都有一个src mac 60:67:20:ca:a6:2c
,而来自172.20.29.152的帧都有d4:be:d9:84:43:b8
的src mac。
Ethernet II, Src: IntelCor_ca:a6:2c (60:67:20:ca:a6:2c), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
Internet Protocol Version 4, Src: 10.0.0.1 (10.0.0.1), Dst: 10.255.255.255 (10.255.255.255)
Ethernet II, Src: DellInc_84:43:b8 (d4:be:d9:84:43:b8), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
Internet Protocol Version 4, Src: 172.20.29.152 (172.20.29.152), Dst: 172.20.255.255 (172.20.255.255)
Ethernet II, Src: DellInc_84:43:b8 (d4:be:d9:84:43:b8), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
Internet Protocol Version 4, Src: 172.20.29.152 (172.20.29.152), Dst: 172.20.255.255 (172.20.255.255)
Ethernet II, Src: IntelCor_ca:a6:2c (60:67:20:ca:a6:2c), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
Internet Protocol Version 4, Src: 10.0.0.1 (10.0.0.1), Dst: 10.255.255.255 (10.255.255.255)
我不是C#的专家,但我认为没有理由为什么会发送两个数据报,所以我的假设是你的两个网卡都在交换机上的同一个VLAN中,而你在转储中看到的前两个帧是传出帧,后两个是传入帧。
因此,当您将帧从60:67:20:ca:a6:2c
(接口0与转储中的10.0.0.1)发送到ff:ff:ff:ff:ff:ff
时,交换机将在同一个VLAN中的所有接口上转发该帧,但收到的帧除外框架上。它不会查看IP地址,因此如果连接到您的接口的端口d4:be:d9:84:43:b8
(转储中的接口1与172.20.29.152)配置为与其他接口位于同一个VLAN中,您将收到它的框架。对于另一个框架也会发生同样的事情。