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. 如何给wp(Windows phone)中搜索关键字加亮?

    问题来源 最近在群里看到群友讨论在wp中有个搜索功能,要求搜索关键字在搜索结果内容中加亮(即加颜色),由于wp中没有自带这样的控件,于是大家各抒自见,有人说用第三方控件,有人说用richtextbox ...

  2. 组件基础(参数校验和动态组件、v-once)—Vue学习笔记

    最最最后一点关于组件传值的问题. 提醒:本篇内容请使用Vue.js开发版!(附带完成的警告和提示) 1.组件的参数校验 父组件向子组件传值,子组件可以决定传值的一些限制. 比如,子组件指向接收Stri ...

  3. js DOM 案例

    模态框 <html> <head> <meta charset="UTF-8"> <title>模态框</title> ...

  4. Mysql数据引擎和系统库

    系统数据库 information_schema: 虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息.列信息.权限信息.字符信息等performance_schema: MySQL ...

  5. 解决白屏(vue) - webpace es6转es5

    1.npm安装 npm install babel-polyfillnpm install es6-promise package.json中会出现 "babel-polyfill" ...

  6. 题外话 -- windows10系统C盘空间变大 CPU莫名跑满

    场景描述: 安装windows10一段时间了,发现C盘空间越来越小 CPU有时候,莫名其妙的跑满,造成操作卡顿. 如何处理参考: windows10 C盘空间清理:https://jingyan.ba ...

  7. Jfinal QuartzPlugin 简单使用案例

    之前一直使用spring quartz感觉还挺好用的,就想着jfinal是不是也可以使用quartz插件,于是发现了QuartzPlugin和jfinal-scheduler<参考:https: ...

  8. msvcr110.dll丢失解决方案

    http://www.microsoft.com/zh-CN/download/details.aspx?id=30679 打开之后,在“选择语言”里选择“简体中文”,然后点击右边的“下载”按钮.

  9. kmp模式串匹配

    大二的时候百度看不懂,现在大三下学期了百度也看不懂.(实在是不能理解这个next数组究竟是怎么样工作的,为什么会得出那样的结果.)如果有好心人知道的话希望可以联系我告诉我(邮箱:4609019410@ ...

  10. 配置codis-dashboard

    codis-dashboard主要用来codis配置使用,也就是说所有的相关的配置项必须通过此进程完成,本演习在60服务上配置测试. 利用codis本身提供的命令自动生成配置文件:1.生成dashbo ...