【发布时间】: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