network-programming - 编程实践 : how to choose a packet size for UDP datagrams?

标签 network-programming udp network-protocols

免责声明:这不是一个“如何”的问题。作为背景信息,我更想知道实际使用的不同实际做法是什么。

我们知道 UDP 没有像 TCP 那样的 PMTU 发现。因此,我看到了几种避免使用 UDP 产生 IP 碎片的方法:

  • 最大发送 512 字节数据包(UDP 方法)
  • 重新实现一些 PMTU(使用 ICMP“需要分段”消息)。
  • 依赖本地MTU(但它有多可靠,因为UDP不是连接协议(protocol),它怎么知道它的数据包将通过哪个接口(interface)?)
  • 其他... ?

  • 所以我想要了解当前 UDP 程序/协议(protocol)正在使用哪些方法的“背景”概念,尤其是关于流/VoIP 常见应用程序?

    预先感谢,

    乔斯林

    最佳答案

    限制为 576 字节是很常见的。大多数 Internet 协议(protocol)(例如 DNS)都是这样做的。大多数实时流协议(protocol)也使用较小的数据包,因为它具有提供较低序列化延迟和单个数据包丢失时影响较小的额外好处。

    一些协议(protocol)具有协商更大数据包大小的方法,但通常不像 PMTU 发现那样健壮(例如,DHCP 允许最大消息大小协商)。

    还有一些默认为 1500 左右的东西,并让用户在必要时降低它。 SNMP 的大多数实现似乎都在做这样的事情。

    无论如何,通常不会设置 DF 位,因此过于乐观的后果是碎片,而不是损坏。

    关于network-programming - 编程实践 : how to choose a packet size for UDP datagrams?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4346021/

    相关文章:

    java - 比较传输对象的值

    network-programming - UDP广播还是IP组播?

    c - 当阻塞 `recv()` 或 `recvfrom()` 在 tcp 情况下返回时

    Android 在热点启用设备上发送 UDP 广播

    php - 在 PHP 中创建简单的客户端/服务器 UDP 示例

    tcp - 是什么导致打开这么多 TIME_WAIT 连接?

    c - C中udp套接字上的poll()POLLIN事件

    routing - Omnet++ OSPF 路由表度量

    linux - 什么是 TCP 中的最大段生命周期 (MSL)?

    c# - 如何完全终止 HttpWebRequest