009-DNS域名解析系统

Posted bjlhx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了009-DNS域名解析系统相关的知识,希望对你有一定的参考价值。

一、概述

  DNS是域名系统(DomainNameSystem)的缩写,该系统用于命名组织到域层次结构中的计算机和网络服务。域名是由圆点分开一串单词或缩写组成的,每一个域名都对应一个惟一的IP地址,在Internet上域名与IP地址之间是一一对应的,DNS就是进行域名解析的服务器。DNS命名用于Internet等TCP/IP网络中,通过用户友好的名称查找计算机和服务。DNS是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库。

  DNS协议就是用来将域名解析到IP地址的一种协议,当然,也可以将IP地址转换为域名的一种协议。 

    一个组织的系统管理机构, 维护系统内的每个主机的IP和主机名的对应关系

    如果新计算机接入网络,将这个信息注册到数据库中

    用户输入域名的时候,会自动查询DNS服务器,由DNS服务器检索数据库,得到对应的IP地址

    我们可以通过命令查看自己的hosts文件:cat /etc/hosts,在域名解析的过程中仍然会优先查找hosts文件的内容。

  DNS协议基于UDP和TCP协议的,端口号53,用户到服务器采用UDP,DNS服务器通信采用TCP 

  大型运营商、互联网机构等会向公众提供免费的DNS服务,例如,谷歌的8.8.8.8 8.8.4.4 阿里巴巴223.5.5.5 223.6.6.6 

  如果DNS服务器down掉了,那么你只能通过IP地址来访问服务了

1.1、域名结构

  域名系统必须要保持唯一性。

  为了达到唯一性的目的,因特网在命名的时候采用了层次结构的命名方法:

    1. 每一个域名(本文只讨论英文域名)都是一个标号序列(labels),用字母(A-Z,a-z,大小写等价)、数字(0-9)和连接符(-)组成

    2. 标号序列总长度不能超过255个字符,它由点号分割成一个个的标号(label)

    3. 每个标号应该在63个字符之内,每个标号都可以看成一个层次的域名。

    4. 级别最低的域名写在左边,级别最高的域名写在右边

  关于域名的层次结构,如下图所示:

    技术图片

  说明:www.baidu.com 

    1. com: 一级域名. 表示这是一个企业域名。同级的还有 “net”(网络提供商), “org”(?非盈利组织) 等。 
    2. baidu: 二级域名,指公司名。 
    3. www: 只是一种习惯用法。

1.2、域名分级

  例如:xxx.yyy.zzz.com 

  从右边的com是顶级域名,到左依次是:二级域名,三级域名,四级域名

  域名的分级:域名可以划分为各个子域,子域还可以继续划分为子域的子域,这样就形成了顶级域、二级域、三级域等。

  其中顶级域名分为:国家顶级域名、通用顶级域名、反向域名。

  其中顶级域名分为:国家顶级域名、通用顶级域名、反向域名。

国家顶级域名中国:cn, 美国:us,英国uk…
通用顶级域名 com公司企业,edu教育机构,gov政府部门,int国际组织,mil军事部门 ,net网络,org非盈利组织…
反向域名 arpa,用于PTR查询(IP地址转换为域名)

1.3、域名服务器

  域名是分层结构,域名服务器也是对应的层级结构。 

  有了域名结构,还需要有一个东西去解析域名,域名需要由遍及全世界的域名服务器去解析,域名服务器实际上就是装有域名系统的主机。

  由高向低进行层次划分,可分为以下几大类:

    1、根域名服务器

      根服务器主要用来管理互联网的主目录。

      所有根服务器均由美国政府授权的互联网域名与号码分配机构ICANN统一管理,负责全球互联网域名根服务器、域名体系和IP地址等的管理。

      全球共有13台根服务器。1个为根服务器架构主根服务器,放置在美国。其余12个均为辅根服务器,其中9个放置在美国,欧洲2个,位于英国和瑞典,亚洲1个,位于日本。 据说,在主根服务器系统上还有一个更高级的、隐藏着的母服务器,当然也在美国,而全世界所有的顶级域名都是由这台母服务器来确定的。

      中国还没有自己的根服务器。中国大陆地区内只有6组根服务器镜像(F,I(3台),J,L)。当你对某个根服务器发出请求时,请求会被路由到该根服务器离你最近的镜像服务器。

    2、顶级域名服务器 

      负责管理所有的二级域名

    3、权限域名服务器 

      负责管理一个区。当一个权限域名服务器还不能给出最后的查询回答时,就会告诉查询请求的DNS客户进程,下一步应当找哪一个权限域名服务器;

    4、本地域名服务器

      可以看成是默认域名服务器,DNS客户进程收到主机发送过来的域名后,就会最初向该域名服务器发送查询请求

  注:美国控制了域名解析的根服务器,也就控制了相应的所有域名和IP地址,这对于其他国家来说显然存在着致命的危险。如果哪一天美国屏蔽某国家的域名,那么它们的IP地址将无法解析出来,这些域名所指向的网站就会从互联网中消失了。由此联想,如果“.cn”从域名系统中删除,甚至将分配给中国境内使用IP地址取消的话,中国将成为国际主干网的看客。 

  所以,从国家互联网安全的角度来看,我们是需要一个根服务器的。抛开中国政府屏蔽国外网站不说,为了我们整个国家的国防安全、在国际互联网的话语权,中国互联网络信息中心CNNIC已经努力向ICANN申请争取一台根服务器,使中国的网站都能有所保障。

二、域名解析

2.1、解析过程

  技术图片

  域名解析总体可分为两大步骤,

  第一个步骤是本机向本地域名服务器发出一个DNS请求报文,报文里携带需要查询的域名;

  第二个步骤是本地域名服务器向本机回应一个DNS响应报文,里面包含域名对应的IP地址。从下面对jocent.me进行域名解析的报文中可明显看出这两大步骤。注意:第二大步骤中采用的是迭代查询,其实是包含了很多小步骤的,详情见下面的流程分析。

  域名解析总体可分为一下过程:

    (1) 输入域名后, 先查找自己主机对应的域名服务器,域名服务器先查找自己的数据库中的数据.
    (2) 如果没有, 就向上级域名服务器进行查找, 依次类推
    (3) 最多回溯到根域名服务器, 肯定能找到这个域名的IP地址
    (4) 域名服务器自身也会进行一些缓存, 把曾经访问过的域名和对应的IP地址缓存起来, 可以加速查找过程 

  具体可描述如下:

    1. 主机先向本地域名服务器进行递归查询
    2. 本地域名服务器采用迭代查询,向一个根域名服务器进行查询
    3. 根域名服务器告诉本地域名服务器,下一次应该查询的顶级域名服务器的IP地址
    4. 本地域名服务器向顶级域名服务器进行查询
    5. 顶级域名服务器告诉本地域名服务器,下一步查询权限服务器的IP地址
    6. 本地域名服务器向权限服务器进行查询
    7. 权限服务器告诉本地域名服务器所查询的主机的IP地址
    8. 本地域名服务器最后把查询结果告诉主机

  递归查询和迭代查询

    (1)递归查询:本机向本地域名服务器发出一次查询请求,就静待最终的结果。如果本地域名服务器无法解析,自己会以DNS客户机的身份向其它域名服务器查询,直到得到最终的IP地址告诉本机
    (2)迭代查询:本地域名服务器向根域名服务器查询,根域名服务器告诉它下一步到哪里去查询,然后它再去查,每次它都是以客户机的身份去各个服务器查询。

三、DNS报文格式

  通过wireshark可以查看实际抓包情况,使用dns过滤

3.1、报文头以及数据

  技术图片

3.1.1、头部

  1、会话标识(2字节):是DNS报文的ID标识,对于请求报文和其对应的应答报文,这个字段是相同的,通过它可以区分DNS应答报文是哪个请求的响应

  2、标志(2字节):

    技术图片

QR(1bit) 查询/响应标志,0为查询,1为响应
opcode(4bit) 0表示标准查询,1表示反向查询,2表示服务器状态请求
AA(1bit) 表示授权回答
TC(1bit) 表示可截断的
RD(1bit) 表示期望递归
RA(1bit) 表示可用递归
rcode(4bit) 表示返回码,0表示没有差错,3表示名字差错,2表示服务器错误(Server Failure)

  3、数量字段(总共8字节):Questions、Answer RRs、Authority RRs、Additional RRs 各自表示后面的四个区域的数目。Questions表示查询问题区域节的数量,Answers表示回答区域的数量,Authoritative namesversers表示授权区域的数量,Additional recoreds表示附加区域的数量

3.1.2、正文

  1、Queries区域

    技术图片

    a》查询名:长度不固定,且不使用填充字节,一般该字段表示的就是需要查询的域名(如果是反向查询,则为IP,反向查询即由IP地址反查域名),一般的格式如下图所示。

    技术图片    

    b》查询类型

类型 助记符 说明
1 A 由域名获得IPv4地址
2 NS 查询域名服务器
5 CNAME 查询规范名称
6 SOA 开始授权
11 WKS 熟知服务
12 PTR 把IP地址转换成域名
13 HINFO 主机信息
15 MX 邮件交换
28 AAAA 由域名获得IPv6地址
252 AXFR 传送整个区的请求
255 ANY 对所有记录的请求

    c》查询类:通常为1,表明是Internet数据

  2、资源记录(RR)区域(包括回答区域,授权区域和附加区域)

    技术图片

  该区域有三个,但格式都是一样的。这三个区域分别是:回答区域,授权区域和附加区域

    a》域名(2字节或不定长):它的格式和Queries区域的查询名字字段是一样的。有一点不同就是,当报文中域名重复出现的时候,该字段使用2个字节的偏移指针来表示。比如,在资源记录中,域名通常是查询问题部分的域名的重复,因此用2字节的指针来表示,具体格式是最前面的两个高位是 11,用于识别指针。其余的14位从DNS报文的开始处计数(从0开始),指出该报文中的相应字节数。一个典型的例子,C00C(1100000000001100,12正好是头部的长度,其正好指向Queries区域的查询名字字段)。

    b》查询类型:表明资源纪录的类型,见1.2节的查询类型表格所示 

    c》查询类:对于Internet信息,总是IN

    d》生存时间(TTL):以秒为单位,表示的是资源记录的生命周期,一般用于当地址解析程序取出资源记录后决定保存及使用缓存数据的时间,它同时也可以表明该资源记录的稳定程度,极为稳定的信息会被分配一个很大的值(比如86400,这是一天的秒数)。

    e》资源数据:该字段是一个可变长字段,表示按照查询段的要求返回的相关资源记录的数据。可以是Address(表明查询报文想要的回应是一个IP地址)或者CNAME(表明查询报文想要的回应是一个规范主机名)等。

3.2、基础命令

  • Windows环境下清空DNS缓存的命令是 ipconfig/flushdns 也可以通过重启DNS client 和 DHCP client 两项服务清空DNS缓存
  • Windows环境下可以用命令 ipconfig /displaydns  来查看DNS缓存的内容
  • nslookup 命令可以用来查看域名对应的IP地址

 

  

 

以上是关于009-DNS域名解析系统的主要内容,如果未能解决你的问题,请参考以下文章

docker 部署 coredns(内部域名解析)

二级域名原理以及程序代码

DNS域名解析系统

DNS域名解析系统

域名系统 DNS服务&iptables

QT应用编程: 域名解析(域名转IP)