您的位置  > 互联网

数据链路层和传输层的协议——DNS协议详解

当我们平时上网想要访问某个网站时,需要在浏览器中输入网址。 我们输入的通常是域名。 要访问一个网站,我们必须知道该网站的IP地址。 这时候我们就需要一些东西来告诉我们域名和IP的映射关系。 域名解析系统——DNS可以实现这个目的。

如果说ARP协议是用来将IP地址转换成MAC地址的话,那么DNS协议就是用来将域名转换成IP地址(IP地址也可以转换成对应的域名地址)。

文本

我们都知道TCP/IP使用IP地址和端口号来确定网络上某个主机上的某个程序。 有人可能会有疑问,为什么不使用域名直接通信呢?

1、由于IP地址是固定长度的,IPv4是32位,IPv6是128位,域名是可变长度,不方便计算机处理。

2、IP地址不方便用户记忆,而域名则方便用户使用。 例如,这是百度的域名。

总结一下,IP地址是给主机用的,而域名是给用户用的。

1什么是DNS

DNS是Name的缩写,即域名解析系统。 它是互联网的核心服务。 作为一个可以将域名和IP地址相互映射的分布式数据库,它可以让人们更方便地访问互联网,而无需记住它。 机器可以直接读取的IP地址。

我们可以将域名系统 (DNS) 视为互联网的电话簿。 人类通过域名(例如 或 )在线访问信息。 Web 浏览器通过协议 (IP) 地址进行交互。 DNS将域名转换为IP地址,以便浏览器加载资源。

域名服务主要基于UDP实现,服务器的端口号为53。

2DNS域名层次结构

域名系统必须保持唯一性。 为了实现唯一性,互联网在命名时采用了分层命名方式:

1、每个域名(本文仅讨论英文域名)是一个标签序列(),由字母(AZ、az、大小写等价)、数字(0-9)和连接符(-)组成

2. 标签序列总长度不能超过255个字符,并以点的形式划分为各个标签。

3、每个标签长度不能超过63个字符,每个标签可视为一个级别域名。

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

关于域名的层次结构:

1、所有域名的最后,其实都有一个根域名。 例如,真实域名是,缩写为。 由于根域名 .root 对于所有域名都是相同的,因此通常被省略。

2、顶级域名,如.com、.cn、.net等。

顶级域名分为三类:

一是国家和地区顶级域名。 目前,已有200多个国家按照国家代码分配了顶级域名。 例如中国为cn,日本为jp等;

二是一般顶级域名,如工商企业用.com、网络提供商用.net、非营利组织用.org等。

三是新的顶级域名,如通用的.xyz、.top代表“高端”、.red代表“红色”、.men代表“人民”等一千多种。

3、二级域名,比如这里的baidu,用户可以注册购买。

4. 主机域名,如baike,是用户可分配的。

3DNS 的工作原理

当用户在地址栏输入内容时,DNS解析大约有十个过程,如下:

1、浏览器首先检查自己的缓存中是否有已解析的域名对应的IP地址。 如果是,则决议结束。

例如:在浏览器地址栏中输入://net-/#dns,然后按“Enter”。 该页面将显示当前所有的 DNS 缓存。 通过单击“清除主机缓存”,您可以清除所有 DNS 缓存。

2、如果浏览器缓存中没有对应的解析结果(专业点击尚未命中),浏览器会检查操作系统缓存中是否有对应的解析结果。 操作系统也有域名解析过程。 可以通过c盘下一个叫hosts的文件来设置。 如果在这里指定域名对应的IP地址,浏览器会首先使用这个IP地址。

然而这种操作系统级的域名解析程序也被很多黑客利用,通过修改你的hosts文件的内容,将特定的域名解析到他指定的IP地址,从而造成所谓的域名劫持。 因此,设置hosts文件是为了防止恶意篡改。

3、如果到目前为止域名还没有被命中,那么实际上会请求本地域名服务器(LDNS)来解析域名。 这个服务器通常在你所在城市的某个角落,离你不是很远,而且该服务器的性能非常好。 域名解析结果一般都会被缓存。 大约80%的域名解析都是在这里完成的。

