我陷入了一个以前从未听说过的问题。
我正在做一个在某个angular色动作中使用UDP数据包的在线游戏。 在我开发了udp模块后,似乎工作正常。 虽然我们大部分的团队成员都没有问题,但是一个是我老板的人告诉我这个模块有什么问题。
我已经调查了这个问题,最后我发现了这个事实:在他的电脑上,如果udp数据包大小小于12,那么这个数据包永远不会被传送到另一个主机。
以下是一些额外的信息:
你怎么看待这个问题? 你怎么看?是什么原因导致这个问题呢? 我应该为下一步的事业做些什么?
PS。 我不想填充所有数据包的长度高达12个字节。
只是为了得到一个非显而易见的答案:也许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包并把它扔掉?