Windows XP会自动重新组装UDP碎片吗?

我有一个Windows应用程序接收和处理通过UDP传输的XML消息。 应用程序使用Windows“原始”套接字收集数据,因此整个第3层数据包是可见的。

最近我们碰到了一个让我难倒的问题。

如果XML消息(即,UDP分组)很大(即,> 1500字节),则按预期分割。 通常,这会导致XML处理器失败,因为它试图处理每个UDP数据包,就像它是一个完整的XML消息一样。 在这个发展阶段,这是一个已知的系统短缺。

在Windows 7上,这正是发生的事情。 碎片被接收和logging,但没有处理发生。 然而,在Windows XP上,可以看到相同的片段,XML处理器似乎处理一切都很好。

Windows XP会自动重新组装UDP碎片吗? 我想我可以期望这是一个正常的UDP套接字,但它不是一个“原始”套接字,IMO的行为。 此外,如果Windows XP上出现这种情况,为什么Windows 7上的行为不一样? 有没有办法来启用这个?

这听起来像是XML处理器获取UDP数据报的方式。 它根本不应该看数据包。 这是UDP堆栈的工作。

XML处理器应该要求UDP层重新组装UDP数据报。 将数据报分成数据包,然后将这些数据包重组为数据报是IP和UDP协议栈的工作。

显然,如果你使用原始套接字,UDP将会中断,如果你不复制这种行为。 但是不要使用原始套接字,使用UDP的方式来使用它。

当通过原始接口拦截数据包时,无论在IP重组之前还是之后获取数据包取决于许多系统参数,例如启用了哪些防火墙以及它们具有哪些规则。 如果在IP重新组装之后获得原始数据包,则您的代码“正常工作”。 但依靠这是打破。 如果不需要重新组装,则不会发生,并不总是需要。