Do53、DoT、DoH 速度比较

测试方式

用 Windows 电脑向阿里云的 223.5.5.5 服务器发送请求。本文只提供一个直观的比较,并不追求全面的讲解。

DOH

端口号 443。

接口比较复杂,要求我们制作一个 dns 查询包,然后将其转换成 base64 编码,再去掉末尾多余的 =(base64 规定不足 4 字节的整数倍则需要补充 =)。然后将得到的字符串作为 dns 参数放在 url 中。返回的结果也是二进制数据。

curl -s -o output.txt https://223.5.5.5/dns-query?dns=A6QBAAABAAAAAAAAB2FsaWJhYmEDY29tAAABAAE -w "%{time_total}s\n"
  • Windows 自带 curl:50 ms
  • MSYS2 curl:80 ms
  • WSL curl:65 ms

或者直接用 curl 完成查询(需要比较新的版本):

curl -s --doh-url https://223.5.5.5/dns-query https://baidu.com -w "%{time_namelookup}s\n" -o output.txt
  • Windows 自带 curl:55 ms
  • MSYS2 curl:100 ms
  • WSL curl:80 ms(要小心代理的影响,如果被代理则 dns 查询是微秒级别的时间)

DoT

端口号 853。

本机安装的 curl 都不支持 --dns-servers 选项,所以不能使用 curl 完成 DoT 和普通 DNS 的查询。用 WSL 的 dig 查询会在结果中输出请求时间,似乎精度只能达到 10 ms 级别。

# wsl
dig @223.5.5.5 baidu.com +tls

耗时 60~70 ms。

Do53

端口号 53。

# wsl
dig @223.5.5.5 baidu.com

耗时 10~20 ms。

结论

Do53 远远快于 DoT 和 DoH,DoT 略快于 DoH,但有些情况下 DoH 会比 DoT 快。