当UDP数据包的大小小于12个字节时,UDP数据包将被丢弃。 我怎么知道原因?

我陷入了一个以前从未听说过的问题。

我正在做一个在某个angular色动作中使用UDP数据包的在线游戏。 在我开发了udp模块后,似乎工作正常。 虽然我们大部分的团队成员都没有问题,但是一个是我老板的人告诉我这个模块有什么问题。

我已经调查了这个问题,最后我发现了这个事实:在他的电脑上,如果udp数据包大小小于12,那么这个数据包永远不会被传送到另一个主机。

以下是一些额外的信息:

  • 1〜11个字节的udp数据包被丢弃,12个字节和超过12个字节的数据包都可以。
  • 操作系统:Microsoft Windows Vista Business
  • NIC:Attansic L1千兆以太网10/100 / 1000Base-T控制器
  • WSASendTo返回TRUE。
  • 回环udp数据包工作正常。

你怎么看待这个问题? 你怎么看?是什么原因导致这个问题呢? 我应该为下一步的事业做些什么?

PS。 我不想填充所有数据包的长度高达12个字节。

Solutions Collecting From Web of "当UDP数据包的大小小于12个字节时,UDP数据包将被丢弃。 我怎么知道原因?"

只是为了得到一个非显而易见的答案:也许UDP校验和卸载在该卡上被破坏,即数据包被发送,但由接收器丢弃?

您可以使用Wireshark查看收到的数据包来检查这一点。

如果您已经检查过防火墙,防病毒,网络防火墙,网络入侵等。 读这个

对于UDP数据包ethernet_header(14字节)+ IPv4_header(最小20字节)+ UDP_header(8字节)= 42字节
现在,由于它少于64个字节或Linux上的60个字节,网络驱动程序会在发送数据包之前用(64-42 = 22)个零填充数据包,使其成为60个字节。

这是UDP数据包的最小长度。
理论上你可以发送0个数据字节的数据包,但还没有尝试过。

至于你的问题,它必须是一个操作系统的问题。 检查您网络的驱动手册或与制造商核实。 因为这不是偶然发生的。

REF:HTTP://www.freesoft.org/CIE/Course/Section4/8.htm
REF:HTTP://en.wikipedia.org/wiki/User_Datagram_Protocol

在个人电脑上运行Wireshark并在目标PC上运行。

日志是否显示udp数据包离开他的机器? 它显示它到达目标PC吗?

他的电脑和目的地之间有什么样的路由器硬件或交换机? 你可以删除它们,并通过交叉电缆连接两个? (或用膝上型计算机替换目的地,并用交叉电缆将其链接到他的PC?)

您是否删除了或至少在其计算机上列出了所有防病毒和防火墙产品,以及是否安装了Winsock LSP?

如果所有的12个字节或更少的数据包丢失或只是一些,你可以生成随机内容的数据包,看看它是在内容中的东西,而不是只是大小,这是造成这个问题。

假设您的问题是他的PC发送:首先,在有问题的PC上运行数据包嗅探器,看它是否到达NIC。 如果它在那里,在NIC或NIC驱动程序可能有问题。

接下来检查是否有正在运行的防火墙软件 尝试禁用它,看看会发生什么。

如果这不起作用,请用netsh winsock catalog reset清除所有Winsock分层服务提供程序。

如果这不起作用,我很难过:)

最后,你可能会找到同样问题的其他客户; 无论如何你可能要考虑这个解决方法。 尝试在连接上发送一些小尺寸的UDP数据包,如果它们始终无法通过,请启用填充解决方法。 对于探测包通过的主机,您不需要将其填充。

纯粹的猜想 :RTP是一个在UDP上发送的非常常见的包,它定义了一个12字节的头 。 我想知道一些网络软件是否认为更小的是一个畸形的RTP包并把它扔掉?