如何在Windows XP中监视UDP缓冲区

如何在Windows XP中监视UDP缓冲区,windows,windows-xp,udp,windbg,winsock,Windows,Windows Xp,Udp,Windbg,Winsock,我正在尝试优化基于UDP的大型系统中的通信。 通过优化,我的意思是最小化数据包的丢失。 (是的,我知道UDP的固有限制,不建议使用其他协议) 我们有几个.exe,每个都有几个线程,并使用 setsockopt with SO_SNDBUF & SO_RCVBUF to increase to bufers. 我们经历过为许多套接字设置非常大的缓冲区会降低总体性能(更多的数据包丢失) 但是如何监控这些增加的缓冲区大小的影响呢。特别是在接收端,我想看看是否有任何端口收到消息,因为缺少缓

我正在尝试优化基于UDP的大型系统中的通信。 通过优化,我的意思是最小化数据包的丢失。 (是的,我知道UDP的固有限制,不建议使用其他协议) 我们有几个.exe,每个都有几个线程,并使用

setsockopt with SO_SNDBUF  & SO_RCVBUF to increase to bufers. 
我们经历过为许多套接字设置非常大的缓冲区会降低总体性能(更多的数据包丢失) 但是如何监控这些增加的缓冲区大小的影响呢。特别是在接收端,我想看看是否有任何端口收到消息,因为缺少缓冲区而被丢弃

请建议如何做到这一点, (用户或内核模式下的Windbg,特殊程序,自行编写)

编辑: @埃德彻姆: 我已经使用过WireShark,是的,将线上的数据包与应用程序接收到的数据包关联起来是很痛苦的。我也见过一些情况,数据包在电线上(由Wireshark捕获),但应用程序没有收到。 丢失的数据包通常是发送到多播目的地的一个小数据包,该数据包在一个大的单播数据包之后以很小的时间间隔发送。单播的接收者释放多播,但其他人接收它


我怀疑XP有时会在NDIS或IP层的某个地方出现缓冲区不足的情况,因此会悄悄地丢弃数据包。如果某个地方有计数器,我可以对此进行确认。

不确定如何使用WinDbg进行此操作,但我会使用或来监视数据包,并查看是否有数据包被丢弃,这将是痛苦的,取决于它是多么容易复制,你将需要学习如何过滤数据包,以便显示你感兴趣的内容,但这两个应用程序的帮助是非常有用的


您必须侦听物理套接字,而不是环回地址才能监视数据包。

Windows性能工具包中的xperf.exe可能会有所帮助。可能有一个名为“NETWORKTRACE”的内核标志值得关注。此外,在我的Win7框中,“xperf-providers i”显示了TCP/IP、Winsock和AFD的用户模式ETW提供程序。