UDP数据包在某个PC中的大小小于12字节时被丢弃。我怎么弄清楚原因?

时间:2011-01-11 07:49:22

标签: c++ windows udp tcp winsock

我遇到了一个以前从未听说过的问题。

我正在制作一个在特定角色动作中使用UDP数据包的在线游戏。在我开发了udp模块后,它似乎工作正常。虽然我们的大多数团队成员都没有问题,但是作为我老板的男人告诉我这个模块有问题。

我已经调查了这个问题,最后我发现......在他的PC上,如果udp数据包大小小于12,数据包永远不会被传送到其他主机。

以下是一些其他信息:

  • 丢弃1~11个字节的udp报文,12个字节和12个字节以上的报文都可以。
  • O / S:Microsoft Windows Vista Business
  • NIC:Attansic L1千兆以太网10/100 / 1000Base-T控制器
  • WSASendTo返回TRUE。
  • loopback udp数据包工作正常。
你怎么看待这个问题?你怎么想......导致这个问题的原因是什么? 我该怎样做才能为这个事业做下一步呢?

PS。我不想填充,这使得所有数据包的长度最多为12个字节。

5 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

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

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

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

至于你的问题,它必须是操作系统问题。检查网络的驱动程序手册或与制造商联系。因为这不是发生的事情。

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

答案 2 :(得分:2)

在PC和目标PC上运行Wireshark。

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

他的电脑和目的地之间有哪种路由器硬件或交换机?你可以删除它们并用交叉电缆连接它们吗? (或者用笔记本电脑替换目的地并用交叉电缆将其链接到他的电脑上?)

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

是否所有12字节或更少的数据包都被丢弃或只是一些,您是否可以生成具有随机内容的数据包,并查看它是否是内容中的某些内容,而不仅仅是引起问题的大小。

答案 3 :(得分:1)

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

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

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

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

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

答案 4 :(得分:1)

纯猜想:RTP是在UDP上发送的一个非常常见的数据包,定义了12 byte header。我想知道是否有一层网络软件假设任何较小的RTP数据包都是格式不正确并丢弃它?