我已经看到了许多关于缓冲区大小的建议(例如https://github.com/dns-violations/dnsflagday/issues/125),但我不明白选择一个或另一个会产生什么影响。
他们是怎么弄出这么大尺寸的?它们是来自基准还是来自现实世界的监控?
在RFC6891 (https://www.rfc-editor.org/rfc/rfc6891#section-6.2.5)中,它指出“请求者应该选择使用从大容量开始的回退机制,比如4096。如果失败,应该尝试在1280-1410字节范围内进行回退”。从大尺寸开始再重试有什么意义?这只会降低决议的速度。4096缓冲区大小是1280吗?在这种情况下,他们的陈述会有意义吗?
发布于 2020-09-07 08:52:58
选择默认EDNS缓冲区大小为1232字节的关于2020年DNS标志日的当前建议以获得最大缓冲区大小,同时避免本质上任何网络中的IP碎片。
IPv6规范要求一个1280字节的MTU作为基线。
从中倒计时: 1280 (为IPv6规定的最小MTU )- 48 ( IP和UDP报头的长度)= 1232 (可用有效负载长度)。
IPv4并没有规定一个有用的最小MTU值,但实际上期望并不低。首先,普通以太网有1500字节的MTU (各种隧道解决方案可能会减少一点)。
需要大缓冲区大小的原因是避免获得截断响应(TC标志),这会触发客户端重试相同的TCP查询。打开TCP连接相对较慢,因此在可以避免这种情况时,在性能方面是有益的。
一些策略,比如从更大的缓冲区开始,“如果它不起作用”就缩小缓冲区,是为了最大限度地避免截断的好处。
避免IP碎片本质上是得到了更多的优先权,明确建议有一个默认的1232缓冲区大小的所有。
您想要避免碎片的原因很简单,因为它会导致问题。存在可靠性问题(碎片可能永远不会到达)和安全问题(碎片更具欺骗性)。
根据我的理解,最初的EDNS0缓冲区大小规范对于避免碎片(尽管有人提到过)和对规范的解释在许多情况下不是很保守的原因是,仅仅是因为当时对负面影响的程度还没有清楚地理解。
但是,运行具有较大缓冲区大小(如默认情况下的4096 )的DNS会使这些问题变得明显。
https://serverfault.com/questions/1032873
复制相似问题