通过UDP发送大量数据包会占用更多资源(cpu,zlib压缩等).我在这里读到,通过UDP发送一个大约65kBYTE的数据包可能会失败所以我认为发送大量较小的数据包会更频繁地成功,但随后会产生使用更多处理能力的计算开销(或者至少就是我的我假设).问题基本上是这样的; 发送最大成功数据包并将计算量降至最低的最佳方案是什么?是否有特定尺寸可以在大多数时间使用?我使用Erlang作为服务器,使用Enet作为客户端(用c ++编写).也使用Zlib压缩,我向每个客户端发送相同的数据包(广播是我猜的术语).
好的,所以我正在为我的网络课程编程,我必须使用UDP在Java中实现一个项目.我们正在实现一个HTTP服务器和客户端以及一个以特定概率破坏数据包的'gremlin'函数.HTTP服务器必须将大文件分成多个段,在应用层通过UDP发送到客户端.客户端必须在应用层重新组合收到的段.但我想知道的是,如果UDP根据定义不可靠,为什么我必须在这里模拟不可靠性?
我的第一个想法是,也许只是因为我的导师在我们的情况下计算,客户端和服务器都将在同一台机器上运行,并且文件将从一个进程转移到另一个进程100%可靠甚至通过UDP,因为它是在同一台计算机上的两个进程之间.
这使我怀疑是否UDP,失去一个包,损坏的数据包,或提供其无序如果服务器和客户端是在同一台机器上的两个进程和它没有在实际的网络出去.
我也想知道实际丢失数据包的机会是什么,让它损坏,或者实际上它们在现实中无序发送通常会在两个地理位置较远的主机之间通过互联网.
非常感谢任何可以为我解释这些问题的人.
我正在尝试创建一个基本算法,为核心音频进行数据包丢失隐藏.我只想用沉默替换丢失的数据..在学习核心音频的书中,作者说在无损PCM中,零意味着沉默.我想知道我是否正在播放VBR(即压缩数据),是否也会将零置于静音状态?
在我现有的代码中..当我将零插入音频队列时...它突然堵塞(即它不再释放音频队列回调中消耗的数据..)我想知道为什么
我试图找出丢包和数据包重复问题之间的区别.有谁知道'数据包重复'到底是什么?当在TCP中检测到丢失时,它是否与重新发送数据包相同?
根据Kafka的commitTransaction
文档,如果在一定时间内没有收到响应,commitTransaction
将会失败TimeoutException
请注意,如果在 max.block.ms 到期之前无法提交事务,则此方法将引发 TimeoutException。此外,如果中断,它将引发 InterruptException。在任何一种情况下重试都是安全的,但不可能尝试不同的操作(例如 abortTransaction),因为提交可能已经在完成过程中。如果不重试,唯一的选择是关闭生产者。
考虑一个应用程序,其中 Kafka 生产者发送一组记录作为事务 A。
记录成功发送到主题后,Kafka Producer 将执行commitTransaction
. Kafka 集群接收提交事务请求并成功提交作为事务 A 一部分的记录。Kafka 集群发送有关成功提交的确认。
然而,由于某些问题,此确认丢失,导致Timeout
Kafka 生产者commitTransaction
调用出现异常。因此,即使记录已经提交到 Kafka 集群上,从生产者的角度来看,提交还是失败了。
通常在这种情况下,应用程序会在新事务 B 中重试发送事务 A 记录,但这会导致记录重复,因为它们已经作为事务 A 的一部分提交。
上述场景可能吗?您如何处理commitTransaction
确认丢失以及由此导致的最终记录重复?
distributed-system duplicates packet-loss apache-kafka kafka-producer-api
我有一个通过多播发送 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%,所以处理起来不是问题。
我有一个通过 WIFI 连接到嵌入式 AP 的 android 智能手机。我正在使用在 Linux 上运行 Tshark 的笔记本电脑嗅探 WIFI 流量。我每 100 毫秒传输 5 次小型(234 字节)TCP 数据包,然后是 500 毫秒没有数据。周期性地,数据包将被忽略,强制重传。当通过 TCP 套接字传输数据时,需要一定程度的数据包重传,但这是过多的。特别是因为嗅探器接收数据包没有问题(即没有“飞行中”损坏),并且后续重新传输的数据包也被android忽略(丢弃)。
请注意:当我说“忽略”时,我的意思是我没有看到任何确认,无论是来自接收无线电 (802.11 ACK) 还是来自 Wireshark 跟踪中的接收 TCP 堆栈 (TCP ACK)。在下图中,数据包599
被立即确认,而下一个数据包 (606) 被忽略,接下来的四次重传 (607-610) 也是如此。
这不会发生在 Android v4.x(4.0.4 和 4.2.2 测试)上运行的相同 APK 上,也不会发生在 iOS 上运行的类似应用程序上。在这两种情况下,都会出现预期丢弃的 TCP 数据包,然后是重传,但几乎总是立即被确认。
由于我传输的数据包没有什么特别之处,并且TCP数据包的无缝重传有望在一定程度上解决丢包问题,我怀疑许多应用程序都遇到了同样的问题,但只是接受了整体传输速率的降低,归因于较慢的转移到“WIFI 拥塞”。
就我而言,WIFI 硬件/固件解决方案(由第三方提供)因 TCP 积压过多而窒息。他们有一个带有创可贴修复的新解决方案,似乎有助于恢复,但这并不能解决现场已有的硬件问题。
我相信在 android 5.x 下有些事情发生了变化,以至于收音机会定期关闭或移出频道。由于它似乎周期性地发生,我认为这可能是由于信道扫描(期望在扫描间隔期间丢弃的任何数据包都将在无线电返回时通过重新传输来恢复)。我无法找到对 Android 频道扫描行为的明确定义(对此我有单独的帖子)。
当失败时,重传将以 4 或 5 个数据包的突发形式发生,中间有几毫秒,然后在 1 秒内没有任何内容,然后是另一个突发。通常,重传的数据包会被忽略一段时间(可能是几秒)。最终,一个重传数据包被确认,并继续下一个数据包的传输。
我注意到还发生了定期 DNS 探测(通过 DNS 查询定期探测的 URL …
我正在使用rawcap tcp 捕获工具来捕获 Windows 上的本地主机数据包。
我有一条巨大的溪流,有多个
'捕获文件中缺少 XXXX 字节'
在捕获的文件中。
我怎样才能防止这种情况?如何从本地主机捕获完整的 TCP 数据包?
有没有其他我可以使用的工具?
谢谢
有时我的 DSL 路由器会以这种奇怪的方式出现故障:
luis@balanceador:~$ sudo ping 8.8.8.8 -I eth9
[sudo] password for luis:
PING 8.8.8.8 (8.8.8.8) from 192.168.3.100 eth9: 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=47 time=69.3 ms
ping: sendmsg: Operation not permitted
64 bytes from 8.8.8.8: icmp_seq=3 ttl=47 time=68.0 ms
ping: sendmsg: Operation not permitted
64 bytes from 8.8.8.8: icmp_seq=5 ttl=47 time=68.9 ms
64 bytes from 8.8.8.8: icmp_seq=6 ttl=47 time=67.2 ms
ping: sendmsg: Operation not permitted
64 bytes from 8.8.8.8: icmp_seq=8 ttl=47 time=67.2 ms
^C
--- …
Run Code Online (Sandbox Code Playgroud) 通常我能够解决自己的问题,但这次我什至无法找到问题的核心原因,我迫切需要帮助。
当下载流媒体并将其播放到 Discord 中的语音通道时,我注意到机器人的音频大约每 20-22 秒就会出现故障/断断续续。经过几天的测试,我认为这都是由于发送数据包丢失造成的。但是,我仍然无法找到问题的根源。
我检查的内容:
opus
//软件包ffmpeg-static
版本fluent-ffmpeg
(均为最新版本)speedtest
npm 包的服务器速度(两者都显示出很高的速度,所以问题根本不在于连接速度)附加信息:
播放超过两分钟的音乐后,Discord 的机器人连接统计数据(顶行数字可能有所增加,因为我必须将两个屏幕截图拼接在一起)
Discord.js v13语音连接代码(简化):
var connectToChannel = async function (channel) {
const connection = joinVoiceChannel({
channelId: channel.id,
guildId: channel.guild.id,
adapterCreator: channel.guild.voiceAdapterCreator,
});
connection.resource = null;
connection.play = function(resource) {
connection.on = function(eventType, cb) { player.player.on(eventType, …
Run Code Online (Sandbox Code Playgroud) 在一家视频会议公司实习时,有很多关于丢包的讨论。维基百科声明如下:
丢包通常是由网络拥塞引起的。
我知道因为视频需要通过网络发送如此大量的数据,所以数据包必然会丢失。
我不明白的是为什么在其他情况下(例如 HTTP 请求和 AJAX 调用)没有出现丢包的情况。如果丢包真的是网络拥塞造成的,为什么我自己的HTTP请求从来没有遇到过?
HTTP 连接是否不会丢失数据包,或者我发送的请求太小而不会受到影响。如果 HTTP 对丢包免疫,为什么会这样?
packet-loss ×12
udp ×4
networking ×3
tcp ×3
linux ×2
sockets ×2
android ×1
apache-kafka ×1
core-audio ×1
discord.js ×1
duplicates ×1
duplication ×1
http ×1
ios ×1
javascript ×1
licode ×1
multicast ×1
objective-c ×1
packet ×1
ping ×1
shell ×1
webrtc ×1