DNS(Domain Name System)
中文名称为“域名系统”,它可以将你输入的域名与IP之间进行转换,所有公共网站都可以使用公共IP地址连接到Internet的服务器上运行,但这样不利于人们记忆,于是我们必须想一种方法,让大家更方便的记住访问服务器地址并能够支持客户端与服务器之间的通信,于是就有了DNS系统,将域名转换成IP地址,这样我们去访问网站则通过域名去访问(例如,www.jd.com)。
域名解析过程
为了解决上述问题,在早期的时候通常是使用一个文件来管理将主机名与IP地址一一对应,这个
文件就叫做hosts文件,该文件中定义了主机名与之对应的IP地址,于是大家都使用这种方法,一种
叫“getipbyhostname()”,将域名转换成IP(这里用映射或许比较好理解),一种叫“gethostnamebyip()”
,将ip转换成主机名,这种方法在一段时间内确实好用。
那么问题来了,这种方法在早期计算机还非常的不普及确实好用,但是这种方法也有一个很大的
缺陷,假如服务器今天添加10台,明天添加好几十台,那么这个文件是不是每天都要更新,那这样
不是很麻烦吗,那怎么办呢?如果有专门的人来维护这个文件,我们只从那里直接下载覆盖hosts
文件就行,确实是这样,有专门的机构(IANA)来做这些事情,以后任何服务器要想使用域名,就向
这个机构去申请,这个机构分配之后会更新自己的库并添加这条记录,然后你可以去下载这个文件
覆盖掉自己的hosts文件就OK了。
虽说上述问题貌似解决了不少问题,但仔细想想好像还有问题,那就是主机名和IP的对应关系
无法自动的在所有的计算机内更新,且要将主机名加入该文件只能想IANA注册,若IP数量太多,该
文件过大,也不利于其它主机同步化了,存储也是个大问题,那如何去解决该问题呢,于是就有了
“DNS服务器”。
DNS服务器就是为了解决时效性和存储的问题,IANA机构提供一台服务器,当我们通过主机
名来访问服务器,会利用getipbyhostname()方法首先会去检查hosts文件有没有对应的IP,如果
没有则去访问DNS服务器,如果注册了客户端与服务器就能通讯了,那这样就解决了更新hosts文件
的问题及存储问题,那有没有想过,当第二次去访问服务器的时候,还会去DNS服务器中找吗,有可
不会,因为在第一次访问的时候本地会把结果缓存下来,第二次去找则是先去hosts文件中查找,没有则去缓存中查找。
image.png
image.png
DNS结构
DNS是利用树形的结构,将主机名的管理分配给不同层级的DNS服务器来管理,这样做的好处就
在于每个DNS服务器管理的数据量没有想像的那么大,在DNS系统的最上层是“.”,这个DNS服务器叫
root,我们也可以叫做根,因为它根Linux文件系统一样有层级概念,在根下有顶级域ttl(.com,.net,.org,.gov,.edu,.mil)
,顶级域下面有二级域(baidu、jd、tmall、....),二级域下面也可以有三级域或者直接是主机,
这种机制被称为“授权管理机制”。
顶级域:
.com | 公司、行号、企业 |
---|---|
.org | 组织、机构 |
.edu | 教育单位 |
.gov | 政府单位 |
.net | 网络、通信 |
.mil | 军事单位 |
国家域:
.iq,.tw,.hk,.jp,.cn
image.png
DNS查询类型:
1)递归查询
2)迭代查询
所谓的`递归查询`就是从客户端发出请求到访问本地DNS服务器的过程,之间只发出一个请求。
所谓`迭代查询`就是从客户端发出请求到访问本地DNS服务器,如果该请求不是本地DNS服务器
负责的解析域则去请求根,根如果不负责则把结果返回给本地DNS服务器,让它去找其它的域,之间有多个请求。
DNS解析方式
:
正向解析(主机名--->IP)
反向解析(IP--->主机名)
DNS第一次完整查询经过的流程
Client --> hosts文件 --> DNS Local Cache --> DNS Server(recursion) -->
自己负责解析的域:直接查询数据库并返回答案
不是自己负责解析域:Server Cache --> iteration(迭代)
例如:我们要想知道www.baidu.com主机的IP,整个查询的流程是怎么样的(如图:)
首先本地主机去hosts文件中查找有没有对应的www.baidu.com这个家伙,没有就是请求本地DNS服务器,结果发现这个家伙不是我负责的,那它就去请求root,root说这个我不负责,但我知道.com这个负责,于是告诉localDNSserver你去找.com吧,localDNSserver就去找.com,结果.com也说不负责管理这个家伙,同样给出反馈说.baidu知道,于是localDNSserver就去找.baidu.com了,一查,发现www.baidu.com注册了,于是把结果返回给localDNSserver,最后把结果给本机,最后就能够访问www.baidu.com了,着实辛苦,是不是感觉踢皮球啊。
网友评论