V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
brMu
V2EX  ›  分享发现

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

  •  
  •   brMu · 2022-02-07 19:55:53 +08:00 · 1704 次点击
    这是一个创建于 1047 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

    3 条回复    2022-02-08 09:29:39 +08:00
    ho121
        1
    ho121  
       2022-02-07 21:07:46 +08:00 via Android   ❤️ 1
    yin1999
        2
    yin1999  
       2022-02-08 07:39:17 +08:00 via Android   ❤️ 1
    @ho121 #1 接楼上,关于 DNS Transport over TCP ,RFC 里面有提到非规范要求的 TCP Fast Open ,允许客户端重新建立 tcp 连接时,在 syn 数据包中携带 payload ,可以减少一个 RTT
    brMu
        3
    brMu  
    OP
       2022-02-08 09:29:39 +08:00
    @yin1999 明白了,非常感谢,就是用的 TCP Fast Open ,那这样看来,在高延迟的网络环境下,DNS 的 TCP 和 UDP 延迟并没有什么太大的区别(只要支持 TFO ),而 DoT 和 DoH 在高延迟下就更慢了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2731 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 14:06 · PVG 22:06 · LAX 06:06 · JFK 09:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.