问题标签 [packet-loss]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
15435 浏览

linux - Linux内核丢弃UDP数据包

我有一个通过多播发送 UDP 数据包的服务器和一些列出这些多播数据包的客户端。每个数据包的大小固定为 1040 Bytes,服务器发送的整个数据大小为 3GByte。

我的环境如下:

1 Gbit 以太网络

40 个节点、1 个发送节点和 39 个接收节点。所有节点具有相同的硬件配置:2 个 AMD CPU,每个 CPU 有 2 个核心 @2,6GHz

在客户端,一个线程读取套接字并将数据放入队列。一个额外的线程从队列中弹出数据并进行一些轻量级的处理。

在多播传输期间,我发现节点侧的丢包率为 30%。通过观察 netstat –su 统计数据,我可以说客户端应用程序丢失的数据包等于 netstat 输出中的 RcvbufErrors 值。

这意味着所有丢失的数据包都被操作系统丢弃,因为套接字缓冲区已满,但我不明白为什么捕获线程无法及时读取缓冲区。在传输过程中,4 个核心中的 2 个被 75% 使用,其余的处于休眠状态。我是唯一使用这些节点的人,我会假设这种机器处理 1Gbit 带宽没有问题。我已经做了一些优化,通过为amd cpus添加g++编译器标志,这将丢包率降低到10%,但在我看来仍然太高了。

我当然知道UDP不可靠,我有自己的修正协议。

我没有任何管理权限,因此我无法更改系统参数。

任何提示如何提高性能?

编辑:我通过使用 2 个正在读取套接字的线程解决了这个问题。recv 套接字缓冲区有时仍会变满。但平均跌幅在 1% 以下,因此处理起来不成问题。

0 投票
1 回答
5012 浏览

mysql - 随机“在‘读取初始通信数据包’时丢失与 MySQL 服务器的连接,系统错误:110”

我有一个远程连接到数据库的网站,这种情况已经持续了一年多,我没有遇到任何问题。

但是,今天浏览网站时,我注意到 mysql 连接似乎超时了。有时页面加载得非常好,但有时它会生成以下警告。

由于它的零星性质,我有点不知所措。我可以控制数据库服务器和托管服务器,我没有更改任何设置。

有任何想法吗?

0 投票
4 回答
2643 浏览

udp - 合并UDP数据包?

将多个 UDP 数据包组合成一个而不是一个接一个地发送它们有什么好处?我知道如果大包损坏了,那么我会丢失所有这些,但是将它们全部一起发送是否可能有一些好处?例如大的丢失的机会较低?

0 投票
2 回答
20674 浏览

tcp - 数据包丢失和数据包重复

我试图找出数据包丢失和数据包重复问题之间的区别。有谁知道“数据包重复”是什么意思?TCP检测到丢包时,和重传包一样吗?

0 投票
0 回答
5652 浏览

linux-kernel - UDP 数据包突发丢失和 `SndbufErrors` 增加

我有一个服务器应用程序,它以 200Mbps 的速度发送 UDP 数据包。输出以太网接口为 1000Mbps。但是 UDP 数据包会在不规则的时间间隔内突发丢失。我注意到只要发生丢包问题,该字段就会增加SndbufErrors。如果UDP数据包被发送到接口,/proc/net/snmp则不存在丢包。loopback

没有任何错误返回udp.send

我已经深入研究了 Linux 内核,但是当我到达路由子系统时我就不见了。

是什么SndbufErrors意思?为什么数量会增加?

0 投票
1 回答
3435 浏览

objective-c - 核心音频:仅对于 PCM 音频,零等于静音吗?

我正在尝试创建一个基本算法来隐藏核心音频的丢包。我只是想用静音替换丢失的数据。在学习核心音频的书中,作者说在无损PCM中,零表示静音。我想知道我是否正在播放 VBR(即压缩数据),是否也可以将零用于静音?

在我现有的代码中......当我将零插入音频队列时......它突然卡住了(即它不再释放音频队列回调中消耗的数据......)我想知道为什么

0 投票
1 回答
1224 浏览

c++ - Linux 网络堆栈何时丢弃收到的 RTP 数据包?

我正在调试接收 RTP 的 C++ 程序的丢包问题。在我的程序运行了很长时间接收大量 RTP 数据后,它开始丢失数据包。

使用 Wireshark 进行跟踪会显示丢失的数据包,但我的应用程序从未收到它们。似乎网络堆栈在将它们交付给应用程序之前将它们丢弃。重新启动我的应用程序后,一切都恢复正常。

为了产生错误情况,我用 RTP 使机器超载,当时丢包发生,这是有充分理由的。但是即使在我停止过载并开始以中等速率发送之后,仍然会发生丢包,我必须重新启动我的应用程序才能再次接收所有数据。

这是 Linux 接收缓冲区处理的问题吗?我可以检查哪些 Linux 统计信息来查看那些丢失的数据包去了哪里?

0 投票
4 回答
35164 浏览

udp - 最可靠和最有效的udp数据包大小?

通过 UDP 发送大量小数据包会占用更多资源(cpu、zlib 压缩等)。我在这里读到,通过 UDP 发送一个约 65kBYTE 的大数据包可能会失败,所以我认为发送大量较小的数据包会更频繁地成功,但随之而来的是使用更多处理能力的计算开销(或者至少这就是我我假设)。问题基本上是这样的;发送最大成功数据包并将计算降至最低的最佳方案是什么?是否有在大多数情况下都有效的特定尺寸?我将 Erlang 用于服务器,将 Enet 用于客户端(用 C++ 编写)。也使用 Zlib 压缩,我向每个客户端发送相同的数据包(我猜是广播这个术语)。

0 投票
1 回答
2858 浏览

iptables - 启用丢包的命令

我正在寻找一种启用丢包的好方法。我遇到了 ubuntu 的这个命令。该命令应该使接口 wlan11 丢失它接收到的数据包的 10% (0.10)。

这个命令好用还是我可以使用更好/简单的命令/方法。

谢谢你。

0 投票
3 回答
31164 浏览

networking - 丢失 UDP 数据包的可能性有多大?

好的,所以我正在为我的网络课程编程,我必须使用 UDP 在 Java 中实现一个项目。我们正在实现一个 HTTP 服务器和客户端以及一个以指定概率破坏数据包的“gremlin”函数。HTTP 服务器必须在应用层将一个大文件分成多个段,然后通过 UDP 发送给客户端。客户端必须在应用层重新组装接收到的段。然而,我想知道的是,如果 UDP 根据定义是不可靠的,为什么我必须在这里模拟不可靠性?

我的第一个想法是,也许这仅仅是因为我的导师在我们的案例中计算,客户端和服务器都将在同一台机器上运行,并且即使通过 UDP,文件也会从一个进程传输到另一个进程 100% 可靠,因为它位于同一台计算机上的两个进程之间。

这使我首先质疑如果服务器和客户端被保证是同一物理机器上的两个进程,UDP 是否真的会丢失数据包、损坏数据包或无序传递数据包,保证严格路由仅在本地主机上,这样它就不会通过网络出去。

我还想知道,一般来说,对于给定的数据包,UDP 在用于促进​​两个地理位置相当的主机之间通过开放互联网进行通信时丢弃/损坏/或乱序传递数据包的大致概率是多少彼此相距很远(比如说类似于美国普通宽带用户与 Google 的 CDN 之一之间的路由)?我主要只是想大致了解通过 UDP 通信时所经历的情况,它是否会丢弃/损坏/错误排序大约 25% 的数据包,或者更像是大约 0.001% 的数据包数据包?

非常感谢任何可以为我解答这些问题的人。