要想深入理解DNS解析的过程,我们需要知道一些底层的东西和一些周边的知识,本篇文章会围绕这些来构建。
名词解释
前置知识
DNS
域名系统DNS(Domain Name System)
是因特网使用的命名系统,用来把便于人们使用的机器名字转换为IP地址。DNS
属于应用层协议,是基于UDP
协议的。
hosts文件
hosts文件
是ARPANET
时代的解决方案,那时候只有数百台计算机,一个hosts就能满足需求。
域名(Domain)
mail.ccav.com
---- ---- ----
三级域名 二级域名 顶级域名
域名的层级是按照上面这么划分的,每级域名长度不超过63个字符,不区分大小写,只能使用数字字母和-。一个完整的域名不超过255个字符。
域名服务器划分
了解域名服务器划分之后,就会对DNS解析的过程大概有些了解。域名服务器按照层级分为:
本地域名服务器
本地域名服务器相当于一个班主任,你有点啥事都找他。当一个主机发出DNS查询的时候,这个查询的请求就会发送到本地域名服务器。
根域名服务器
根域名服务器是最高层次的域名服务,是校长,只负责规划大方向。他知道所有顶级域名服务器的域名和IP地址。不管那个本地域名服务器若自己不能不能解析,那首先请求的就是根域名服务器。根域名服务器不会把待查询的域名直接转换成IP,而是告诉本地域名服务器下一步应该找哪一个顶级域名服务器进行查询。
顶级域名服务器
顶级域名服务器是负责各个方向的副校长,有负责安全的,有负责教学的。他负责管理该顶级域名下的所有二级域名,当收到DNS查询请求后就会给出响应的应答,可能是最终的结果,也可能是下一步应该找到的域名服务器的IP地址。
权限域名服务器
权限域名服务器就是负责一个区的域名服务器,是基层干活的,比如宿管,各科老师,他负责一个更小的区域。当一个权限服务还不能给出最后的回答时,就会告诉查询请求的DNS客户,下一步应该找哪个权限域名服务器。
域名查询的两种方式
这里只是通俗的讲两种查询的方式,关于如何更好的理解并记住这种两种方式,可以看这篇文章《怎么更好的理解DNS的迭代查询与递归查询》
递归查询
递归查询,就是你找我要一个域名的IP地址,但是我不知道,那我去帮你去向知道的人问这个IP地址。举个例子就是,你问你班主任怎么做番茄炒鸡蛋,你班主任不知道,但是你班主任去问了食堂厨师,然后告诉你。这就叫递归查询。
从host到本地域名服务器一般是用的递归查询。
迭代查询
迭代查询就是,你找我要一个域名的IP地址,我也不知道这个IP地址,但是我知道谁知道,我告诉你去找谁问。举个例子就是,你们班主任到了食堂随便拉了个人问怎么做番茄炒鸡蛋,那个人说,我只是个卖饭的,我不知道,但是我知道A君是在后厨的,你可以去问A君。然后你班主任就去问A君了。呐,这就叫迭代查询。
从本地域名服务器到根域名服务器一般是用的迭代查询。
行了,该知道的储备知识我们知道的差不多了,接下来就看看关键的流程吧。
DNS查询步骤
假设一台主机想知道y.abc.com这个域名的IP地址,那么整个的查询过程如下:
- 主机先向其本地域名服务器进行递归查询
- 本地域名服务器采用迭代的查询,它先向根域名服务器查询
- 根域名服务器告诉本地域名服务器,下一次应该查询的顶级域名服务器的IP地址。
- 本地域名服务器向顶级域名服务器发起查询。
- 顶级域名服务器告诉本地域名服务器,下一次应查询的权限域名服务器IP地址
- 本地域名服务器向权限域名服务器发起查询。
- 权限域名服务器告诉本地域名服务器所查询的IP地址。
- 本地域名服务器把查询结果告诉主机
给这个过程做个图示,就是这样的
整个的DNS查询过程就是这样的。结合前面的一些前置知识,你会感觉整个过程更简单。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。