我正在尝试优化基于 UDP 的大型系统中的通信。通过优化,我的意思是尽量减少数据包的丢失。(是的,我知道 UDP 的固有限制,不建议使用其他协议)我们有几个 .exe,每个都有几个线程,并使用
setsockopt with SO_SNDBUF & SO_RCVBUF to increase to bufers.
我们已经经历过为许多套接字设置非常大的缓冲区会降低整体性能(更多的数据包丢失)但是如何监控这些增加的缓冲区大小的影响呢?. 特别是在接收端,我想看看是否有任何端口由于缺少缓冲区而被丢弃。
请建议如何做到这一点,(用户或内核模式下的Windbg,特殊程序,自知之明)
编辑:@EdChum:我已经使用过 WireShark,是的,将线路上的数据包与应用程序接收的数据包关联起来很痛苦。我见过几次数据包在网络上的情况,(由 Wireshark 捕获)但应用程序没有收到。那些丢失的数据包通常是一个小数据包到多播目的地,在一个大的单播数据包之后以非常小的时间间隔发送。单播的接收者丢失了多播,但其他人接收它。
我的怀疑是,XP 有时会在 NDIS 或 IP 层的某个地方遇到一些缓冲区不足,因此会默默地丢弃数据包。如果某处有柜台,我可以确认这一点。