DNS协议详解

简介

DNS(Domain Name System)域名系统,主要实现的功能是将域名转换成ip地址的一个服务。它是由一个分层DNS服务器实现的分布式数据库,同时。他也是一个使得主机能够查询分布式数据库的应用层协议。DNS服务器通常是一个运行BIND(Berkeley Internet Name Domain)软件的UNIX机器。DNS协议运行在UDP之上,使用53号端口。 DNS是一个应用层协议,其原因在于:

  • 使用客户端-服务器模式运行在通信的端系统之间。
  • 在通信的端系统之间通过下面的端到端运输协议来传送DNS报文。

DNS的分层

Host文件

在讲DNS的分层之前,先说一下host文件,以window系统为例,在目录C:\Windows\System32\drivers\etc下有一个host文件,这个文件中记录了一个ip和域名的字典,当在浏览器中访问域名时,系统会默认先访问host文件查看是否存在访问域名的映射关系,如果不存在时,才将请求的域名发送给DNS系统进行解析获取对应的ip地址。

DNS分层

DNS的分层结构如下所示:

graph TB
A[根DNS服务器]-->B[com DNS服务器]
A-->C[org DNS服务器]
A-->D[edu DNS服务器]
B-->E[yahoo.com DNS服务器]
B-->F[amazon.com DNS服务器]
A-->J[...]
A-->K[...]
C-->G[pbs.org DNS服务器]
D-->H[poly.edu DNS服务器]
D-->I[umass.edu DNS服务器]
E-->L[...]
E-->M[...]

为了支持扩展性,DNS使用了大量的DNS服务器分布部署在各地,在各级DNS服务器子级又可以继续扩展出本地DNS服务器。这些DNS服务器大致可以分为三类:

  • 根DNS服务器
  • 顶级域(Top-lecel Domain,TLD)DNS服务器
  • 权威DNS服务器

DNS缓存

DNS的缓存是为了改善DNS解析的延迟性问题,同时减少因特网上的DNS报文数量。有了缓存之后,DNS服务器可以记住通过自己所解析的域名地址,并将他们缓存起来(缓存不是永久有效的,缓存时会有一个缓存时间设置TTL),同时,本地服务器也可以缓存TLD服务器的ip地址,从而在查询解析时绕过根DNS服务器,直接访问TLD服务器。

DNS记录和报文

资源记录

共同实现DNS分布式数据库的所有DNS服务器存储了资源记录(Resource Record, RR),RR提供了主机名到IP地址的映射。每个DNS的响应报文都会包含一条或多条RR.资源记录是一个包含了下列字段的4元数组:
(Name,Value.Type,TTL)
其详细含义为:

  • TTL记录了生存时间,即缓存中资源记录的过期时间。
  • Type=A:此时Name是主机名,Value是主机名对应的Ip地址。
  • Type=NS:Name是个域(此处是类似foo.com的域不是域名),Value是一个DNS服务器的主机名,这个DNS服务器可以获取到(直接或者间接)Name域中主机IP地址。
  • Type=CNAME:Value是别名为Name的主机对应的规范主机名。即Name为主机别名和Value主机实际名称的映射
  • Type=MX:Value是别名为Name的邮件服务器的规范主机名

范例
假如一台edu TLD服务器不是主机gaia.cs.umass.edu的权威DNS服务器,则该服务器将包含一条包括主机cs.umass.edu的域记录。如(umass.edu,dns.umass.edu,NS);该edu TLD服务器还将包含一条类型A的记录,如(dns.umass.edu,128.119.40.111,A),该记录将名字dns.umass.edu映射为一个IP地址。

DNS报文

报文格式如下所示

标识符 标志
问题数 回答RR数
权威RR数 附加RR数
问题(问题的变量数)
回答(资源记录的变量数)
权威(资源记录的变量数)
附加信息(资源记录的变量数)

