您的位置:首页 > 其它

DNS协议详解

2018-01-05 15:46 246 查看

1、 什么是DNS协议?

<1>DNS协议就是用来将域名解析到IP地址的一种协议,当然,也可以将IP地址转换为域名的一种协议。

<2>DNS协议基于UDP和TCP协议的,端口号53,用户到服务器采用UDP,DNS服务器通信采用TCP

<3>大型运营商、互联网机构等会向公众提供免费的DNS服务,例如,谷歌的8.8.8.8 8.8.4.4 阿里巴巴223.5.5.5 223.6.6.6

<4>如果DNS服务器down掉了,那么你只能通过IP地址来访问服务了。

<5>我们从以下几部分来理解DNS协议:

域名结构

域名服务器

域名查询

2、域名结构

像Linux目录结构一样,现代因特网采用层次树状结构的命名方法,任何一个连接在因特网上的主机或路由器,都有一个唯一的层次结构的名字,该名字称为域名。



例如:xxx.yyy.zzz.com

从右边的com是顶级域名,到左依次是:二级域名,三级域名,四级域名

域名的分级:域名可以划分为各个子域,子域还可以继续划分为子域的子域,这样就形成了顶级域、二级域、三级域等。

其中顶级域名分为:国家顶级域名、通用顶级域名、反向域名。

国家顶级域名:中国:cn, 美国:us,英国uk...
通用顶级域名:com 公司企业  edu教育机构 gov政府部门  int国际组织  mil军事部门  net网络 org非盈利组织...
反向域名:只有一个arpa,用于PTR查询(IP地址转换为域名) 。


3、域名服务器

域名服务器主要分为:根域名服务器、顶级域名服务器、权限域名服务器、本地域名服务器。

先举个例子来看一下各个服务器之间的联系:

当一个应用要通过DNS来查询某个主机名,比如www.google.com的ip时,粗略地说,查询过程是这样的:它先与根服务器之一联系,根服务器根据顶级域名com,会响应命名空间为com的顶级域服务器的ip;于是该应用接着向com顶级域服务器发出请求,com顶级域服务器会响应命名空间为google.com的权威DNS服务器的ip地址;最后该应用将请求命名空间为google.com的权威DNS服务器,该权威DNS服务器会响应主机名为www.google.com的ip。

实际上,除了上图层次结构中所展示的DNS外,还有一类与我们接触更为密切的DNS服务器,它们是本地DNS服务器,我们经常在电脑上配置的DNS服务器通常就是此类。它们一般由某公司,某大学,或某居民区提供,比如Google提供的DNS服务器8.8.8.8;比如常被人诟病的114.114.114.114等。


根域名服务器

根服务器主要用来管理互联网的主目录。

所有根服务器均由美国政府授权的互联网域名与号码分配机构ICANN统一管理,负责全球互联网域名根服务器、域名体系和IP地址等的管理。

全球共有13台根服务器。1个为根服务器架构主根服务器,放置在美国。其余12个均为辅根服务器,其中9个放置在美国,欧洲2个,位于英国和瑞典,亚洲1个,位于日本。 据说,在主根服务器系统上还有一个更高级的、隐藏着的母服务器,当然也在美国,而全世界所有的顶级域名都是由这台母服务器来确定的。

中国还没有自己的根服务器。都是根服务器的镜像(5个)

顶级域名服务器

负责管理所有的二级域名

权限域名服务器

负责管理一个区。当一个权限域名服务器还不能给出最后的查询回答时,就会告诉查询请求的DNS客户进程,下一步应当找哪一个权限域名服务器;

本地域名服务器

可以看成是默认域名服务器,DNS客户进程收到主机发送过来的域名后,就会最初向该域名服务器发送查询请求

题外话:

美国控制了域名解析的根服务器,也就控制了相应的所有域名和IP地址,这对于其他国家来说显然存在着致命的危险。如果哪一天美国屏蔽某国家的域名,那么它们的IP地址将无法解析出来,这些域名所指向的网站就会从互联网中消失了。由此联想,如果“.cn”从域名系统中删除,甚至将分配给中国境内使用IP地址取消的话,中国将成为国际主干网的看客。

所以,从国家互联网安全的角度来看,我们是需要一个根服务器的。抛开中国政府屏蔽国外网站不说,为了我们整个国家的国防安全、在国际互联网的话语权,中国互联网络信息中心CNNIC已经努力向ICANN申请争取一台根服务器,使中国的网站都能有所保障。

4、域名的查询

查询方式分为递归查询和迭代查询,在理解递归查询与迭代查询之前,必须要弄明白“递归”与“迭代”的区别。我们从C++的角度来理解递归与迭代的区别,所谓递归就是函数自己调用自己,而迭代则是函数内部循环地调用他人。下面,我们举出递归与迭代的C++程序:

递归程序:f(n)=f(n-1)+n,f(1)=1,我们用C++递归实现如下

#include<iostream>
int f(int n)
{
if(n==1)
return 1;
else
return f(n-1)+n;//递归过程
}


迭代程序:f(n)=1+2+3+…+n,我们用C++迭代实现如下

#include<iostream>
int f(int n)
{
int i,sum=0;
for(i=1;i<=n;i++)
{
sum+=i;//迭代过程、
}
return sum;
}


递归查询就好比是我问A同学一个问题,他不知道,于是他就去问B同学,如果B知道,就告诉A,A再告诉我结果,如果B也不知道,那么就继续向C问,知道A知道答案,告诉我,最终也是A和我直接交互。

如这一张图:



迭代查询就好比我问A同学问题,A不知道,但是A告诉我,B知道,你去问B吧,于是B告诉了我答案,这就是与上面递归的区别。如下图所示:



查询过程中,递归查询和迭代查询可能会都使用,客户和服务器之间采用递归查询,服务器之间采用迭代查询,可能会多次迭代。

迭代查询的逻辑顺序按照域名系统的域名结构中的层次去查询

如下所示:



5、总结一下DNS查询过程

1)当客户机提出查询请求时,首先在本地计算机的缓存中查找,如果在本地无法查询信息,则将查询请求发给DNS服务器

2)首先客户机将域名查询请求发送到本地DNS服务器,当本地DNS服务器接到查询后,首先在该服务器管理的区域的记录中查找,如果找到该记录,则进行此记录进行解析,如果没有区域信息可以满足查询要求,服务器在本地缓存中查找

3) 如果本地服务器不能在本地找到客户机查询的信息,将客户机请求发送到根域名DNS服务器

4) 根域名服务器负责解析客户机请求的根域名部分,它将包含下一级域名信息的DNS服务器地址地址,返回给客户机的DNS服务器地址

5) 客户机的DNS服务器利用根域名服务器解析的地址访问下一级DNS服务器,得到再下一级域名的DNS服务器地址

6) 按照上述递归方法逐级接近查询目标,最后在有目标域名的DNS服务器上找到相应IP地址信息

7) 客户机的本地DNS服务器将递归查询结构返回客户机

8) 客户机利用从本地DNS服务器查询得到的IP访问目标主机,就完成了一个解析过程

9) 同时客户机本地DNS服务器更新其缓存表,客户机也更新期缓存表,方便以后查询

如下图所示:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  dns dns服务器