首页 文章

Internet上最大的安全UDP数据包大小是多少

提问于
浏览
177

我已经阅读了一些关于UDP数据包大小的文章,但是无法得出结论是否正确 .

许多服务将最大的UDP数据包限制为512字节(如dns)

鉴于互联网上的最小MTU是576,并且IPv4报头的大小是20字节,UDP报头是8字节 . 这留下了548个可用于用户数据的字节

我是否能够使用大小为548的数据包而不会出现数据包碎片?或者是DNS的创建者知道什么,以及为什么他们将其限制为512字节 .

我能安全地高于548字节吗?

9 回答

  • 10

    确实,典型的IPv4报头是20个字节,UDP报头是8个字节 . 但是,可以包含IP选项,这可以将IP标头的大小增加到60个字节 . 此外,有时中间节点必须将数据报封装在另一个协议(例如IPsec(用于VPN等))内,以便将数据包路由到其目的地 . 因此,如果您不知道特定网络路径上的MTU,最好为您可能没有预料到的其他标头信息留出合理的余量 . 通常认为512字节的UDP有效载荷是这样做的,尽管即使这样也没有为最大尺寸的IP报头留下足够的空间 .

  • 6

    UDP数据包的最大大小的理论限制(在Windows上)为65507字节 . 这是documented here

    正确的最大UDP消息大小为65507,由以下公式确定:0xffff - (sizeof(IP标头)sizeof(UDP标头))= 65535-(20 8)= 65507

    话虽这么说,大多数协议限制到一个小得多的尺寸 - 通常是512或偶尔8192.如果你在一个可靠的网络,你通常可以安全地高于548 - 但如果你在互联网上广播,更大你去,你越有可能遇到数据包传输问题和丢失 .

  • 111

    576是最小最大重组缓冲区大小,即每个实现必须能够重新组装至少该大小的分组 . 有关详细信息,请参阅IETF RFC 1122 .

  • 10

    The maximum safe UDP payload is 508 bytes. 这是一个576的数据包大小,减去最大的60字节IP标头和8字节的UDP标头 . 保证此大小或更小的任何UDP有效负载都可以通过IP传送(尽管不能保证传送) . 任何更大的东西都可以被任何路由器彻底放弃 . 除了仅IPv6路由,其中最大有效负载为1,212字节 . 正如其他人所提到的,在某些情况下可以添加额外的协议头 . 相反,可能更喜欢大约300-400字节的更保守的值 .

    Any UDP packet may be fragmented. 但这不是太重要,因为丢失片段与丢失未分段的数据包具有相同的效果:丢弃整个数据包 . 使用UDP,这将以任何一种方式发生 .

    有趣的是,最大理论数据包大小约为30 MB(1,500以太网MTU-60 IP头x 65,536最大片段数),尽管它通过的可能性是无穷小的 .

    来源:RFC 791,RFC 2460

  • 42

    IPv4最小重组缓冲区大小为576,IPv6为1500.从此处减去标头大小 . 见UNIX Network Programming by W. Richard Stevens :)

  • 37

    本文介绍了最大传输单元(MTU)http://en.wikipedia.org/wiki/Maximum_transmission_unit . 它声明IP主机必须能够为IP数据包处理576个字节 . 但是,它注意到最小值为68. RFC 791:"Every internet module must be able to forward a datagram of 68 octets without further fragmentation. This is because an internet header may be up to 60 octets, and the minimum fragment is 8 octets."

    因此,安全数据包大小508 = 576 - 60(IP标头) - 8(udp标头)是合理的 .

    如user607811所述,必须重新组装其他网络层的碎片 . https://tools.ietf.org/html/rfc1122#page-56 3.3.2重组IP层必须实现IP数据报的重组 . 我们指定可由EMTU_R重新组装的最大数据报大小("Effective MTU to receive");这有时被称为"reassembly buffer size" . EMTU_R必须大于或等于576

  • 54

    512是你最好的选择 . 它在其他地方使用,是一个很好的偶数(1024的一半) .

  • 4

    鉴于IPV6的大小为1500,我认为运营商不会为IPV4和IPV6提供单独的路径(它们都是具有不同类型的IP),迫使他们使用ipv4的设备,这将是旧的,冗余的,维护成本更高并且不太可靠 . 这没有任何意义 . 此外,这样做可能很容易被认为是为某些交通提供优惠待遇 - 根据规则他们可能并不关心(除非他们被 grab ) .

    所以1472应该是安全的外部使用(虽然不知道EDNS会接受它),如果你在谈论内部网络,你更可能知道你的网络布局,在这种情况下,jumbo数据包大小适用于非分段对于4096 - 4068字节的数据包,对于具有9014字节缓冲区的英特尔卡,包大小...等待... 8086字节,将是最大...巧合?暗笑

    **** ****更新

    各种答案给出了最大值允许1 SW供应商或假设封装的各种答案 . 用户没有要求尽可能低的值(如安全UDP大小的“0”),但是最大的安全数据包大小 .

    可以多次包括各种层的封装值 . 因为一旦你封装了一个流 - 没有什么可以禁止,比如说下面的VPN层和完全重复的封装层 .

    由于问题是关于最大安全值,我假设他们正在讨论可以接收的UDP数据包的最大安全值 . 由于没有保证UDP数据包,如果收到UDP数据包,最大的安全大小将是IPv4上的1个数据包或1472个字节 .

    注 - 如果使用的是IPv6,则最大大小为1452字节,因为IPv6的标头大小为40字节,而IPv4的字节大小为20字节(无论哪种方式,UDP标头仍必须允许8字节) .

  • 7

    我在这里读到了一些好的答案;但是,有一些小错误 . 有人回答UDP标头中的Message Length字段最大为65535(0xFFFF);这在技术上是正确的 . 有些人回答说实际最大值是(65535 - IPHL - UDPHL = 65507) . 错误的是,UDP标头中的消息长度字段包括所有有效负载(第5-7层),加上UDP标头的长度(8字节) . 这意味着如果消息长度字段是200字节(0x00C8),则有效负载实际上是192字节(0x00C0) .

    困难和快速的是,IP数据报的最大大小为65535字节 . 此数字是L3和L4标头的总和,加上5-7层有效负载 . IP标头UDP标头层5-7 = 65535(最大) .

    对于UDP数据游戏的最大大小,最正确的答案是65515字节(0xFFEB),因为UDP数据报包括UDP报头 . 对于UDP有效负载的最大大小,最正确的答案是65507字节,因为UDP有效负载不包括UDP报头 .

相关问题