问题标签 [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.
serial-port - Arduino:串行通信丢包
我正在尝试通过它们的串行引脚连接多个 Arduino Mega 板以允许板之间的通信。我希望能够通过菊花连接任意数量的arduino,并且我希望一个板成为主机,控制其他板的动作。主控应由板动态确定。我知道菊花链方法会由于数据包的转发而导致通信延迟,但到目前为止,我计划最多连接 4 个板。将来,这可能会增加到 10 个板。我的板子都有一个单独的电源,因为它们连接到其他一些有自己的电源的硬件。
我的想法是以这样的方式连接电路板,即主控将由电路板的接线决定。我想过将“Serial”端口作为“To-Master”串口,将“Serial1”端口作为“To-Child”串口。板卡在“To-Master”串口上发送 hello 消息,如果在“To-Child”串口上收到这样的消息,主机会回复。如果几秒钟后没有收到任何答复,则该板确定自己是主控。
我通过连接接地引脚将电路板连接起来,并将主设备的 RX1 连接到子设备的 TX0,将主设备的 TX1 连接到子设备的 RX0:
基本上我的设置是有效的,因为板确实相互检测并交换你好消息和回复。然而,我想消除大量的数据包丢失或损坏。
作为数据包验证的一个简单措施,我以“幻数”开始每个数据包。接收板查找这个字节,只有在收到这个字节后才尝试读取数据包。接收到的任何其他字节都被简单地丢弃。
看起来,经常发生的情况是,在任一串行端口上接收到的东西不是以幻数开头的,因此被丢弃。然而,这些事件的时间戳与另一块板的发送时间戳一致,这意味着数据包至少部分传输,但不知何故魔术字节被破坏或丢弃。
这是arduinos串行端口的已知问题吗?
会不会和我的接线有关?
我可以采取任何措施来确保数据包的保存交付吗?
会不会是板子没有在正确的时间读取信号的问题(我使用了 9600 的波特率)?
我还研究了 I2C 通信,但我没有找到任何资源或信息,如果可以为这种类型的通信动态选择主设备。同样在文档中指出,所有设备共享一个公共电源很重要,这在我的场景中是不可能的。但是,这个I2C的基本主从原理符合我的要求,因为我有一个向所有其他板发送命令的主。在我的情况下可以使用 I2C 吗?
谢谢你的想法!
wireshark - 使用 Wireshark 监控数据包丢失
我正在使用 Wireshark 监控网络流量以测试安装在路由器上的新软件。路由器本身允许其他网络(4g、通过 USB 的移动设备等)连接到它并提高该路由器的速度。
我正在尝试做的是断开连接的设备,并在执行此操作时发现是否有任何数据包丢失。我知道我可以简单地使用声明“tcp.analysis.lost_segment”的过滤器来追踪丢失的数据包,但我如何最终隔离导致数据包丢失的特定设备?或者甚至知道原因是否是由于设备断开连接而导致丢失?
另外,最稳定的测试方法是什么?下载一个大文件?流式传输视频?等等等等
非常感谢所有输入
c# - C# UDP 套接字检查数据包丢失
我有 udp 套接字,每 1 秒发送 100 个字符串,当收到数据时,我想检查数据是否正确并测量数据包丢失
发送字符串的来源:
据我所知,udp 无法检查数据是否正确,也无法测量数据包丢失,除非 Received 已经知道数据将 Receive
因此,对于统计信息,我每 5 秒发送一次 Receiver 已经知道的数据
数据接收时如何知道发送的数据是正确的还是丢包?
java - Java UDP数据包发送和接收问题
我正在开发一个使用 Java 和 UDP 发送器和接收器的类项目。问题的前提是读取一个文本文件,将内容存储在一个数据包中,发送数据包,接收数据包,然后在屏幕上读出文件并在接收计算机上创建一个相同文本文件的新文本文档.
我有所有的工作。当我使用本地主机进行测试时,它似乎 100% 的时间都在工作。当我将它从我的笔记本电脑发送到我的 PC 时,它似乎 100% 的时间都在工作。但是,当我将它从我的 PC 发送到我的笔记本电脑时,它不起作用。
我有几个 System.out 调试语句来验证我发送的一些信息。我知道文本文件应该占用 7 个数据包。但是,每当我将它从我的 PC 发送到我的笔记本电脑时,它都会说我正在发送 46 个数据包。
我最初的想法是,数据包可能是乱序发送的。我发送的第一个数据包表明接收者应该期望接收多少数据包。我想也许出于某种原因,“46”可能表示大写“F”,所以我删除了所有大写“F”,它仍然说我正在发送 46 个数据包。
我想也许我一次发送了太多信息,所以我使用 Thread.sleep() 让我的接收器有时间跟上——这也不起作用。
最后,我在网上阅读了Oracle文档和一些帖子,发现UDP是不可靠的。所以,我假设它可能是这样的。但是,我只想验证这可能是问题所在。
或者,如果有人对可能导致问题的原因有更好的了解,那也很棒!
谢谢你的帮助 :)
iis - IIS6丢包
一段时间以来,我们一直在断断续续地遇到问题...
我们有一个同步到服务器的应用程序,我们知道请求正在到达服务器,因为我们一直在运行wireshark,并且可以看到传入的请求。
现在这是我需要纠正的地方,如果我在某个地方错了......
我的理解是,流量将从机器上的网卡到 HTTP.sys,后者将其转发到 IIS6,然后将其发送到我的可执行 ISAPI,后者又提供通过 IIS6 返回的响应,通过网卡通过 WWW 回传给设备。
现在这些请求丢失了,就像我说的那样,由于wireshark,我们可以看到请求已经到达网卡,但是我们不知道从这一点开始发生了什么,HTTP.sys 日志中没有错误,并且 IIS 日志中没有任何内容,与我们的 ISAPI 的日志相同,这里也没有任何内容。
HTTP.sys 日志为空的事实向我表明内核认为它已成功将其传递到 IIS6,但我不知道 IIS6 是否在第一次收到请求时记录,或者一旦成功响应它,有没有人对这个有什么想法吗?这是一个非常奇怪的。
udp - tc (netem) - 报告的损失与设置的损失不同
我正在对一些链接、基准标记进行一些测试,并且我正在使用 tc 命令来模拟跨 WAN 的数据包丢失。我发现,在发出丢弃 15% 数据包的命令后,在我的 VoIP 分析中,对于不同的流,报告的数据包丢失是不同的。
设置很简单,两个客户端通过 L2 交换机连接到服务器。最小的数据包丢失通常只有大约 50 台机器到此交换机。
我正在寻找造成这种情况的因素,是否有我不熟悉的“tc”命令的各个方面?
http://i.stack.imgur.com/OBzxH.png【丢包的ss】
[编辑] 26.1% 是我造成的损失,我很好奇的是另外两个。
javascript - 使用javascript进行丢包测试
有没有办法通过使用 ajax、xmlHttpRequest 或其他方法使用 javascipt 从客户端检查数据包丢失?非常感谢您的帮助。
java - QT - JAVA 套接字丢失数据
我有一个 QT/C++ 服务器和一个 Java 客户端。客户端向服务器请求文件,服务器将流发送给客户端。问题是在 TCP 传输中(也在 localhost 中)我丢失了一些数据包。有时,客户端会收到 288890 的 280705 个字节。
有服务器:
这是套接字线程:
这是 JAVA 客户端:
} }
文件 test.txt 是一个每行都有一个数字的文件:
有时,客户端会收到整个文件,有时会收到没有第一部分的文件,如下所示:
从 60 开始,跳到 1860,到 50000 结束。
我尝试迭代请求 1000 次,并且 90% 的代码工作,传输所有数据。
有人可以帮我理解吗?
networking - 根据奇怪的网络状态,与抖动和丢包相关的 RTP 视频问题
我是一名开发 SIP/RTP Voip 软件的新手软件开发人员。当然,我使用的是 UDP 协议,这个视频的视频编解码器是 H264。
由于我是这个 Voip 领域的新手,所以我很困惑,并且遭受了很多痛苦的网络问题。
我想请教与网络相关的专家,专门处理关于抖动/丢包的 RTP/RTCP 问题。
在 SIP 成功创建媒体会话后,我遇到了一些 QoS 问题。
我面临的问题就像下面这样。
Wifi 网络(延迟:11.1m/s 下载速度:14.9mbps 上传速度:3.27mbps):
http ://www.youtube.com/watch?v=epm01c6IT5Q&feature=youtu.be
3G网络(延迟:26.4M/s 下载速度:1.94Mbps 上传速度:2.42Mbps): http ://www.youtube.com/watch?v=-iG156_wdQE&feature=youtu.be
如您所见,通过上传和下载低且延迟不稳定的3G,视频质量(包括视频问题颜色为绿色和视频延迟)优于Wifi。
使用比 Wifi 慢的 3G 网络,我总能获得比 Wifi 更好的用户体验。
我没有深入分析 RTP/RTCP 数据包,但我能说的是......
在问题情况下,当应用程序使用 Wi-fi 时,Jitter 异常高,丢包率也明显很高。
总结一下,
- 如您所见,当我使用比 Wifi 慢的 3G 网络时,视频质量更好。
- 当 Wifi 在那里工作时,抖动和丢包率显然很高,因为我可以在接收端使用wire-shark 分析数据包。
- 那天早上,视频问题(视频绿色像素,视频延迟)要严重得多,但随着时间的推移,下午和晚上,问题已经恢复了一点。
据我所知,这与网络带宽和网络拥塞有关。我不确定这是正确的诊断,也需要解决这个问题。很抱歉,我还没有足够的背景信息。
谢谢。
linux - UDP调优linux
我有传输 UDP 流的 C 应用程序。它在大多数服务器上运行良好,但在少数服务器上很疯狂。
我在服务器上有100 Mbps的网络连接说eth1 。使用这个网络,我通常传输(TX)大约10-30 Mbps的UDP 流,这个网络连接将有大约100-300 Kbps的 RX 到服务器。我在服务器中有其他网络连接说eth0,C 应用程序从该服务器接收 UDP 流并转发到 100 Mbps 网络连接eth1。
我的应用程序使用阻塞 sendto()
功能在eth1中传输 UDP 数据包。数据包长度可变,从 17 字节到最大 1333 字节。但大多数时候,超过 1000 个字节。
问题是:有时eth1sendto
上的功能块会持续大约 1 秒。这种情况每 30 秒到 3 分钟发生一次。当阻塞时,我将有很多 UDP 数据包缓冲在内核从eth0的 UDP 接收缓冲区中,C 应用程序从那里接收数据包。一旦从eth1上的长阻塞调用返回,C 应用程序将有大量缓冲数据包从eth0传输。然后 C 应用程序将所有这些缓冲的数据包与下一次调用一起传输。这将在从eth1接收 UDP 流的其他端点产生速率峰值。这将创建Zsendto
sendto
sendto
像其他端点的速率图。所以这个像 Z 一样的飙升是我的问题。
我试图在内核设置中wmem_default
从大约131 KB增加到5 MB以克服峰值。设置它可以解决我的峰值问题。现在我在其他端点上没有像 Z 这样的速率飙升,但我遇到了新问题。新问题是:我得到很多丢包而不是尖峰。我认为这可能是由于eth1的发送缓冲区累积了大量要发送的数据包,而从eth1发送当前数据包需要很多时间(这就是为什么可能会sendto
长时间阻塞)。而在下一个瞬间,当 NIC 在短时间内从发送缓冲区发送所有累积的数据包时,这可能会导致网络拥塞,我可能会收到很多数据包丢失而不是峰值。
所以,这是第二个问题。但我认为根本原因是:为什么有时 NIC 在发送流量时会长时间暂停,每 30 秒到 3 分钟一次?
可能我需要查看eth1 驱动程序的 TX 环形缓冲区吗?当由于 NIC 未及时传输(由于随机长时间 TX 暂停)而导致套接字发送缓冲区变满时,接下来调用sendto
套接字发送缓冲区中的空间块,这是否也会阻塞驱动程序 TX 环形缓冲区中的空间?
请不要告诉我 UDP 不可靠,我们无法控制丢包。我知道它的不可靠和 UDP 数据包可能会丢失。但我确信我们仍然可以做一些事情来减少数据包丢失。
编辑
我试图在内核设置中wmem_default
从大约131 KB增加到5 MB以克服峰值。而且我还删除了阻塞sendto
呼叫。现在我使用喜欢:sendto(sockfd, buf, len, MSG_DONTWAIT ,dest_addr, addrlen);
使用大型发送缓冲区wmem_default
。此外,由于发送缓冲区大,我没有收到任何错误EAGAIN
或EWOULDBLOCK
错误,但仍然有数据包丢失而不是尖峰。sendto
编辑
sendto
由于具有巨大的非阻塞调用wmem_default
,并且由于没有来自 的任何EAGAIN
或EWOULDBLOCK
错误sendto
,尖峰已被删除,因为没有太多的数据包在eth0的接收缓冲区中累积。我认为它可能从应用程序方面解决。但主要问题是为什么网卡每隔几分钟就会变慢?可能的原因是什么?虽然它从长时间的 TX 暂停中恢复,并且可能会在发送缓冲区中累积大量数据包,这些数据包将在下一刻以突发的形式发送,并且拥塞网络因此大量数据包丢失。
更多更新
我使用相同的这个 C 应用程序在机器(127.0.0.1)中本地传输,并且我从未在本地遇到任何峰值或数据包丢失问题。