讲解原理的基本方法

讲解原理的基本方法,第1张

DNS原理入门

DNS是互联网的核心协议之一。无论是上网还是编程,都需要有所了解。

本文详细介绍了DNS的原理,以及如何使用工具软件观察其运行。我的目标是,看完这篇文章,你能充分了解DNS。

一、什么是DNS?

DNS(域名系统的缩写)的作用很简单,就是根据域名找出IP地址。你可以把它想象成一本巨大的电话簿。

例如,如果你想访问域名math.stackexchange.com,你必须首先通过DNS找到它的IP地址是151.101.129.69。

如果你不知道为什么一定要找出IP地址才能在网上交流,我建议你先看看我写的互联网协议入门。

二。查询过程

虽然只需要返回一个IP地址,但是DNS的查询过程非常复杂,分为几个步骤。

Dig可以显示整个查询过程。

$挖math.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字节。

如果不想看到那么多内容,可以使用+short参数。

$dig+做空math.stackexchange.com

151.101.129.69

151.101.65.69

151.101.193.69

151.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和Level3的4.2.2.2。

这台机器只查询自己的DNS服务器,dig命令有一个@参数,显示查询其他DNS服务器的结果。

$dig@4.2.2.2math.stackexchange.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.example.com的www,也称“三级域名”,是用户在自己的域内分配给服务器的名称,用户可以任意分配。

综上所述,域名的层次结构如下。

主机名。子域。顶级域名。根域

#那就是

主机.sld.tld.root

五、根域名服务器

DNS服务器根据域名的级别进行分层查询。

需要明确的是,每个级别域名都有自己的NS记录,NS记录指向该级别域名的域名服务器。这些服务器知道下一级域名的各种记录。

所谓“分层查询”,就是从根域名开始依次查询每一级域名的NS记录,直到找到最终的IP地址。流程大致如下。

  • 从“根域名服务器”中找到NS记录和“顶级域名服务器”的一个记录(IP地址)
  • 从“顶级域名服务器”中找到NS记录和“二级域名服务器”的一个记录(IP地址)
  • 从“二级域名服务器”中找出“主机名”的IP地址
  • 仔细看上面的过程,你可能会发现其中并没有提到DNS服务器是如何知道“根域名服务器”的IP地址的。答案是“根域名服务器”。一般NS记录和IP地址不会改变,所以内置在DNS服务器中。

    以下是内置根域名服务器IP地址的示例。

    在上面的列表中,根域名的三个NS记录(。root)列出了:A.ROOT-SERVERS.NET、B.ROOT-SERVERS.NET和C.ROOT-SERVERS.NET,以及它们的IP地址(即A记录):198.41.0.4、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。最先回复的根域名服务器将被缓存,以后只向此服务器发送请求。

    然后第二段。

    结果显示13NS的记录。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记录。

    $dignscom

    $挖nsstackexchange.com

    +短参数可以显示简化的结果。

    $dig+shortnscom

    $dig+shortnsstackexchange.com

    八。DNS的记录类型

    IP和域名的对应关系称为“记录”。根据使用场景,“记录”可以分为不同的类型(类型)。正如你之前看到的,有A记录和NS记录。

    常见的DNS记录类型如下。

    (1)A:Address记录(Address),返回域名指向的IP地址。

    (2)NS:域名服务器记录(NameServer),返回存储下一级域名信息的服务器的地址。该记录只能设置为域名,不能设置为IP地址。

    (3)MX:邮件交换,返回接收邮件的服务器地址。

    (4)CNAME:规范名称记录,返回另一个域名,即当前查询的域名是另一个域名的跳转。详见下文。

    (5)Ptr:指针记录,仅用于从IP地址查询域名。详见下文。

    一般来说,为了保证服务的安全性和可靠性,至少应该有两条NS记录,可以有多条A记录和MX记录,这样就提供了服务的冗余性,防止了单点故障。

    CNAME记录主要用于域名内部跳转,为服务器配置提供灵活性,用户不易察觉。例如,域名facebook.github.io就是一项CNAME记录。

    $digfacebook.github.io

    ...

    ;;回答部分:

    github.map.fastly.netCNAME的facebook.github.io.3370。

    github.map.fastly.net。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-x192.30.252.153

    ...

    ;;回答部分:

    153.252.30.192.in-addr.arpa.3600inptrpages.github.com。

    以上结果显示,这台服务器在192.30.252.153的域名是pages.github.com。

    反向查询的一个应用是防止垃圾邮件,即验证邮件的IP地址是否实际具有所声称的域名。

    Dig命令可以查看指定的记录类型。

    $挖一个github.com

    $挖nsgithub.com

    $digMXgithub.com

    九。其他DNS工具

    除了dig,还有其他一些小工具可以用。

    (1)主机命令

    host命令可以看作是dig命令的简化版本,它返回当前请求的域名的各种记录。

    $主持人github.com

    github.com已经和192.30.252.121谈过了

    github.com邮件由ALT2.ASPMX.L.GOOGLE.COM五号负责处理。

    github.com邮件由ALT4.ASPMX.L.GOOGLE.COM10号处理。

    github.com邮件由ALT3.ASPMX.L.GOOGLE.COM10号处理。

    github.com邮件由ALT1.ASPMX.L.GOOGLE.COM五号负责处理。

    github.com邮件由ASPMX.L.GOOGLE.COM1号处理。

    $主持人facebook.github.com

    facebook.github.com是github.map.fastly.net的别名。

    github.map.fastly.net已经和103.245.222.133谈过了

    host命令还可以用于反向查询,即从IP地址查询域名,相当于dig-xx。

    $主持人192.30.252.153

    153.252.30.192.in-addr.arpa域名指针pages.github.com。

    (2)nslookup命令

    nslookup命令用于交互式查询域名记录。

    $nslookup

    >facebook.github.io

    服务器:192.168.1.253

    地址:192.168.1.253#

    53非权威回答:

    Facebook.github.iocanonicalname=github.map.fastly.net。

    姓名:github.map.fastly.net

    地址:103.245.222.133

    >

    (3)whois命令

    whois命令用于检查域名的注册情况。

    $谁是github.com

    X.参考链接

    DNS:精彩部分,作者皮特·基恩

    DNS101,作者马克·麦克唐纳

    (完)

    欢迎分享,转载请注明来源:内存溢出

    原文地址: http://outofmemory.cn/zz/764416.html

    (0)
    打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
    上一篇 2022-05-01
    下一篇 2022-05-01

    发表评论

    登录后才能评论

    评论列表(0条)

    保存