我正在尝试运行模拟,以在发生数据包冲突的环境中测试数据包丢失。我当前的设置包括几台离散机器,每台机器都有自己的网络接口来发送/接收数据包。这些机器通过AP通过wifi连接。我目前正在使用UDP,以便能够在单个地址上广播数据包。所有机器都在监听共享的IP地址,例如192.168.1.255
。
This answer提到UDP数据包不可靠,但是会由于冲突而 失败吗?在这里,我使用冲突来指代由多个同时传输引起的干扰。也就是说,网络中两个UDP节点的同时广播是否会引起我要测试的不可靠性?如果不是,我是否需要研究更改网络配置,甚至开始修改内核代码?
如果问题不明确,我会说我的最终目标是编写一些可能会或可能不会抵抗冲突的分布式算法。
答案 0 :(得分:2)
我正在尝试运行模拟以测试环境中的数据包丢失 发生数据包冲突的地方。
您可能想在问题中包括 collision 一词的含义。我将在回答中假设您是按照传统的意思(即,两个网络端点大约同时进行传输,从而“彼此交谈”,并且使彼此的传输陷入瘫痪,从而使传输均无法成功),并且广义上讲不是“由于网络拥塞而丢包”。
此答案提到UDP数据包不可靠,但它们会 因碰撞而失败?
答案将完全取决于运行UDP数据包的网络硬件类型。 UDP协议本身是独立于硬件的,因此它不会指定有关是否会发生冲突的任何信息,因为它无法知道。
也就是说,当今大多数低级网络硬件都具有避免冲突的规定(按照我上面提到的意思),例如,现代的以太网交换机在必要时对数据包进行有限数量的活动队列/缓冲(与旧的10Mb / sec以太网集线器相比,该集线器效率和可靠性要高得多,后者基本上只是将所有端点的以太网RX和TX引线电连接到一条大的“共享线”中,并希望达到最佳效果)。
另一种常用的网络硬件类型Wi-Fi也具有mechanisms来减少冲突,但这并不意味着通过Wi-Fi广播UDP是一个好主意,因为它会遭受其他问题-一方面,Wi-Fi路由器必须接收您的广播数据包并重新广播,以确保所有其他客户端都可以接收它,更糟糕的是,通常将其设置为以非常慢的“旧版”速率重新传输它,以确保那里的所有古老Wi-Fi卡仍可以接收广播数据。我的建议是,如果您要使用Wi-Fi,请将广播(和多播)传输保持在绝对最低水平。甚至向每个其他客户端发送单独的/相同的单播数据包通常也更高效(!)-避免冲突,而是因为即使少量的广播/多播流量也可以使您的Wi-Fi网络爬行。>
答案 1 :(得分:1)