Linux上的DNS解析(并行/异步与串行/同步)

时间:2015-09-03 09:07:57

标签: linux networking dns

我注意到Linux默认情况下似乎有串行/同步DNS解析而不是并行/异步DNS解析。

我在Virtualbox中使用2个网络适配器(eth0eth1)进行了测试,一个用于NAT,另一个是连接到公共互联网的家用路由器的桥接网络。这给了我2个DNS服务器,一个来自VirtualBox NAT,另一个是我的家庭网络路由器的DNS。

这是我的/etc/resolv.conf

的内容
vagrant@vagrant-ubuntu-trusty-64:~$ cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 10.0.2.3
nameserver 10.1.1.1

然后我尝试使用eth0在我的根命名空间中联系谷歌两次,并在使用网桥eth1的网络命名空间中两次联系:

vagrant@vagrant-ubuntu-trusty-64:~$ curl -w "@timing_curl" -o /dev/null -s http://google.com

            time_namelookup:  0.004
               time_connect:  0.030
            time_appconnect:  0.000
           time_pretransfer:  0.031
              time_redirect:  0.000
         time_starttransfer:  0.066
                            ----------
                 time_total:  0.067

vagrant@vagrant-ubuntu-trusty-64:~$ curl -w "@timing_curl" -o /dev/null -s http://google.com

            time_namelookup:  0.004
               time_connect:  0.032
            time_appconnect:  0.000
           time_pretransfer:  0.032
              time_redirect:  0.000
         time_starttransfer:  0.065
                            ----------
                 time_total:  0.065

vagrant@vagrant-ubuntu-trusty-64:~$ sudo ip netns exec robots curl -w "@timing_curl" -o /dev/null -s http://google.com

            time_namelookup:  10.530
               time_connect:  10.560
            time_appconnect:  0.000
           time_pretransfer:  10.560
              time_redirect:  0.000
         time_starttransfer:  10.594
                            ----------
                 time_total:  10.594

vagrant@vagrant-ubuntu-trusty-64:~$ sudo ip netns exec robots curl -w "@timing_curl" -o /dev/null -s http://google.com

            time_namelookup:  5.519
               time_connect:  5.548
            time_appconnect:  0.000
           time_pretransfer:  5.548
              time_redirect:  0.000
         time_starttransfer:  5.582
                            ----------
                 time_total:  5.583

正如您所看到的,使用time_namelookup的根命名空间与使用eth0的漫游器命名空间之间的eth1存在显着差异。

我在/etc/resolv.conf中交换了2个名称服务器条目,这减少了机器人名称空间内的名称查找时间。我也尝试使用ping,这导致了相同的时间差异。

这一切都让我得出结论,默认情况下Linux内的DNS解析是顺序的。是否有一个原因?为什么不并行解析DNS?并且正确的解决方案是运行能够并行解析的本地递归DNS服务器吗?

(顺便说一句,这是用于卷曲https://gist.githubusercontent.com/spiermar/8888552/raw/efc0b09699b0fd619eb32638d4f1099db528fe54/curl-format

的格式

0 个答案:

没有答案