networking - 本地主机上的多播数据包顺序

标签 networking multicast

由于多播数据包通常是基于 udp 的,因此它是不可靠的

在本地主机上,我假设数据包只是从一个进程的缓冲区复制到另一个进程的缓冲区,因此它会按照发送者传输的顺序排队,对吗?

我不确定的是:

  1. 我可以在本地主机上假设正确的包顺序以进行多播(或 udp)吗?如果没有,为什么?
  2. 不同操作系统处理(win、mac、linux)的具体差异是什么?

谢谢

最佳答案

我可以在本地主机上假设正确的包顺序以进行多播(或 udp)吗?如果没有,为什么?

否,因为数据包未编目。另外,正如您可能已经知道的那样,无法保证环回连接将保持 UDP 有序。

不同操作系统处理(win、mac、linux)的具体差异是什么?

协议(protocol)没有差异(请参阅 RFC ),但具体细节很可能取决于平台(和版本),我确信没有人立即知道它们(无论如何,有些都是闭源的) )。这是很可能无法保证有序性的另一个原因。即使您确实对此进行了测试并且数据包按顺序排列,依赖环回连接中 UDP 数据包的顺序之类的东西也是一个非常糟糕的主意(tm)。

另外:UDP“不可靠”的说法虽然正确,但可能会产生误导。许多具有安全意识的软件通过 UDP 工作,并且一般来说,只有一小部分数据包被丢弃。有了适当的应急措施,如果使用 UDP(可以说是为了性能)并且出现数据包丢失,软件不应崩溃。但如果您这么担心,为什么不使用 TCP?

关于networking - 本地主机上的多播数据包顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14087392/

相关文章:

c++ - 我如何在 Boost ASIO 中获得等待 async_read_some 的函数?

java - Android - 解析JSON数据显示重复结果

c++ - 创建多个线程后 pthread_create 失败

java - Android HttpPost 消息不会通过线路发送其有效负载

ios - iOS 上的 GCDAsyncUdpSocket 缺少多播数据报

elasticsearch - 如何从外部访问存储在Docker容器中的Elasticsearch?

sockets - Linux 套接字和 IP_ADD_SOURCE_MEMBERSHIP

c# - .net 代码中的 udp 多播端口

networking - 从 Docker 容器发送多播数据包(到多播组)

c# - 关于 SetSocketOption 和 MulticastOption 的问题