【问题标题】:Problems testing UDP code outside of LAN?在 LAN 之外测试 UDP 代码时出现问题?
【发布时间】:2009-04-28 21:20:45
【问题描述】:

我在接下来的几天里学习 udp。这个周末我将参加那些 72 小时的比赛之一,我希望我的 UDP 代码在比赛结束前在线工作。在比赛期间,我不会有任何互联网(所以没有打电话给某人并让他们测试)。

我知道一些关于 UDP 的问题,比如数据包进来两次,没有进来几个帧(但我不知道我应该期望多长时间),推荐的字节大小(576)等。@ 987654321@

但是从局域网迁移到互联网后,你会发生哪些事情呢?

注意:我将尽快运行一些代码并在线测试。希望我的最终代码会是什么样子,但我也可能会遗漏一些东西。

【问题讨论】:

  • 不推荐使用 576,它是所有 IPv4 网络在没有分片的情况下保证的最小支持大小。 IPv6 将其增加到 1,500 字节。

标签: udp


【解决方案1】:

您的延迟可能会增加,并且您可能会丢失更多数据包。这取决于发射器和接收器的位置。如果您在美国并且您正在尝试与澳大利亚的 UDP 通信,您将获得相当高的延迟,您将遭受更多的数据包丢失/重新排序的数据包/重复,因为有更多的传输距离和更多的数据包路径被路由。

【讨论】:

    【解决方案2】:

    如果您使用 UDP 作为传输协议,则必须在应用程序协议中保护传输。有几种方法可以做到这一点:

    • 数据包序列号
    • 数据包大小
    • 校验和

    您应该将这些作为应用程序数据包的标头发送并在接收端进行检查。

    PS:如果您真的在协议的所有方面(不仅仅是部分协议)都依赖正确的数据包顺序和完整性,您应该切换到 TCP。

    【讨论】:

    • 我想说您可能想要保护您的传输。例如,如果您出于指示目的接收实时价格更新,那么您很可能可以承受数据包丢失的情况。
    【解决方案3】:

    这可能有点极端(!)但如果这很重要,您可以编写一个 UDP 代理来侦听传入的数据报并转发它们。然后您可以修改它以提供:

    1. 延迟
    2. 丢包
    3. 数据包复制

    并指示您的客户端将数据发送到代理,并指示代理(通过适当的数据包修改)将数据发送到服务器。

    就像我说的,也许是极端的。 然而,即使在您的 LAN/互联网存在的情况下,您也可以使用它来测试您的应用程序在 UDP 不友好的环境中的行为。

    编辑:肯定有人写过这样的东西吗?如果没有,我感觉会有一个开源项目在进行中......

    【讨论】:

      【解决方案4】:

      简短的回答是:在 LAN 上,您可能很少注意到 UDP 的权衡(好的和坏的),因为在 LAN 上很少会出错。

      您可能会丢失数据包。 LAN 拥塞或本地系统限制是最可能的原因。

      当您离开 LAN 并依赖路由器时,会出现大多数 UDP 问题(碎片、重复数据包、延迟数据包、丢弃超过一定大小的数据包、缺少返回的错误消息)。

      换句话说,使 UDP 变得复杂的大部分原因是“离开 LAN”。

      【讨论】:

      • 碎片化是什么意思?我会得到我的一半包裹?我会在不同的阅读中获得第二半吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-26
      • 1970-01-01
      • 1970-01-01
      • 2015-10-03
      相关资源
      最近更新 更多