【问题标题】:UdpClient.Send broadcasts to right AND wrong interfaceUdpClient.Send 广播到正确和错误的接口
【发布时间】:2015-04-06 13:26:30
【问题描述】:

我有两个接口 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

【问题讨论】:

  • 你确定你没有误解wireshark的输出吗?您可以发布输出的屏幕截图吗?
  • 我添加了屏幕截图和数据包转储。正如您在转储中看到的那样,100% 确定。
  • 阅读stackoverflow.com/questions/683624/…后,我改进了代码。以前数据包的目的地是 255.255.255.255。现在它更具体了,比如 10.255.255.255。而且由于行为没有改变,所以没有以前那么有意义了……
  • 您可以使用procmon 再看看。或者编写一个快速应用程序来实际接收 udp 数据包,看看它是否真的发送重复。已经有一段时间了,但我之前在wireshark中遇到过重复捕获问题。
  • 我检查了三次。数据包肯定在电线上:)

标签: c# networking udp broadcast ipv4


【解决方案1】:

我认为艾伦可能是对的。查看传出数据包的 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# 方面的专家,但我看不出它为什么要发送两个数据报,所以我的假设是您的两个 NIC 都在交换机上的同一个 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它。另一帧也会发生同样的事情。

【讨论】:

  • 是的,就是这样。用于此测试的 Wifi-Hotspot (10.0.0.1) 已连接到内部 LAN ...
猜你喜欢
  • 2016-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-02
  • 2023-03-10
  • 2014-05-07
  • 1970-01-01
相关资源
最近更新 更多