标签:
DNS: Domain Name System,指的是整一个系统,而不是一个特定的机器
NS: Nameserver,提供域名解析服务的机器,给它一个域名,它会给你解析出ip或者给你对应的NS信息
DNS server: 代替用户的机器向NS查询域名<->ip
A记录 -> 域名 -> ip
,直接给你ip
NS记录 -> 域名 -> NS
,给你一个NS地址
DNS 利用类似树状目录的架构,将主机名称的管理分配在不同层级的 DNS 服务器当中,经由分层管理, 所以每一部 DNS 服务器存储的数据就不会很多
Layer | host name | domain name |
---|---|---|
顶级 | edu | .tw |
二级 | ksu | edu.tw |
三级 | www | ksu.edu.tw |
这里给出一个不太严谨的例子。这里以查询www.baidu.com 为例, 展示DNS服务器如何一级级地查询到它的IP地址,中间要经过三个NS。如果DNS服务器里面有缓存(一段时间失效),就可以直接报给client。
下面使用dig +trace来模拟DNS查询出南京大学小百合bbs的地址
dig +trace bbs.nju.edu.cn ; <<>> DiG <<>> +trace bbs.nju.edu.cn ;; global options: +cmd . 3230 IN NS g.root-servers.net. . 3230 IN NS e.root-servers.net. . 3230 IN NS m.root-servers.net. . 3230 IN NS l.root-servers.net. . 3230 IN NS d.root-servers.net. . 3230 IN NS b.root-servers.net. . 3230 IN NS i.root-servers.net. . 3230 IN NS h.root-servers.net. . 3230 IN NS a.root-servers.net. . 3230 IN NS k.root-servers.net. . 3230 IN NS j.root-servers.net. . 3230 IN NS c.root-servers.net. . 3230 IN NS f.root-servers.net. ;; Received 460 bytes from 127.0.1.1#53(127.0.1.1) in 8 ms cn. 172800 IN NS b.dns.cn. cn. 172800 IN NS a.dns.cn. cn. 172800 IN NS ns.cernet.net. cn. 172800 IN NS e.dns.cn. cn. 172800 IN NS d.dns.cn. cn. 172800 IN NS c.dns.cn. ;; Received 513 bytes from 192.5.5.241#53(f.root-servers.net) in 300 ms edu.cn. 172800 IN NS ns2.cuhk.hk. edu.cn. 172800 IN NS deneb.dfn.de. edu.cn. 172800 IN NS dns.edu.cn. edu.cn. 172800 IN NS dns2.edu.cn. edu.cn. 172800 IN NS ns2.cernet.net. ;; Received 716 bytes from 203.119.25.1#53(a.dns.cn) in 30 ms NJU.edu.cn. 172800 IN NS DNS.NJU.EDU.CN. NJU.edu.cn. 172800 IN NS NS.NJU.EDU.CN. ;; Received 131 bytes from 202.112.0.35#53(dns.edu.cn) in 3639 ms bbs.nju.edu.cn. 10800 IN A 210.28.129.4 ;; Received 59 bytes from 202.119.32.12#53(NS.NJU.EDU.CN) in 167 ms
简化过程如下:
这是一个企业级的网站的例子,可以看出
如果搭建一个很简单的网站,也可以不用建立Nameserver,向上一级申请填写你的主机名和ip,这样就简便多了。这样在DNS查询的最后一步,结果是直接指向你的网站,而不是指向你的网站的dns服务器
解析一个域的DNS服务器可以有多个。这样数据的同步更新就是一个问题了,所以有了Master-Slave架构。
当Master更新了数据之后,Slave会向其拿更新的数据,这样维护DNS的时候就不用每一台都去更新了。
当你从ISP获得动态IP的时候,IP经常变换的情况就会显得很不方便。DDNS机制使得你可以频繁地将自己的IP报告给NS,然后Internet上面的DNS主机需要频繁地更新解析的记录(设定一个较短的最大缓存时间)。
DNS通常使用基于port 53的UDP,有时候数据量太大的时候使用TCP
cat /etc/services | grep 53 domain 53/tcp # Domain Name Server domain 53/udp
用户自定义的 ip <-> 域名
# cat /etc/hosts 127.0.0.1 localhost. 1.2.3.4 www.fake.com 3.4.5.6 www.fake1.com
存储DNS服务器的地址,在DHCP之后,DHCP client会自动修改这个配置文件。
#cat /etc/resolv.conf # Generated by dhcpcd nameserver 8.8.8.8
注意到,uclibc里面的__dns_lookup
函数,会使用__open_nameservers函数
从这个文件里面拿到的DNS服务器的地址,然后向这个地址发送DNS数据包。
Nslookup is a program to query Internet domain name servers. Nslookup has two modes: interactive and non-interactive
tan@tanhangbo-pc:~$ nslookup bbs.nju.edu.cn Server: 127.0.1.1 Address: 127.0.1.1#53 Non-authoritative answer: Name: bbs.nju.edu.cn Address: 210.28.129.4
tcpdump抓包结果如下,说明是进行了一次DNS查询。
host is a simple utility for performing DNS lookups. It is normally used to convert names to IP addresses and vice versa
@query1 tan@tanhangbo-pc:~$ host bbs.nju.edu.cn bbs.nju.edu.cn has address 210.28.129.4 @query2 tan@tanhangbo-pc:~$ host 8.8.8.8 8.8.8.8.in-addr.arpa domain name pointer google-public-dns-a.google.com. @query3 tan@tanhangbo-pc:~$ host www.baidu.com 8.8.8.8 Using domain server: Name: 8.8.8.8 Address: 8.8.8.8#53 Aliases: www.baidu.com is an alias for www.a.shifen.com. www.a.shifen.com has address 61.135.169.125 www.a.shifen.com has address 61.135.169.121
tcpdump抓包结果如下,说明是进行了一次DNS查询。
可以看出,host也可以作为反解,并且可以指定DNS服务器的地址让它进行查询。
dig (domain information groper) is a flexible tool for interrogating DNS name servers. It performs DNS lookups and displays the answers that are returned from the name server(s) that were queried. Most DNS administrators use dig to troubleshoot DNS problems because of its flexibility, ease of use and clarity of output. Other lookup tools tend to have less functionality than dig
从man的介绍来看,dig的逼格是最高的,上面已有一个实例,就不再介绍了。
推荐程度来说,dig > host > nslookup
http://linux.vbird.org/linux_server/0350dns.php
标签:
原文地址:http://www.cnblogs.com/tanhangbo/p/5380143.html