3

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

setsockopt with SO_SNDBUF  & SO_RCVBUF to increase to bufers. 

我们已经经历过为许多套接字设置非常大的缓冲区会降低整体性能(更多的数据包丢失)但是如何监控这些增加的缓冲区大小的影响呢?. 特别是在接收端,我想看看是否有任何端口由于缺少缓冲区而被丢弃。

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

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

我的怀疑是,XP 有时会在 NDIS 或 IP 层的某个地方遇到一些缓冲区不足,因此会默默地丢弃数据包。如果某处有柜台,我可以确认这一点。

4

1 回答 1

1

不知道如何使用 WinDbg 执行此操作,但我会使用NetMonWireShark来监视数据包并查看是否有任何被丢弃,这将是痛苦的,具体取决于重现的难易程度,您需要学习如何过滤数据包,以便显示器显示您感兴趣的内容,但是这两个应用程序的帮助都非常有用。

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

于 2012-07-05T15:42:50.370 回答