详细解释:

  • 前三行共12个字节是首部区域

    • 第一个字段(标识符)是一个16比特的数,用于标识该查询,这个标识符会被复制到对查询的回答报文中,作为请求报文的唯一标识,16个比特中有1比特是标识是查询报文(0)还是回答报文(1)
  • 问题区域包含着正在进行的查询信息。该区域包括:
    • 名字字段,表示正在被查询的主机名字。
    • 类型字段,表示有关改名字的正被询问的问题类型,例如类型A:主机地址是与一个名字相关联;类型MX表示主机地址域邮箱服务器相关联。
  • 回答区域包含了对最初请求的名字的资源记录。回答报文的回答区域中可以包含多条RR,因此一个主机名能够有多个IP地址。
  • 权威区域包含了其他权威服务器的记录
  • 附加区域包含了其他有帮助的记录。

DNS数据库中插入记录

DNS数据库中插入记录,需要向专门的注册登记机构,注册域名,由注册登记机构验证域名的唯一性。想注册登记机构提供域名是还需要向该机构提供你的基本和辅助权威DNS服务器的名字和IP地址。然后注册登记机构会将以下两条资源记录插入该DNS系统中(以注册networkutopia.com为例)

  • (networkutopoa.com,dns1.networkutopia.com,NS)
  • (dns1.netwworkutopia.com,212.212.212.1,A)
    之后其他用户就可以访问networkupopia.com这个域名,DNS请求会到达dns1这个DNS服务器解析ip地址。

DNS通信流程

假设本地机器访问域名networkutopoa.com其详细的协议通讯过程如下:

  1. 浏览器地址栏中输入networkutopoa.com
  2. 浏览器从url地址中获取域名networkutopoa.com,然后将域名传递给本机的DNS应用的客户端。
  3. DNS客户端向本地DNS服务器发送一个包含域名networkutopoa.com)的请求。
  4. 本地DNS服务器先查看本地缓存有没有要查询的域名,如果没有在查看本地缓存中的TLD服务器有没有与域名匹配的服务器地址,如果有直接向TLD服务器发送请求。如果没有则向根服务器请求TLD服务器地址。
  5. TLD服务器直接向本地DNS服务器发送回答。回答中包含了域名对应的ip地址。
  6. 浏览器收到ip地址之后,将请求发送到对应的ip地址上。

递归查找,迭代查找

DNS解析域名时主要有两种查询方式:

  • 递归查询
  • 迭代查询

迭代查询算法

迭代查询的核心时所有的请求都是直接返回给本地的DNS服务器,然后本地DNS服务器去对应的权威服务器等请求解析地址。整个过程中,只有请求主机到本地DNS服务器的查询时递归的,其余都是迭代的。

graph TB
A[请求主机]-->|1| B[本地DNS服务器]
B-->|8|A
B-->|2|C[根DNS服务器]
C-->|3|B
B-->|4|D[TLD DNS服务器]
D-->|5|B
B-->|6|E[权威DNS服务器]
E-->|7|B

递归查询算法

递归的查询算法所有的查询都是递归的,详细流程如下所示。

graph TB
A[请求主机]-->|1| B[本地DNS服务器]
B-->|8|A
B-->|2|C[根DNS服务器]
C-->|7|B
C-->|3|D[TLD DNS服务器]
D-->|6|C
D-->|4|E[权威DNS服务器]
E-->|5|D

DDoS

分布式拒绝服务(DDos)带宽洪范攻击,是一种常见的DNS攻击方式,其主要途径是向每个DNS根/权威服务器发送大量分组,是的大多数合法的DNS请求得不到答案,

DNS提供的其他服务

DNS除了完成将域名翻译成ip的任务外,还提供了以下辅助功能

  • 主机别名(host aliasing):DNS除了维护域名和Ip的关系外,还可以维护一套域名和别名的映射关系。比如,域名为www.relay1.west-coast.enterprise.com的主机,我们可以给他起一个别名叫,www.enterprise.com。当我们访问www.enterprise.com的时候,DNS服务器可以自动的跳转到域名www.relay1.west-coast.enterprise.com对应的地址上。
  • 负载分配(load distribution):加入一个域名后面对应多个ip地址。当请求DNS客户端的请求过来之后,DNS服务器可以按照一定的策略对多个ip实行负载分配

