DNS协议详解
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的分层结构如下所示:
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其详细的协议通讯过程如下:
- 浏览器地址栏中输入networkutopoa.com
- 浏览器从url地址中获取域名networkutopoa.com,然后将域名传递给本机的DNS应用的客户端。
- DNS客户端向本地DNS服务器发送一个包含域名networkutopoa.com)的请求。
- 本地DNS服务器先查看本地缓存有没有要查询的域名,如果没有在查看本地缓存中的TLD服务器有没有与域名匹配的服务器地址,如果有直接向TLD服务器发送请求。如果没有则向根服务器请求TLD服务器地址。
- TLD服务器直接向本地DNS服务器发送回答。回答中包含了域名对应的ip地址。
- 浏览器收到ip地址之后,将请求发送到对应的ip地址上。
递归查找,迭代查找
DNS解析域名时主要有两种查询方式:
- 递归查询
- 迭代查询
迭代查询算法
迭代查询的核心时所有的请求都是直接返回给本地的DNS服务器,然后本地DNS服务器去对应的权威服务器等请求解析地址。整个过程中,只有请求主机到本地DNS服务器的查询时递归的,其余都是迭代的。
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
递归查询算法
递归的查询算法所有的查询都是递归的,详细流程如下所示。
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协议详解的更多相关文章
- HTTP协议详解(转)
转自:http://blog.csdn.net/gueter/archive/2007/03/08/1524447.aspx Author :Jeffrey 引言 HTTP是一个属于应用层的面向对象的 ...
- HTTP协议详解
Author :Jeffrey 引言 HTTP 是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和 扩展. ...
- ASP.NET知识总结(3.HTTP协议详解)
引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1. ...
- 接口测试之HTTP协议详解
引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1. ...
- HTTP协议详解(真的很经典)
HTTP 是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和 扩展.目前在WWW中使用的是HTTP/1.0 ...
- HTTP协议详解--转载http://blog.csdn.net/gueter/article/details/1524447
引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1. ...
- 关于http协议详解
Author :Jeffrey 引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前 ...
- 计算机网络: IP地址,子网掩码,默认网关,DNS服务器详解
楔子: 以Windows系统中IP地址设置界面为参考(如图1), IP地址, 子网掩码, 默认网关 和 DNS服务器, 这些都是什么意思呢? 学习IP地址的相关知识时还会遇到网络地址,广播地址,子网等 ...
- HTTP协议详解(一直在用可是这篇太好了转一下)
引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1. ...
随机推荐
- 利用django-simple-captcha生成验证码
参考文档 http://django-simple-captcha.readthedocs.io/en/latest/ django支持1.7+ 1.安装 pip install django-sim ...
- 解决修改css或js文件,浏览器缓存更新问题。
在搜索引擎中搜索关键字.htaccess 缓存,你可以搜索到很多关于设置网站文件缓存的教程,通过设置可以将css.js等不太经常更新的文件缓存在浏览器端,这样访客每次访问你的网站的时候,浏览器就可以从 ...
- 使用ServiceStack改造我们的项目
ServiceStack是一个NET环境下的开源框架集合 包括轻量级的Orm框架,数据库访问,Json处理,Redis驱动等多个模块,我们可以按需选择使用 serviceStack.Ormlite s ...
- 基于GTK+3 开发远程控制管理软件(C语言实现)系列三 Windows7开发环境搭建
一.介绍与准备 考虑到目标客户端基本都是windows客户端,所以此次开发环境将搭建在windows7下,相关开发工具有Msys2 和 Eclipse For C/C++ Msys2 是msys的升级 ...
- 一口一口吃掉Hexo(四)
如果你想得到更好的阅读效果,请访问我的个人网站 ,版权所有,未经许可不得转载! 人总是不会满足于现状,接下来我们就可以让我们的朋友们通过独立域名访问我们的网站了,但是这肯定是要花点钱的,所以这篇文章难 ...
- JAVA与DOM解析器基础 学习笔记
要求 必备知识 JAVA基础知识.XML基础知识. 开发环境 MyEclipse10 资料下载 源码下载 文件对象模型(Document Object Model,简称DOM),是W3C组织推荐的 ...
- Java总结:语法基础
更新时间:2018-1-7 10:34:05 更多请查看在线文集:http://android.52fhy.com/java/index.html Hello World 文件名:HelloWorld ...
- Mysql - 增量脚本中修改字段属性
在增量部署系统的时候, 经常需要提供增量修改的脚本, 如果是修改存储过程或者自定义函数, 那还是很好改的, 不用担心表功能收到影响. 如果是改字段呢? 首先不知道字段是不是已经在系统里面, 没有的话, ...
- piplinedb 安装配置
piplinedb不能使用root用户操作,提前建好用户 [root@yzh-jkb-privatization /]# useradd steven [root@yzh-jkb-privatizat ...
- setup&hold
setup time:建立时间,也就是在时钟上升沿到来前,数据需要稳定的时间.hold time:保持时间,指的是在时钟上升沿到来后,数据还需要保持的时间.实际上设置setup time和hold t ...