发现在高延迟下 dns 查询的 udp 和 tcp 方式延迟几乎一致

2022-02-07 19:55:53 +08:00
 brMu

测试方法,2 台服务器之间 ping 延迟 200ms (都在国外且 ping 稳定),其中一台安装了 dns server ,另一台用 dig 命令测试。

发现不管用是 udp 还是 tcp 方式去查询,延迟都在 200ms 左右。

udp 方式在 200ms 比较好理解,就一个来回,而 tcp 方式有个三次握手的过程,正常来说肯定要远高于 200ms ,至少在 500ms 以上才对。

通过抓包发现,tcp 方式第一条数据是 sackOK ,再接收到服务器端发回的 sackOK 后,DNS 结果就出来了,后面再是 ack 包,也就是实际上也只有一个来回就获得结果了,所以延迟也是在 200ms 左右。

这是 dns 的 tcp 协议的特点? sackOK 直接查询?有大佬能解释下吗?

1718 次点击
所在节点    分享发现
3 条回复
ho121
2022-02-07 21:07:46 +08:00
yin1999
2022-02-08 07:39:17 +08:00
@ho121 #1 接楼上,关于 DNS Transport over TCP ,RFC 里面有提到非规范要求的 TCP Fast Open ,允许客户端重新建立 tcp 连接时,在 syn 数据包中携带 payload ,可以减少一个 RTT
brMu
2022-02-08 09:29:39 +08:00
@yin1999 明白了,非常感谢,就是用的 TCP Fast Open ,那这样看来,在高延迟的网络环境下,DNS 的 TCP 和 UDP 延迟并没有什么太大的区别(只要支持 TFO ),而 DoT 和 DoH 在高延迟下就更慢了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/832308

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX