DNS原理
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服务器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主机的集合被称为“区域(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记录;
下一篇: 仿写《今日头条》的tag选择页面