欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

DNS原理

程序员文章站 2024-03-24 13:21:46
...

DNS

简介

DNS(Domain Name Service),域名解析服务,是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCP和UDP端口53。

DNS功能

  • 正向解析,将主机名映射到IP地址
  • 反向解析,通过IP得到主机名。

域名层级结构

在了解层级结构我们需要先知道什么是Fully Qualified Domain Name(FQDN完全限定域名),例如在cube.com这个域中主机名为ice的主机,其FQDN就是ice.cube.com
我们经常吧域名写成类似www.baidu.com其实在com后面还有一个’.’这个’.’就是域名空间的根。在根之下就是*域(TOP Level Domain,TLD)在每个*域之下还有二级域,二级域之下还有许多子域,而查询某个域名的时候,实际上会从后往前找也就是。例如查找ice.cube.com. 会先去找根服务器,根服务器返回.com的地址,再去请求.com,.com返回cube.com地址,再去请求cube.com。这时候cube.com发现ice.cube.com确实属于自己管辖,于是这时候返回IP地址,域名解析完成。
层级结构如下
DNS原理

查询类型

  • 递归查询:简单理解,当有主机询问本地DNS服务器www.baidu.com这时候,本地DNS会查找资源记录,如果查找到了便返回,这个就是递归查询
  • 迭代查询:简单的就是,当本地DNS发现找不到改资源记录,就会像根服务器发起请求,然后在向*域发起请求,一层一层迭代。直到找到对应的资源记录(当然如果你请求的域名没有对应的资源记录,这也是找不到的。这里说的是存在资源记录的情况下会一直查找下去,自顶向下,)。

域名解析过程

例如要寻找主机名为ice.cube.com,且DNS客户端为CentOS系统
1.主机查找本地的/etc/hosts文件,如果有对应的记录,直接可以访问。如果没有则到下一步
2.向本地的DNS服务器发起请求本地的DNS服务查找自己的记录,看能否找到请求的IP地址如果有这个地址,则返回地址给主机,如果不能则到下一步
3.发起迭代请求,首先向根服务器发起请求
4.根服务器发现无法给出ice.cube.com的地址,但是它能提供*域.com的地址,于是返回.com的地址
5.于是本地DNS服务器发送请求给.com名称服务器。询问ice.cube.com的IP地址
6.com名称服务器发现无法给出具体地址,但是知道cube.com的地址,于是.com返回.cube.com的地址。
7.本地DNS服务器向.cube.com发起请求。
8.当.cuce.com查看请求域名为ice.cube.com,查找记录,得到地址。然后返回本地DNS服务器地址。
9.本地DNS服务器缓存该地址并返回给主机
10,11.主机得到ice.cube.com对应的IP于是可以正常通信

DNS原理

DNS服务器的类型

  • 主服务器
  • 辅助服务器
  • 缓存服务器

域和区域

在一组公共的DNS服务器上配置的DNS主机的集合被称为“区域(zone)”。在简单的网络上,一个区域可能会表示一个完整的DNS域,例如,域punyisp.com可能作为单独的区域进行DNS配置,在复杂的网络上,对子域的DNS配置有时会委派给其他区域,区域委派使负责子网管理的管理员能够直接管理子网的DNS配置,例如,域cocacola.com的管理员会将子域dallas.cocacola.com的DNS配置委派给一个区域,而这个区域是由Dallas办公室中的管理员控制的。这样就能近距离对域dallas.cocacols.com上的主机进行监视

区域文件

区域的DNS配置存储在一个区域文件中,当需要响应查询和发起查询时,DNS服务器会引用区域文件中的信息。区域文件是一个带有标准架构的文本文件,趋于稳健的内容由多个资源记录构成,一个资源记录就是一行文本。提供了一组有用的DNS配置信息。
一些常用的资源记录类型

  • SOA:Start Of Authority,起始授权记录,为区域指定了权威的名称服务器; 一个区域解析库有且只能有一个SOA记录,而且必须放在第一条;
  • NS:Name Service,NS表示名称服务器,NS记录为区域指定了一个名称服务器。虽然区域中可以有多个名称服务器(因此会有多条NS记录)但是只能有一条指定权威名称服务器的SOA记录
  • A: Address, 地址记录,将域名映射到ipv4地址
  • AAAA:地址记录, 将域名映射到ipv6地址
  • CNAME:Canonical Name,规范名称。域名的别名;
  • PTR:Pointer,IP –> FQDN
  • MX:Mail eXchanger,邮件交换器;

资源记录的定义格式:

语法: name [TTL] IN RR_TYPE value
SOA:

  • name: 当前区域的名字;例如”ice.cube.com”;
  • value:有多部分组成

(1) 当前区域的区域名称(也可以使用主DNS服务器名称);
(2) 当前区域管理员的邮箱地址;但地址中不能使用@符号,一般使用点号来替代;
(3) (主从服务协调属性的定义以及否定答案的TTL)

例如:

ns1.icecube.com  IN SOA ns1.icecube.com  admin.icecube.com (
             20180811   ; serial  
                    1D  ; refresh
                    1H  ; retry
                    1W  ; expire
                    3H )    ; minimum
    ```             
ns1.icecube.com这个是当前区域的名字
admin.icecube.com 当前区域管理员的邮箱,这里的@要用'.'代替实际上是aaa@qq.com.com
serial:***
refresh:表示备用DNS服务请求首选服务器更新其区域信息的时间间隔
retry :指定在区域更新未成功时,需要等待多长时间,才应再次进行尝试
expire:指定备用名称服务器保留未刷新记录的上限时间
minimum:指定被输出区域记录的默认TTL

NS:

  • name: 当前区域的区域名称
  • value:当前区域的某DNS服务器的名字,例如ns1.icecube.com;

注意:一个区域可以有多个ns记录;
例如

        icecube.com.   IN A  192.168.253.128

MX:

  • name: 当前区域的区域名称
  • value:当前区域某邮件交换器的主机名;

注意:MX记录可以有多个;但每个记录的value之前应该有一个数字表示其优先级;
例如

    icecube.com.   IN MX  192.168.253.128

A:

  • name:某FQDN,例如.
  • value:某IPv4地址;

例如

www.icecube.com. IN A 192.168.253.128

AAAA:

  • name:FQDN
  • value: IPv6

PTR:

  • name:IP地址,有特定格式,IP反过来写,而且加特定后缀;例如1.2.3.4的记录应该写为4.3.2.1.in-addr.arpa.;
  • value:FQND

CNAME:

  • name:FQDN格式的别名;
  • value:FQDN格式的正式名字;.

例如:

web.icecube.com. IN CNAME  www.icecube.com

注意:
(1) TTL可以从全局继承;
(2) @表示当前区域的名称;可以用@替代当前区域名称
(3) 相邻的两条记录其name相同时,后面的可省略;
(4) 对于正向区域来说,各MX,NS等类型的记录的value为FQDN,此FQDN应该有一个A记录;