为什么有些UDP包被阻塞?

在我们的组织中,我们有两台运行Windows XP的testing机器。 当试图testing一个roll-my-own UDP消息服务器时,我发现两者都可以接收小消息(在2k以下)就好了。 但是,当我testing发送大包到这两台机器,一个接收他们罚款,而另一个根本无法接收他们。 两台机器都有SP3,并且都closures了Windows防火墙,但仍有一台不能正常工作。 任何人都可以告诉我在哪里寻找任何可能阻止或限制Windows机器上的数据包大小? 谢谢。

UDP是一个无连接协议。 这大致意味着它的交付不能得到保证。 没有到达的原因几乎可以做任何事情。 你可能只是打到最大窗口大小,你的数据包被扔进“比特斗”。 你用什么来衡量数据包的大小? (你是发送wchar数据而不是char数据吗?(2字节vs 1字节每字符)通常窗口大小是4k左右…你会遇到2k字节的2k字符…

如果一切都失败了…挖出wireshark,看看实际上正在发生什么。

两个系统都在同一台交换机上吗? 如果是这样,那么通常不应该有任何下降。 如果他们在同一个交换机上,那么系统可能会监视/嗅探/ wireshark自己寻找可能的提示。

看看Wireshark两端。

另外,请查看NIC驱动程序的设置以及可能的NIC文档。 并不是每个NIC都允许64k数据包,有些使用低达6k数据包(也被称为“巨型帧”)会造成问题。

一般的build议:如果你尝试一些“新的”尝试保持其余的设置尽可能符合标准,以避免堆叠不同组件的微妙的错误。 在你的情况下,这将意味着确保一个1500字节的MTU,直到你确信你理解你的应用程序的发送和接收行为。