前言
DNS是计算机网络中应用层的一个协议,可能很多同学碰到过DNS被劫持的情况,我们现在来学习一下DNS协议,来了解为什么DNS被劫持之后,我们便不能访问互联网的原因。
DNS协议概述
我们在网络上看到的url格式可能是这样的:
www.google.com
google十分适合我们人类记忆,因为其是一个简单易记的单词形式。
因特网上的主机可以用多种方式进行标识,常见的有两种:
- 利用主机名进行标识,例如www.google.com
- 利用IP地址进行标识,例如www.36.158.123.192.com
我们可以很自然的发现,人类相较于用IP地址进行标识,更喜欢用便于记忆的主机名进行标识;但是路由器喜欢定长的、有层次结构的IP地址。为了折中这两种方式,就需要一种协议完成这两种不同的标识之间的转换,即主机名到IP地址转换的目录系统,这就是域名系统(DNS)的主要功能。
DNS:
- 一个由分层的DNS服务器实现的分布式数据库。
- 一个使得主机能够查询分布式数据库的应用层协议。
DNS的域名解析过程(以www.google.com示例):
- 同一台用户主机上运行着DNS应用的客户端。
- 从URL中抽出主机名www.google.com,并传给DNS应用的客户端。
- DNS客户向DNS服务器发送一个包含主机名的请求。
- DNS客户端收到DNS服务器解析的IP地址。
- 向该IP地址的80端口的HTTP服务器发起一个TCP进程。
DNS工作原理
DNS是一个分布式、层次数据库,DNS使用了大量的DNS服务器,以层次方式组织。没有一台DNS服务器拥有因特网上所有主机的映射。DNS服务器大致可以分为以下三种:
- 根DNS服务器(全世界只有13个)
- 顶级域(TLD)DNS服务器(com,cn等)
- 权威DNS服务器
例如解析一个为www.google.com的url的域名,遵循以下步骤:
- 客户与根服务器联系,解析.,返回顶级域名com的TLD服务器的IP地址
- 客户与该TLD服务器联系,其返回google.com权威服务器的IP地址
- 客户与该权威服务器联系,返回www.google.com主机名的IP地址
其中还有一种重要的DNS服务器,称为本地DNS服务器,起着代理的作用,相当于管理一篇区域内的主机。
DNS缓存
众所周知,一般对于速率较低的操作,我们通常可以进行缓存技术的应用,DNS协议中也应用了该项技术,这就是DNS缓存。
DNS记录和报文
资源记录
所有DNS服务器存储了资源记录(RR),其提供主机名到IP地址的映射,每个DNS回答报文包含一条或者多条资源记录。
资源记录的存储格式如下
(Name,Value,Type,TTL)
TTL指的是该条资源记录的生存时间,之后的例子是忽略TTL,Name和Value的值取决于Type。
常见的Type的种类有以下几种:
- Type=A;Name为主机名,Value为该主机名对应的IP地址,所以类型为A的资源记录提供了标准的主机名到IP地址的映射
- Type=NS;Name为一个域,Value为一个知道如何获得该域中主机IP地址的权威DNS服务器的主机名。
- Type=CNAME;Value是别名为Name的主机对应的规范主机名,提供一个主机名对应的规范主机名。
- Type=MX;Value是一个别名为Name的邮件服务器的规范主机名。
DNS报文
DNS只有两种报文:DNS查询、回答报文。并且两种报文有着相同的格式。
![DNS报文](https://img-blog.csdnimg.cn/20210718190209325.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1NDcyMjAx,size_16,color_FFFFFF,t_70)
上图的详细解释如下:
- 首部区域中。标识符为16比特的数,用以标识该查询,匹配发送的请求和接收到的回答。标志字符中有1比特的查询回答标志位。当某DNS服务器是所请求名字的权威DNS服务器时,1比特的“权威的标志位”放置在回答报文中。还有“希望递归”比特位与“递归可用”比特位。最后还有4个有关数量的字段,标识后续的字段出现次数。
- 问题区域包含正在查询的信息。包括:(1)名字字段,正在被查询的主机名;(2)类型字段,标识正在被询问的问题类型。
- 在来自DNS服务器的回答中,包含对最初请求名字的资源记录,回答报文可以包含多条RR,因此一个主机名可以有多个IP地址。
- 权威区域包含其他权威服务器的记录。
- 附加区域包含其他有帮助的记录。
总结
DNS是应用层中常见的协议之一,其主要是起到了解析域名的作用,本质是一个分布式数据库,类似于树存储节点,解析域名。我们在平时日常生活中,经常会碰到DNS被劫持的情况,此时就是因为网络无法解析域名,但是QQ可以进行正常使用的原因是因为QQ是直接通过IP连接的软件,所以并不会受到影响,后续将会写一篇新的博客,专门解析大厂面试中的有关DNS的问题。