比方说,我有两台机器在同一个数据中心,但不一定在同一个机架上。
在这两台机器之间使用UDP进行发送时,丢弃的数据包有多常见?
我是在这样的假设下问的,因为机器之间最多只有几个交换机,根本不会丢包。
无序数据包到达同一数据中心有多普遍? 我的假设是有99.9%的时间只有一条路线,所以这是不可能发生的。
但是,无论何时,我都会用绝对的眼光来思考,我知道我必须错过一些东西!
我需要什么样的背景信息来更好地理解何时应该丢弃数据包,以及它们可能被丢弃的频率,以及在同一个数据中心内的机器出现乱序的情况。
最终,我试图在位于同一数据中心的不同Linode VPS实例之间进行通信时使用多播UDP或PGM。 信息必须到达并按顺序。 当然,UDP听起来不那么好!
但是,如果在同一个数据中心里可以期待几乎完美或完美的交付,那就没问题了。 但是,我正在testing这个假设。
谢谢。
您不能依靠UDP来传送数据包,因为规范不提供这些保证。 即使假定最理想的情况,两台主机之间的单根以太网电缆,仍然存在您所写的操作系统,networking堆栈,NIC驱动程序和libc实现的问题。
在该链的每个步骤中,该代码的编写者将select不排列UDP数据包排列的优先次序,即使他们到达为了简单的原因,他们不需要。
一个人为的例子可能是传入数据包被读入的数据结构,可能是一个环形缓冲区。 按顺序到达的数据包将按顺序放入环形缓冲区,但驱动程序作者可能会更简单地将它们转储到networking代码的上层,从而随机排列它们的顺序。
考虑到你的情况,一个虚拟机运行在一个共享的基础架构上,这个共享的基础架构将运行在音量而不是性能上,那么接收到的UDP数据包预测的概率就会很低。
总之,如果规范说你不能依靠UDP数据包sorting。 你不能依靠它,你不能试图调整环境,给予更强大的保证,比规范承诺。
如果有人有兴趣尝试,只需使用Wireshark。 如果有人真的在慢速连接或丢包的情况下,我们只是镜像交换机上的端口,用Wireshark连接笔记本电脑,并看看。
几乎任何交换机都会在任何时候重新sorting两个数据包,并且被许多networking协议(如PGM)考虑在内。
需要考虑的一件事情是,大多数数据中心都会阻塞数据报并阻止多播,以便简化和减less其networking基础架构的开销。
如果您在服务器和客户端之间启用了PGM路由器辅助启动和感知networking元素,则只需要使用IP / PGM协议本身,否则将PGM封装在UDP内部,并节省pipe理应用程序权限的负担。
如果使用ØMQ等消息传递层,则可以将IP / PGM,UDP / PGM或TCP覆盖networking的select推迟到部署和集成。
我写了一个简单的.net多播应用程序,可以在指定压力下测量丢弃的数据包。
你可以在这里下载: SimpleMulticastAnalyzer 。
请享用。