
DNS是互联网的核心协议之一。不管是不管是上网还是编程,你都需要了解一些。
本文详细介绍了DNS的原理,以及如何使用工具软件观察其运行。我的目标是,看完这篇文章,你能充分了解DNS。
一、DNS什么是DNS?
DNS(域名系统的缩写)的作用很简单,就是根据域名找出IP地址。你可以把它想象成一本巨大的电话簿。
例如,如果你想访问域名math.stackexchange.com,你必须首先通过DNS找到它的IP地址是151.101.129.69。
如果你不I don’我不知道为什么你必须找到IP地址才能在网上交流,我建议你先看看我的《互联网协议入门》。
二、查询流程
虽然只需要返回一个IP地址,但是DNS的查询过程非常复杂,分为几个步骤。
Dig可以显示整个查询过程。
$digmath.stackexchange.com
上面的命令将输出六条信息。
第一段是查询参数和统计。
第二段是查询的内容。
以上结果显示,查询域名math.stackexchange.com的A记录,A是地址的缩写。
第三段是DNS服务器的回复。
上述结果表明,math.stackexchange.com有四个A记录,即四个IP地址。00是TTL值(生存时间的缩写),表示缓存时间,即600秒内不需要再次查询。
第四部分显示stackexchange.com的NS记录(名称服务器的缩写),即哪些服务器负责管理stackexchange.com的DNS记录。
上述结果表明,在stackexchange.com有四个NS记录,即四个域名服务器。你可以通过查询任何一个来找到math.stackexchange.com的IP地址。
第五段是上面四个域名服务器的IP地址,和上一段一起返回。
第六段是DNS服务器的一些传输信息。
以上结果显示,本地DNS服务器为192.168.1.253,查询端口为53(DNS服务器默认端口),响应长度为305字节。
如果你不如果不想看到太多内容,可以使用短参数。
$ dig short math . stack exchange . com 151 . 101 . 129 . 69151 . 101 . 65 . 69151 . 101 . 193 . 101 . 1 . 69
上述命令只返回与math.stackexchange.com对应的四个IP地址(即一条记录)。
三、DNS服务器
让让我们按照前面的例子一步一步地恢复它。这台机器怎么能得到域名math.stackexchange.com的IP地址?
首先,电脑必须知道DNS服务器的IP地址,否则无法上网。只有通过DNS服务器才能知道一个域名的IP地址是什么。
DNS服务器的IP地址,可能是动态的,每次上线都是由网关分配的,这叫DHCP机制;也可能是预先指定的固定地址。在Linux系统中,DNS服务器的IP地址保存在/etc/resolv.conf文件中。
上例中的DNS服务器是192.168.1.253,这是一个内部网地址。还有一些公共DNS服务器也可以使用,最著名的有谷歌的8.8.8.8和Level 3的4.2.2.2。
这台机器只查询自己的DNS服务器,dig命令有一个@参数,显示查询其他DNS服务器的结果。
$ dig @ math . stack exchange . com
上述命令指定查询DNS服务器4.2.2.2。
四、域名的层次结构
DNS服务器怎么知道每个域名的IP地址?答案是分级查询。
请仔细看前面的例子。每个域名的末尾都多了一个点。
例如,域名math.stackexchange.com显示为math.stackexchange.com。这不是疏忽,实际上所有域名的末尾都有一个根域名。
例如,www.example.com的真实域名是www.example.com.root,缩写为www.example.com。因为根域名。root对于所有域名都是一样的,通常会被省略。
根域名的下一级称为顶级域(TLD),如。com和。网;下一个层次叫做二级域名(缩写为SLD),比如。www.example.com的例子。这个级别的域名可以由用户注册;下一级是主机名(host),如www在www.example.com也称为三级域名。这是用户在自己的域中分配给服务器的名称,用户可以随意分配。
综上所述,域名的层次结构如下。
主机名。子域名。顶级域名。根域名#是host.sld.tld.root
五、根域名服务器
DNS服务器根据域名的级别进行分层查询。
需要明确的是,每个级别域名都有自己的NS记录,NS记录指向该级别域名的域名服务器。这些服务器知道下一级域名的各种记录。
所谓的分层查询就是从根域名开始依次查询每一级域名的NS记录,直到找到最终的IP地址。流程大致如下。
从根域名服务器找到NS记录和顶级域名服务器的一个记录(IP地址)。
从顶级域名服务器找到NS记录和二级域名服务器的一条记录(IP地址)。
找出主机名从辅助域名服务器
仔细观察上面的过程,您可能会发现其中没有提到DNS服务器如何知道根域名服务器。答案是根域名服务器。一般NS记录和IP地址不会改变,所以内置在DNS服务器中。
以下是内置根域名服务器IP地址的示例。
在上面的列表中,根域名的三个NS记录(。root)列出:A.ROOT-SERVERS.NET、B.ROOT-SERVERS.NET和C.ROOT-SERVERS.NET,以及它们的IP地址(即一个记录)198 . 41 . 04、192 . 228 . 79 . 201、192 . 33 . 4 . 12。
另外可以看到所有记录的TTL值都是3600000秒,相当于1000小时。即每1000小时查询一次根域名服务器列表。
目前,世界上有十三组根域名服务器,从A.ROOT-SERVERS.NET到M.ROOT-SERVERS.NET。
六、分层查询的示例
dig命令的Trace参数可以显示DNS的整个分层查询过程。
$挖迹math.stackexchange.com
上述命令的第一段列出了根域名的所有NS记录。即所有根域名服务器。
DNS服务器根据根域名服务器内置的IP地址,向所有这些IP地址发送查询请求,查询顶级域名服务器com的NS记录。在math.stackexchange.com。最先回复的根域名服务器将被缓存,以后只向此服务器发送请求。
然后第二段。
结果显示13 NS的记录。com域名,并返回每条记录对应的IP地址。
然后,DNS服务器向这些顶级域名服务器发送查询请求,查询math.stackexchange.com子域名stackexchange.com的NS记录。
上面的结果显示stackexchange.com有四个NS记录,返回每个NS记录对应的IP地址。
然后,DNS服务器向上述四个NS服务器查询math.stackexchange.com的主机名。
上述结果表明,math.stackexchange.com有四个A记录,即所有四个IP地址都可以访问网站。它还显示第一个返回结果的NS服务器是ns-463.awsdns-57.com,其IP地址是205.251.193.207。
七、NS记录的查询
Dig命令可以分别查看每个域名的NS记录。
$迪格斯康$迪格斯stackexchange.com
短参数可以显示简化的结果。
$挖短nscom $挖短ns stackexchange.com
八、DNS的DNS记录类型
IP和域名的对应关系称为记录。根据使用场景,记录可以分为不同的类型(类型)。正如你前面看到的,有A记录和NS记录。
常见的DNS记录类型如下。
(1)A: Address记录(Address),返回域名指向的IP地址。
(2)NS:域名服务器记录(Name Server),返回存储下一级域名信息的服务器的地址。该记录只能设置为域名,不能设置为IP地址。
(3)MX:邮件交换,返回接收邮件的服务器地址。
(4)CNAME:规范名称记录,返回另一个域名,即当前查询的域名是另一个域名的跳转。详见下文。
(5)PTR:指针记录,仅用于从IP地址查询域名。详见下文。
一般来说,为了保证服务的安全性和可靠性,至少要有两条NS记录,可以有多条A记录和MX记录,这样就提供了服务的冗余性,防止了单点故障。
CNAME记录主要用于域名内部跳转,为服务器配置提供灵活性,用户不易察觉。例如,域名facebook.github.io就是一项CNAME记录。
$ dig facebook.github.io.回答部分:github.map.fastly.net.github.map.fastly.net CNAME的facebook.github.io.3370。600在103.245.222.133
以上结果显示facebook.github.io的CNAME记录指向github.map.fastly.net。也就是说,当用户查询facebook.github.io时,实际返回的是github.map.fastly.net的IP地址。这样做的好处是,当你改变服务器的IP地址时,你只需要修改github.map.fastly.net的域名,而用户 facebook.github.io域名不需要修改。
因为CNAME记录是替换的,一旦在域名中设置了CNAME记录,就不能设置其他记录(如A记录和MX记录)。这是为了防止冲突。例如,foo.com指向bar.com,两个域名有各自的MX记录。如果不一致,就会出现问题。由于MX记录通常是为顶级域名设置的,一般不允许用户为顶级域名设置CNAME记录。
PTR记录用于从IP地址反转域名。dig命令的-x参数用于查询PTR记录。
$ dig-x 192.30.252.153.回答部分:153 . 252 . 30 . 192 . IN-addr . arpa . 3600在PTR pages.github.com。
以上结果显示,这台服务器在192.30.252.153的域名是pages.github.com。
反向查询的一个应用是防止垃圾邮件,即验证邮件的IP地址是否实际具有所声称的域名。
Dig命令可以查看指定的记录类型。
$ digagithub . com $ digns github . com $ digmx github.com
九、其他DNS工具
除了dig,还有其他一些小工具可以用。
(1)1)主机命令
host命令可以看作是dig命令的简化版本,它返回当前请求的域名的各种记录。
$ host github . com github . com has address 192 . 30 . 252 . 121 github . com mail由5ALT2处理。ASPMX . l . Google . com . github . commaili由10ALT4处理。ASPMX . l . Google . com . github . commail由10ALT3处理。ASPMX . l . Google . com . github . commaili由5ALT1处理。ASPMX . l . Google . com . github . commaili处理by1ASPMX.L.GOOGLE.COM。$ host Facebook . github . com Facebook . github . comisanaliasforgithub . map . fastly . net . github . map . fastly . net has address 103 . 245 . 222 . 133
host命令还可以用于反向查询,即从IP地址查询域名,相当于dig -x x。
$ host 192 . 30 . 252 . 153153 . 252 . 30 . 192 . in-addr . arpa域名指针pages.github.com。
(2)nslookup命令
nslookup命令用于交互式查询域名记录。
$ nslookupface book . github . io server:192 . 168 . 1 . 253地址:192 . 168 . 1 . 253 # 53非权威答案:Facebook . github . io canonical name=github . map . fastly . net . name:github . map . fastly . net地址:103.245.222.133
(3)whois命令
whois命令用于检查域名的注册情况。
$谁是github.com
十、参考链接
DNS:精彩部分,作者皮特基恩
DNS 101,作者马克麦克唐纳
……结束……
附,DNS百科全书,可过滤
DNS(域名系统)作为一种在互联网上映射域名和IP地址的分布式数据库,可以让用户更容易地访问互联网,而不必记住机器可以直接读取的IP字符串。通过主机名最终得到主机名对应的IP地址的过程称为域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。在RFC文档中,RFC 2181规定了DNS,RFC 2136规定了DNS的动态更新,RFC 2308规定了DNS查询的反向缓存。
DNS功能
每个IP地址都可以有一个主机名,主机名由一个或多个用小数点分隔的字符串组成。用主机名,唐不要死记硬背每个IP设备的IP地址,只要记住相对直观有意义的主机名就可以了。这就是DNS协议的功能。
有两种方法可以将主机名映射到IP地址:
1)静态映射:每台设备都配置了主机到IP地址的映射,每台设备独立维护自己的映射表,只供本设备使用;
2)动态映射,设置一套域名解析系统(DNS),只在专门的DNS服务器上配置主机与IP地址的映射。对于需要使用主机名进行网络通信的设备,需要先从DNS服务器查询主机对应的IP地址。
通过主机名最终得到主机名对应的IP地址的过程称为域名解析(或主机名解析)。解析域名时,可以先使用静态域名解析方法,如果静态域名解析不成功,再使用动态域名解析方法。可以将一些常用域名放入静态域名解析表中,这样可以大大提高域名解析效率。
域名系统
DNS服务由安装了DNS服务器端软件的计算机提供。服务器端软件可以基于类linux操作系统,也可以基于Windows操作系统。安装DNS服务器软件后,您可以在指定的位置创建一个区域文件。所谓的区域文件是包含该域中的域名到IP地址解析记录的文件。例如,文件的内容可能如下:主名称服务器=dns2(主服务器的主机名是)
Serial=2913(序列号=2913、)这个序列号的作用是在二级域名服务器来拷贝的时候拷贝这个文件,如果数量增加的话。
刷新=10800 (3小时)(刷新=10800秒,辅助域名服务器每3小时查询一次主服务器)
重试=3600 (1小时)(重试=3600秒,当辅助域名服务尝试在主服务器上查询更新,并且连接失败时,辅助域名服务器每1小时访问一次主域名服务器)
Expire=604800 (7天)(Expire=604800秒,二级域名服务器更新到一级服务失败后,在7天后删除记录。)
TTL=3600 (1小时)(默认生存期=3600秒,缓存服务器保存记录1小时。也就是告诉缓存服务器保存该域的解析记录1小时)。
DNS安全问题
1.针对域名系统的恶意攻击:DDOS攻击瘫痪域名解析。
2.域名劫持:修改注册信息,劫持分析结果。
3.国家域名系统安全事故:瘫痪。ly 域名及的域名经营权变更。af 域名。
4.系统上运行的DNS服务存在漏洞,导致黑客获得访问权限,篡改DNS信息。
5.不合适5。DNS设置导致一些敏感信息泄露。为黑客进一步攻击提供了有力的信息。









