c – 如何调试丢包?

前端之家收集整理的这篇文章主要介绍了c – 如何调试丢包?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我写了一个C应用程序(在Linux上运行),它提供大约400 kbps的RTP流.对于大多数目的地,这工作正常,但一些目的地经验包丢失.有问题的目的地似乎有一个较慢的连接,但它应该足够快到我发送的流.

由于这些目的地能够为其他应用程序接收类似的RTP流而不丢包,我的应用程序可能有问题.

我已经验证了一些事情:
– 在tcpdump中,我看到所有RTP数据包都在发送机器上传
– 有一个UDP发送缓冲区(我试过64KB到300KB之间的大小)
– RTP数据包大多数保持在1400字节以下,以避免碎片

发送应用程序可以做些什么来最小化丢包的可能性以及调试这种情况的最佳方法是什么?

最佳答案
不要发送大块突发的数据包.

数据包丢失通常是由数据包缓冲区大小有限的慢速路由器引起的.慢速路由器可能能够处理1 Mbps就好了如果它有时间发送出10个数据包然后再接收10个数据包,但如果100 Mbps发送方向它发送了大量50个数据包它就别无选择但只能掉线其中40个.

尝试扩展发送,以便您只写出每个时间段内写入的内容.如果你必须每五分钟写一个数据包,那就这样做,而不是每秒写5个数据包.

猜你在找的Linux相关文章