【性能】DNS 解析时快时慢,我该怎么办?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了【性能】DNS 解析时快时慢,我该怎么办?相关的知识,希望对你有一定的参考价值。
参考技术A DNS(Domain Name System),即域名系统,是互联网中最基础的一项服务,主要提供域名和 IP 地址之间映射关系的查询服务。DNS 不仅方便了人们访问不同的互联网服务,更为很多应用提供了,动态服务发现和全局负载均衡(Global Server Load Balance,GSLB)的机制。这样,DNS 就可以选择离用户最近的 IP 来提供服务。即使后端服务的 IP 地址发生变化,用户依然可以用相同域名来访问。
我们以极客时间的网站 time.geekbang.org 为例,来理解域名的含义。
这个字符串中,最后面的 org 是顶级域名,中间的 geekbang 是二级域名,而最左边的 time 则是三级域名。
如下图所示,注意点(.)是所有域名的根,也就是说所有域名都以点作为后缀,也可以理解为,在域名解析的过程中,所有域名都以点结束。
# host www.baidu.com
# nslookup www.baidu.com
# nslookup www.baidu.com 8.8.8.8
# dig www.baidu.com
# nslookup -debug time.geekbang.org
# time nslookup time.geekbang.org
# dig +trace +nodnssec time.geekbang.org
Why option rotate in resolv.conf picks up second nameserver as first every time?
https://access.redhat.com/solutions/1426263
nslookup-OK-but-ping-fail问题处理
https://plantegg.github.io/2019/01/09/nslookup-OK-but-ping-fail
time命令:测量命令的执行时间或者系统资源的使用情况
http://m.biancheng.net/linux/time.html
程序员如何学习和构建网络知识体系
https://plantegg.github.io/2020/05/24/%E7%A8%8B%E5%BA%8F%E5%91%98%E5%A6%82%E4%BD%95%E5%AD%A6%E4%B9%A0%E5%92%8C%E6%9E%84%E5%BB%BA%E7%BD%91%E7%BB%9C%E7%9F%A5%E8%AF%86%E4%BD%93%E7%B3%BB
计算机网络 DNS解析命令汇总
前言
本文参考倪朋飞老师的DNS 解析时快时慢,该怎么办文章,结合
DNS服务介绍和ICMP协议 ping和traceroute介绍这两篇文章,能对DNS从理论到具体解析流程有个理解。
DNS各种命令介绍
-
DNS 协议在 TCP/IP 栈中属于应用层,不过实际传输还是基于 UDP 或者 TCP 协议(UDP 居多) ,并且域名服务器一般监听在端口 53 上。
-
DNS 服务通过资源记录的方式,来管理所有数据,它支持 A、CNAME、MX、NS、PTR 等多种类型的记录。
参考DNS各项记录:
A 记录,是指定域名对应的IP地址。;
CNAME记录,别名记录,允许您将多个名字映射到同一台计算机;
NS 记录,是域名服务器记录,用来指定该域名由哪个DNS服务器来进行解析。
AAAA记录: 将主机名(或域名)指向一个IPv6地址,需要添加AAAA记录; -
执行
cat /etc/resolv.conf
命令,查询系统配置的DNS 服务器;
系统必须要配置 DNS 服务器,这样才可以通过域名来访问外部服务:
$ cat /etc/resolv.conf
nameserver 192.168.4.251
nameserver 172.20.64.240
- 执行
nslookup
命令,可以查询到这个域名的 A 记录
~ nslookup www.baidu.com
Server: 192.168.4.251
Address: 192.168.4.251#53
Non-authoritative answer:
www.baidu.com canonical name = www.a.shifen.com.
Name: www.a.shifen.com
Address: 110.242.68.3 // A 记录
Name: www.a.shifen.com
Address: 110.242.68.4 // A 记录
- 执行
dig
命令,可以展示递归查询的整个过程
输出里展示的各级域名的 NS 记录,其实就是各级域名服务器的地址,可以更清楚 DNS 解析的过程;
它执行 DNS 搜索,显示从受请求的域名服务器返回的答复;可以利用 dig 作为 DNS 问题的故障诊断,因为它灵活性好、易用、输出清晰。
第一部分显示 dig 命令的版本和输入的参数。
第二部分显示服务返回的一些技术详情,比较重要的是 status。如果 status 的值为 NOERROR 则说明本次查询成功结束。
第三部分中的 “QUESTION SECTION” 显示我们要查询的域名。
第四部分的 “ANSWER SECTION” 是查询到的结果。
第五部分则是本次查询的一些统计信息,比如用了多长时间,查询了哪个 DNS 服务器,在什么时间进行的查询等等。
~ dig www.baidu.com
// 第一部分
; <<>> DiG 9.10.6 <<>> www.baidu.com
;; global options: +cmd
// 第二部分
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 29880,
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 13, ADDITIONAL: 27
//第三部分
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.baidu.com. IN A
//第四部分
;; ANSWER SECTION:
www.baidu.com. 52 IN CNAME www.a.shifen.com.
www.a.shifen.com. 209 IN A 110.242.68.3
www.a.shifen.com. 209 IN A 110.242.68.4
;; AUTHORITY SECTION:
com. 133139 IN NS b.gtld-servers.net.
com. 133139 IN NS j.gtld-servers.net.
com. 133139 IN NS c.gtld-servers.net.
com. 133139 IN NS h.gtld-servers.net.
com. 133139 IN NS i.gtld-servers.net.
com. 133139 IN NS l.gtld-servers.net.
com. 133139 IN NS f.gtld-servers.net.
com. 133139 IN NS a.gtld-servers.net.
com. 133139 IN NS m.gtld-servers.net.
com. 133139 IN NS e.gtld-servers.net.
com. 133139 IN NS d.gtld-servers.net.
com. 133139 IN NS g.gtld-servers.net.
com. 133139 IN NS k.gtld-servers.net.
;; ADDITIONAL SECTION:
a.gtld-servers.net. 2901 IN A 192.5.6.30
a.gtld-servers.net. 10065 IN AAAA 2001:503:a83e::2:30
b.gtld-servers.net. 83957 IN A 192.33.14.30
b.gtld-servers.net. 2320 IN AAAA 2001:503:231d::2:30
c.gtld-servers.net. 83397 IN A 192.26.92.30
c.gtld-servers.net. 145158 IN AAAA 2001:503:83eb::30
d.gtld-servers.net. 16584 IN A 192.31.80.30
d.gtld-servers.net. 133139 IN AAAA 2001:500:856e::30
e.gtld-servers.net. 82924 IN A 192.12.94.30
e.gtld-servers.net. 60534 IN AAAA 2001:502:1ca1::30
f.gtld-servers.net. 83959 IN A 192.35.51.30
f.gtld-servers.net. 60853 IN AAAA 2001:503:d414::30
g.gtld-servers.net. 17022 IN A 192.42.93.30
g.gtld-servers.net. 133139 IN AAAA 2001:503:eea3::30
h.gtld-servers.net. 82708 IN A 192.54.112.30
h.gtld-servers.net. 60431 IN AAAA 2001:502:8cc::30
i.gtld-servers.net. 14862 IN A 192.43.172.30
i.gtld-servers.net. 60431 IN AAAA 2001:503:39c1::30
j.gtld-servers.net. 84156 IN A 192.48.79.30
j.gtld-servers.net. 133139 IN AAAA 2001:502:7094::30
k.gtld-servers.net. 21663 IN A 192.52.178.30
k.gtld-servers.net. 60853 IN AAAA 2001:503:d2d::30
l.gtld-servers.net. 16592 IN A 192.41.162.30
l.gtld-servers.net. 87523 IN AAAA 2001:500:d937::30
m.gtld-servers.net. 58701 IN A 192.55.83.30
m.gtld-servers.net. 133139 IN AAAA 2001:501:b1f9::30
// 第五部分
;; Query time: 167 msec
;; SERVER: 192.168.4.251#53(192.168.4.251)
;; WHEN: Thu Jul 08 10:58:31 CST 2021
;; MSG SIZE rcvd: 897
DNS优化方法
-
可以把主机名和 IP 地址的映射关系,写入本机的 /etc/hosts 文件中。这样,指定的主机名就可以在本地直接找到目标 IP。可以作为优化dns解析的手段;
-
对 DNS 解析的结果进行缓存。缓存是最有效的方法,但要注意,一旦缓存过期,还是要去 DNS 服务器重新获取新记录。不过,这对大部分应用程序来说都是可接受的。
-
对 DNS 解析的结果进行预取。这是浏览器等 Web 应用中最常用的方法,也就是说,不等用户点击页面上的超链接,浏览器就会在后台自动解析域名,并把结果缓存起来。
-
使用 HTTPDNS 取代常规的 DNS 解析。这是很多移动应用会选择的方法,特别是如今域名劫持普遍存在,使用 HTTP 协议绕过链路中的 DNS 服务器,就可以避免域名劫持的问题。
-
基于 DNS 的全局负载均衡(GSLB)。这不仅为服务提供了负载均衡和高可用的功能,还可以根据用户的位置,返回距离最近的 IP 地址。
DNS解析为何使用UDP协议
-
区域传送时使用TCP
DNS的规范规定了2种类型的DNS服务器,一个叫主DNS服务器,一个叫辅助DNS服务器。在一个区中主DNS服务器从自己本机的数据文件中读取该区的DNS数据信息,而辅助DNS服务器则从区的主DNS服务器中读取该区的DNS数据信息。当一个辅助DNS服务器启动时,它需要与主DNS服务器通信,并加载数据信息,这就叫做区传送(zone transfer)。
辅域名服务器会定时(一般时3小时)向主域名服务器进行查询以便了解数据是否有变动。如有变动,则会执行一次区域传送,进行数据同步。区域传送将使用TCP而不是UDP,因为数据同步传送的数据量比一个请求和应答的数据量要多得多。 -
客户端向DNS服务器查询域名使用UDP;
DNS需要优先解决的快速查询,以及减少对DNS服务器的压力。
如果使用TCP查询DNS,需要三次握手+一次查询RTT+四次挥手。而用UDP查询,只需要1RTT,当然如果发生超时丢包,重传就是了,使用UDP对服务器的压力也小很多。另外你也可以试想下TCP丢包的场景,也是需要重传的,只是这部分的功能,被包括在了TCP协议里面。
以上是关于【性能】DNS 解析时快时慢,我该怎么办?的主要内容,如果未能解决你的问题,请参考以下文章