linux - 大的发送套接字缓冲区大小导致 UDP 数据包丢失
问题描述
操作系统:Centos7.6.10 内核:3.10.0-957.el7.x86_64 我用netperf测试UDP。当我设置发送套接字大小8129920;接收套接字大小212992时,UDP数据包丢失很多。只有大数据包才会在这个问题上。两台电脑的netperf测试,然后我尝试tcpdump,我发现发送的UDP数据不完整,总是缺少一个IP帧,以至于对方无法合并这些帧。tcpdump 结果我在发送方 PC 上使用 dropwatch 来查找内核问题,我找到了这些
1581 drops at brk_limit+369bd232 (0xffffffffc0437232)
1 drops at skb_queue_purge+18 (0xffffffff88a235d8)
1632 drops at brk_limit+369bd232 (0xffffffffc0437232)
1682 drops at brk_limit+369bd232 (0xffffffffc0437232)
1732 drops at brk_limit+369bd232 (0xffffffffc0437232)
1 drops at brk_limit+369bd232 (0xffffffffc0437232)
1783 drops at brk_limit+369bd232 (0xffffffffc0437232)
1834 drops at brk_limit+369bd232 (0xffffffffc0437232)
1882 drops at brk_limit+369bd232 (0xffffffffc0437232)
2 drops at brk_limit+369bd232 (0xffffffffc0437232)
1934 drops at brk_limit+369bd232 (0xffffffffc0437232)
1984 drops at brk_limit+369bd232 (0xffffffffc0437232)
2 drops at brk_limit+369bd232 (0xffffffffc0437232)
2036 drops at brk_limit+369bd232 (0xffffffffc0437232)
2087 drops at brk_limit+369bd232 (0xffffffffc0437232)
2135 drops at brk_limit+369bd232 (0xffffffffc0437232)
4 drops at brk_limit+369bd232 (0xffffffffc0437232)
2187 drops at brk_limit+369bd232 (0xffffffffc0437232)
2237 drops at brk_limit+369bd232 (0xffffffffc0437232)
2289 drops at brk_limit+369bd232 (0xffffffffc0437232)
2338 drops at brk_limit+369bd232 (0xffffffffc0437232)
2 drops at brk_limit+369bd232 (0xffffffffc0437232)
2390 drops at brk_limit+369bd232 (0xffffffffc0437232)
2439 drops at brk_limit+369bd232 (0xffffffffc0437232)
3 drops at brk_limit+369bd232 (0xffffffffc0437232)
2492 drops at brk_limit+369bd232 (0xffffffffc0437232)
2544 drops at brk_limit+369bd232 (0xffffffffc0437232)
2595 drops at brk_limit+369bd232 (0xffffffffc0437232)
2641 drops at brk_limit+369bd232 (0xffffffffc0437232)
2694 drops at brk_limit+369bd232 (0xffffffffc0437232)
2745 drops at brk_limit+369bd232 (0xffffffffc0437232)
2 drops at udp4_lib_rcv+b9 (0xffffffff88ab5139)
2795 drops at brk_limit+369bd232 (0xffffffffc0437232)
2846 drops at brk_limit+369bd232 (0xffffffffc0437232)
2898 drops at brk_limit+369bd232 (0xffffffffc0437232)
2949 drops at brk_limit+369bd232 (0xffffffffc0437232)
3000 drops at brk_limit+369bd232 (0xffffffffc0437232)
251 drops at __brk_limit+369bd232 (0xffffffffc0437232)
6 drops at icmp_rcv+125 (0xffffffff88aba7a5)**
网卡信息我看不懂这个现象,希望大家能帮我解决这个问题,谢谢!
解决方案
这是预期的行为。假设您发送一个 65,500 字节的数据报,而您的最大数据包大小为 1,500 字节。这意味着每个数据报需要 44 个数据包。现在说你的丢包率是 1%。这意味着您的数据报丢失率为 35%。哎哟。
不要使用这么大的数据报。或者不要使用UDP。
推荐阅读
- javascript - 如何从 React 组件中提取通用逻辑(但通用逻辑是使用 setState)
- ios - 滚动时电子节目指南视图如何更新?
- javascript - 所需的功能是 javascriptenabled 已弃用。我们如何使用 Internet Explorer 驱动程序 selenium 中启用的 java 脚本
- jsgrid - jsGrid不显示表格
- hybris - 如何同步产品的在线日期,而不是变体的在线日期?
- windows - 如何在命令行上将文件的内容作为参数传递?
- android - 如何在android上检测屏幕覆盖
- android - 如何以编程方式获取android cpu温度
- hadoop - Nutch + Solr - 清洁需要很长时间才能完成
- generics - kotlin,可以调用 null.also{}