TIP

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

参考资料

《计算机网络自顶向下方法》

DNS协议详解的更多相关文章

  1. HTTP协议详解(转)

    转自:http://blog.csdn.net/gueter/archive/2007/03/08/1524447.aspx Author :Jeffrey 引言 HTTP是一个属于应用层的面向对象的 ...

  2. HTTP协议详解

    Author :Jeffrey 引言 HTTP 是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和 扩展. ...

  3. ASP.NET知识总结(3.HTTP协议详解)

    引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1. ...

  4. 接口测试之HTTP协议详解

    引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1. ...

  5. HTTP协议详解(真的很经典)

    HTTP 是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和 扩展.目前在WWW中使用的是HTTP/1.0 ...

  6. HTTP协议详解--转载http://blog.csdn.net/gueter/article/details/1524447

    引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1. ...

  7. 关于http协议详解

    Author :Jeffrey 引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前 ...

  8. 计算机网络: IP地址,子网掩码,默认网关,DNS服务器详解

    楔子: 以Windows系统中IP地址设置界面为参考(如图1), IP地址, 子网掩码, 默认网关 和 DNS服务器, 这些都是什么意思呢? 学习IP地址的相关知识时还会遇到网络地址,广播地址,子网等 ...

  9. HTTP协议详解(一直在用可是这篇太好了转一下)

    引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1. ...

随机推荐

  1. 分布式管理GIT命令总结(转载)

    GIT是个了不起但却复杂的源代码管理系统.它能支持复杂的任务,却因此经常被认为太过复杂而不适用于简单的日常工作.让我们诚实一记吧:Git是复杂的,我们不要装作它不是.但我仍然会试图教会你用(我的)基本 ...

  2. Mysql数据优化--DBA梳理珍藏篇

    1. 优化SQL 1)     通过show status了解各种sql的执行频率 show status like 'Com_%'        了解 Com_select,Com_insert 的 ...

  3. XAMPP中MySQL无法启动解决办法

    如图 问题出在mysql的路径上,其实报错已经讲得听清楚了 预期应该是这样 结果却是这样 所以解决办法当然就是修改这个路径,出现这个报错原因大多因为之前电脑装过mysql,所以电脑默认启动是原来的my ...

  4. NPOI读取excel文件导出数据, 而此时文件正在打开中抛异常怎么办

    项目中需要用到一些数值表格, 方便起见都是用excel来的. 而如果excel正打开中, 直接使用npoi制作的工具来导出数据的话, 在这一行将会异常: workbook = new XSSFWork ...

  5. 网络Socket编程UDP协议例子

    服务端代码 public class UDPChatServer { //通讯端口 private Integer port=8000; //数据报文的通讯通道对象 private DatagramC ...

  6. (转)X-Frame-Options响应头缺失漏洞

    原文:https://blog.csdn.net/ljl890705/article/details/78071601 x-frame-options响应头缺失漏洞. 故名思意,就是返回的响应头信息中 ...

  7. c++如何解决大数组栈内存不够的问题

    在c++中,我们可以直接通过下面的方式创建一个数组: ; ; ; double phi[N][Nx][Ny]; double phi_b[N][Nx][Ny]; 但是,如果上述的Nx和Ny比较小还好说 ...

  8. VS2013编译的exe独立运行在XP中方案

    转载知乎 现在,我们深入探讨一下:<如何使用VS 2013发布一个可以在Windows XP中独立运行的可执行文件>. 这个问题是比较常见且容易造成初学者困惑的,作为曾经撞了无数次南墙的初 ...

  9. freemark null处理

    以下引用官方描述: 引用The FreeMarker template language doesn't know the Java language null at all. It doesn't ...

  10. “网红架构师”解决你的Ceph 运维难题

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由Tstack发表于云+社区专栏 本文为长篇连续剧,将分多个篇幅发表,主要介绍了从动手部署环境到后期运营故障处理过程中常见的问题,内容由 ...