4、如果LDNS仍然无法命中,则直接跳转到根域名服务器请求解析。

5、根域名服务器向LDNS返回查询域的主域名服务器(gTLD,国际顶级域名服务器,如.等)地址。

6. 此时,LDNS 向上一步返回的主域名服务器(gTLD)发送请求。

7、接受请求的主域名服务器gTLD搜索并返回该域名对应的Name的地址。 该名称是网站注册的域名服务器。

8、Name根据映射关系表找到目标IP,返回给LDNS。

9. LDNS缓存该域名和对应的IP。

10、LDNS将解析结果返回给用户,用户根据TTL值缓存在本地系统缓存中。

总结:

简而言之,域名的 DNS 记录将有两个本地缓存:浏览器​​缓存和操作系统 (OS) 缓存。 在浏览器中访问时,会首先访问浏览器缓存。 如果未命中,则会访问操作系统缓存,最后访问DNS服务器(通常由ISP提供)。 然后DNS服务器会递归查找域名记录然后返回。

4DNS消息结构

DNS 消息格式标头

本节各字段含义如下:

Flags字段中各个字段的含义如下:

二维码(1位)

查询/响应标志,0为查询,1为响应

(4位)

0代表标准查询,1代表反向查询,2代表服务器状态请求。

AA(1位)

表示授权回答

TC(1位)

表示可截断

读值(1位)

表示预计会出现递归

RA(1位)

表示可以递归

r代码(4位)

表示返回码,0表示没有错误,3表示名称错误,2表示服务器错误( )

AA () - 该位在响应时有意义,表示给出响应的服务器是查询域名的授权解析服务器。 请注意,由于别名的存在,响应中可能存在多个主域名。 AA 位对应于请求名称,或者响应中的第一个主域名。

TC () - 用于指示消息长于允许的长度并被截断。

RD ( ) - 该位在请求时设置,并返回响应中使用的相同值。 如果设置了RD,则建议域名服务器进行递归解析,支持递归查询是可选的。

RA 支持递归 ( ) - 在响应中设置或删除该位以指示服务器是否支持递归查询。

RCODE 响应代码(code)——这4位在响应消息中设置,其含义如下:

0 没有错误。

1 消息格式错误(error) - 服务器无法理解所请求的消息。

2 服务器故障 ( ) - 由于服务器问题无法处理请求。

3 名称错误 - 仅对授权域名解析服务器有意义,表示解析的域名不存在。

4 未实现(Not) - 域名服务器不支持查询类型。

5 () - 由于设置的策略,服务器拒绝给出回复。 例如,服务器不想响应某些请求者,或者服务器不想执行某些操作(例如区域传输区域)。

6-15 保留值,尚未使用。

查询报文格式

本节各字段含义如下:

查询名称 QNAME 要搜索的名称是一个或多个标识符的序列。 每个标识符使用第一个字节的计数值来指示后续标识符的字节长度。 每个名称都以最后一个字节为 0 结尾。长度为 0 的标识符是根标识符。 单个标识符的最大长度为 63 字节。

查询类型 QTYPE 每个问题都有一个查询类型。 2个字节表示查询类型,该值可以是任何可用的类型值,通配符代码表示所有资源记录。

DNS 查询类型有 20 种。 常用的五种查询类型是 A、NS、CNAME、PTR 和 MX。 下面分别介绍这五种类型:

1)A:从DNS域名到IP地址的查询,即正向查询,在编程中通过函数实现。

2)PTR:从IP到域名的查询,即反向查询,在编程中使用函数。

3)NS:查询已解析的名称服务器(Name)。

4) CNAME:查询DNS的别名。

5) MX:邮箱服务器查询。

响应消息格式

资源记录部分是指DNS消息格式中的最后三个字段,包括答案问题区字段、权威名称服务器区字段和附加信息区字段。 这三个字段中的每一个都采用称为资源记录的格式,如图所示。

资源记录格式中各个字段的含义如下:

资源记录部分仅出现在DNS响应包中。

5实战

设置拓扑环境如下: