我有一个视频流应用程序,该应用程序在我的办公室中运行良好,但在客户所在位置却失败了。症状是每隔两秒钟,我会停止接收UDP数据包2秒钟,然后流将恢复,好像没有发生任何错误。
我在客户所在地运行了http://www.pingtest.net/,结果很好。没有丢包和低延迟。我注意到我们两个位置之间的唯一区别是ping google.ca
它们所在的位置超时,但在我的位置有效。
如何测试我所在的网络是否阻止传入的UDP数据包?我有办法隔离谁丢弃数据包吗?
我有一个视频流应用程序,该应用程序在我的办公室中运行良好,但在客户所在位置却失败了。症状是每隔两秒钟,我会停止接收UDP数据包2秒钟,然后流将恢复,好像没有发生任何错误。
我在客户所在地运行了http://www.pingtest.net/,结果很好。没有丢包和低延迟。我注意到我们两个位置之间的唯一区别是ping google.ca
它们所在的位置超时,但在我的位置有效。
如何测试我所在的网络是否阻止传入的UDP数据包?我有办法隔离谁丢弃数据包吗?
Answers:
您可以尝试使用建立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
。
尝试发送发送一些文本,甚至更好地使用管道在两个位置之间发送文件,然后进行比较。
-l
“ It is an error to use this option in conjunction with the -p, -s, or -z options.
”,因此我已将该命令更正为经过测试可以正常运行的命令。另外,我将“ ip”更改为“ addr”,因为主机名也可以使用,并且在某种意义上是“地址”。
addr
主场迎战ip
点。但是现在有了您的命令,我得到一个错误:(listen needs -p arg
我也测试了答案中给出的命令;)
)。那里有各种各样的nc,如果您提供更多详细信息,例如nc版本和/或您的发行版,我会在注释中添加注释。
nc
命令是/bin/nc -> /etc/alternatives/nc -> /bin/nc.openbsd
Debian软件包提供的符号链接。默认情况下,netcat-openbsd
我的本地Ubuntu计算机也有nc.openbsd
。都不接受-l -p
。我也ncat
从nmap
Ubuntu / Debian软件包中安装了这两个计算机。旧的Debian系统中,ncat
拒绝-l -p
,但ncat
在Ubuntu接受这两种方式虽然Debian的版本必须是古老的,因为它烦人不具备的。--sctp
选项: - /
nc
?我注意到也有一个' netcat-traditional
'包,但是我没有尝试过。
netcat-traditional
(v 1.10-38),因为它与debian一起提供。感谢您的提示,我现在将两个变体都包含在答案中。
netcat
mpy答案中的命令对于诊断目的很有用,但是我用另一种解决您的基本问题的方法来补充该答案。
可能值得让您的应用程序退回到SCTP甚至TCP。我实际上发现了这个问题,因为我一直在寻找如何在拥塞时拒绝使用超过下行链路份额的用户的传入UDP数据包,因为与SCTP和TCP不同,UDP没有拥塞控制,因此很难对下行链路进行优先级划分交通。
SCTP和TCP都具有拥塞控制功能,并且可以很好地与QoS配合使用,但是SCTP相对于TCP而言具有额外的好处,它是为实时流应用程序设计的,因此可以很好地替代TCP 和 UDP。实际上,SCTP是两种最常见的传输协议中最好的。
进行回退,而不是仅仅依靠UDP,这不是一个坏主意。即使您只使用TCP,也至少可以说它正在工作,也许不是最佳状态。