如何检测网络是否丢弃UDP数据包?


8

我有一个视频流应用程序,该应用程序在我的办公室中运行良好,但在客户所在位置却失败了。症状是每隔两秒钟,我会停止接收UDP数据包2秒钟,然后流将恢复,好像没有发生任何错误。

我在客户所在地运行了http://www.pingtest.net/,结果很好。没有丢包和低延迟。我注意到我们两个位置之间的唯一区别是ping google.ca它们所在的位置超时,但在我的位置有效。

如何测试我所在的网络是否阻止传入的UDP数据包?我有办法隔离谁丢弃数据包吗?


对我来说,这听起来像是防火墙的问题。您有任何软件或硬件防火墙吗?
皮托2013年

您不能问客户他们的网络配置是什么?
Ramhound

@Ramhound,理想情况下不是。我不想每次要演示产品时都必须挖掘潜在客户的路由器设置:)
Gili 2013年

2
伙计们,请解释您的反对票,否则我无法回应。
吉利2013年

Answers:


4

您可以尝试使用建立UDP连接netcat

在使用者网络外部的机器A上运行:

nc -u -l -p 1234            # if using netcat-traditional
nc -u -l 1234               # if using netcat-openbsd (as pointed out by @JamesHaigh)

请注意,-u它指示netcat使用UDP。(还要注意,有不同版本的netcat,是否需要使用该-p参数;给出了两个最常见的变体(?)的变体,都包含在Debian中。)

关于消费者所在地:nc -u [addr of machine A] 1234

尝试发送发送一些文本,甚至更好地使用管道在两个位置之间发送文件,然后进行比较。


您的远程命令对我来说失败了。联机帮助页中的表示为-lIt is an error to use this option in conjunction with the -p, -s, or -z options.”,因此我已将该命令更正为经过测试可以正常运行的命令。另外,我将“ ip”更改为“ addr”,因为主机名也可以使用,并且在某种意义上是“地址”。
James Haigh 2013年

@JamesHaigh:我同意你的addr主场迎战ip点。但是现在有了您的命令,我得到一个错误:(listen needs -p arg我也测试了答案中给出的命令;))。那里有各种各样的nc,如果您提供更多详细信息,例如nc版本和/或您的发行版,我会在注释中添加注释。
mpy

哦,对,他们彼此不兼容,真是遗憾!:-(好的,所以我的远程计算机是Debian。默认nc命令是/bin/nc -> /etc/alternatives/nc -> /bin/nc.openbsdDebian软件包提供的符号链接。默认情况下,netcat-openbsd我的本地Ubuntu计算机也有nc.openbsd。都不接受-l -p。我也ncatnmapUbuntu / Debian软件包中安装了这两个计算机。旧的Debian系统中,ncat拒绝-l -p,但ncat在Ubuntu接受这两种方式虽然Debian的版本必须是古老的,因为它烦人不具备的。--sctp选项: - /
詹姆斯黑格

Ps你的发行版是什么nc?我注意到也有一个' netcat-traditional'包,但是我没有尝试过。
James Haigh 2013年

@JamesHaigh:我确实使用了netcat-traditional(v 1.10-38),因为它与debian一起提供。感谢您的提示,我现在将两个变体都包含在答案中。
mpy

13

在服务器端,使用以下命令建立UPD服务器

iperf -s -u

在客户端,检查UDP连接

iperf -u -c <IP Address of Server>

1
这是真正的答案。它要求在另一端具有服务器访问权限。但是它给您直接的丢包反馈。您也可以使用它测试TCP带宽。
DragonFax

0

netcatmpy答案中的命令对于诊断目的很有用,但是我用另一种解决您的基本问题的方法来补充该答案。

可能值得让您的应用程序退回到SCTP甚至TCP。我实际上发现了这个问题,因为我一直在寻找如何在拥塞时拒绝使用超过下行链路份额的用户的传入UDP数据包,因为与SCTP和TCP不同,UDP没有拥塞控制,因此很难对下行链路进行优先级划分交通。

SCTP和TCP都具有拥塞控制功能,并且可以很好地与QoS配合使用,但是SCTP相对于TCP而言具有额外的好处,它是为实时流应用程序设计的,因此可以很好地替代TCP UDP。实际上,SCTP是两种最常见的传输协议中最好的。

进行回退,而不是仅仅依靠UDP,这不是一个坏主意。即使您只使用TCP,也至少可以说它正在工作,也许不是最佳状态。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.