为什么DNS通过UDP有一个512字节的限制?

我一直在寻找这个问题的答案(标题中的答案),我发现的最好的东西是:

在DNS协议devise中,UDP传输块大小(有效载荷大小)已被限制为512字节以优化性能,同时产生最小的networkingstream量。

我的问题是:如何提高性能,是否有任何其他原因使用UDP的这种限制?

512字节的有效负载保证了DNS数据包在传输中可以被重新组合。 另外,一般来说,随机丢弃较小数据包的可能性较小。

IPv4标准规定每个主机必须能够重组576个字节或更less的数据包。 对于IPv4报头(20字节,尽pipe它可以高达60字节瓦特/选项)和8字节UDP报头,具有512字节有效载荷的DNS数据包将小于576字节。

正如@RyanRies所说:DNS可以将TCP用于更大的有效载荷以及区域传输和DNSSEC。 TCP起作用时会有更多的延迟,因为与UDP不同的是,在任何数据开始stream动之前,客户端和服务器之间就会发生握手。

现代DNS实际上并不限于UDP的512字节有效载荷。

在使用EDNS0的情况下,可以指定更大的有效载荷大小,DNSSEC感知的客户端通常也是如此。

通过UDP支持更大的有效载荷是一把双刃剑,但是,这也是为什么使用名称服务器进行放大攻击已经变得越来越stream行的原因,因为如果攻击者使用获得较大响应的查询,则可以实现更好的放大。

请参阅rfc2671了解EDNS0的细节

它是一个QOS的东西。

由于UDP是无状态的,数据包的error handling是不可能的。

因此,通过保持数据包的最大大小,他们将有更大的改变到达目的地,减lesserror handling的影响。