DNS又是什么?
在DHCP获取的参数中,IP、掩码、网关之前学过都知道是干什么用的了,但是另外一个参数,DNS没有接触过,那它在网络中起到什么样的作用呢?
相信大家都使用过手机通讯录(联系人的功能),因为手机号码太长了,所以给他起一个别名来对应这个手机号码,查找的时候方便,有电话过来也知道是谁,同样的在网络世界中,IP地址作为通信地址,但是对于普通用户而言,还是过于复杂,所以也出现了一个解决办法,叫做域名,方便人类记忆,也就是我们打开浏览器的时候,输入baidu.com、163.com,比起IP地址来说是不是好记多了。
- 域名与IP
不知道有没有这样的经历,有时候微信、QQ可以发送消息,也能登录,但是打不开网页,咨询有经验的大佬或者运营商的客服都会告诉你一件事,检查DNS是不是对的,那为什么要检查DNS呢?
学过之前的理论都知道在如今TCP/IP为主流的互联网中,不管访问什么应用都得知道对方的IP地址,那么我们在浏览器中输入baidu.com,ccieh3c.com的时候,主机怎么会知道这个域名对应的IP是多少呢?
这就是要使用到一个协议,叫做DNS,域名解析协议,它可以将域名转换成具体的IP地址。
- 了解域名
DNS中的域名是使用句点来分割,来划分层次,比如zhidao.baidu.com,越往右边表示层此越高。这里可能初学者一看有点迷糊,因为域名这个内容是外国人发明的,思维与我们正好相反,外国称呼一个具体地点为XX 街 XX 区 XX 市 XX 省,而中国的顺序 XX 省 XX 市 XX 区 XX街道,域名也是根据这样的思维排序的,最顶层是根域,下一层是顶级域(com)、再下一层是二级域名(baidu),再下一层就是三级域名(zhidao),连起来就是zhidao.baidu.com,可以发现域名的层次关系比较类似于树状结构。(其中根域是最后用【.】表示,但是在实际使用中并不表示出来)
- 根域的DNS服务器中保存了互联网所有的DNS服务器地址,所以在互联网中任何DNS服务器能够顺利的找到根域DNS。(上图就是Windows服务器装了DNS服务后,内置的根域)
- 对应的客户终端设备只要知道任意一台DNS服务器,就可以通过它找到其他的DNS,最终解析到目标,这就是客户端需要DNS的原因,如果没有DNS,则无法把域名解析成IP,导致访问失败。
- 了解域名解析的流程
这里可以填下第二篇的一个坑,在第二篇里面介绍过打开一个网页它首先要知道对方的IP地址,所以浏览器会查看缓存里面是否有记录,如果没有,则向DNS服务器询问,具体步骤如下
- 客户端会发出一个DNS请求,询问www.baidu.com的IP是什么,这个请求交给本地DNS服务器处理(本地DNS则为客户端TCP/IP中手动填写或者自动获取到的地址)
- 本地DNS服务器收到请求后,如果缓存中能找到www.baidu.com的记录,则直接告诉对应的IP地址,如果没有,本地DNS会去问根域:大哥,能告诉我 www .baidu.com的IP地址吗?从这里可以看出来当本地DNS没有对应的缓存记录的时候,会向根域进行求助,当然根域不会记录任何域名信息,它只记录DNS服务器地址,当有请求询问的时候,告诉对方找谁可以得到答案,指明一个方向。
- 根域收到本地DNS请求后,发现顶级域是.com,告诉本地DNS,”这个是.com区域管理的地址,你去问问它。“
- 本地DNS得到大哥的帮助后,继续发起请求“二哥,能告诉我www. Baidu.com的IP地址吗?”
- 顶级.com域名回复:“我知道baidu.com区域权威DNS服务器地址,你问问它应该能得到答案”
- 本地DNS继续向权威DNS发起请求:“三哥,www.baidu.com,对应的IP是多少”权威的意思就是这个区域,它说了算(负责维护、删除、新建)
- 权威DNS查询后将对应的IP地址告诉本地DNS
- 最终本地DNS将IP地址以DNS协议回应给客户端,客户端终于知道了目标的IP,开始发起访问。(本地DNS会缓存得到的结果)
- DNS查询的两种方式
- 递归查询:客户端向本地DNS请求后,如果本地DNS没有缓存记录,则本地DNS代替客户端去询问,最终不管有没有得到地址,都返回告诉客户端结果。
- 迭代查询:客户端向本地DNS请求后,如果DNS没有对应缓存记录,它会返回一个列表值,这个列表值就是告诉客户端找谁能够得到答案,这样一层一层的查询,最终得到结果为止。
- 在实际使用中,通常客户端到本地DNS服务端使用递归查询,而本地DNS服务端到其他服务端之间使用迭代查询,就跟上面的举例过程一样。
- 缓存的作用可以提高解析的速度,第一次讯问后得到的结果缓存在本地,在一定时间内再次访问的时候就不需要在像第一次一样一次一次的讯问了,当然缓存有时间周期,过了这个时间后,缓存会消失,因为中途可能会出现这个域名对应的服务器地址变动了的情况,可以及时的获取新的信息。
- 回到实际:那我们到底使用什么DNS或者给客户分配什么DNS好呢?
作为IT实施人员或者维护人员,在规划、搭建一个网络经常要考虑的一件事件就是,给客户分配什么样的DNS,错误的DNS会造成网页打不开等情况。
在国内的话,分为两种类型(1)公共DNS (2)运营商DNS,那这两种什么情况下使用呢?
- 如果客户网络只存在一个运营商的情况下,使用运营商的DNS效果最佳(运营商DNS,通常运营商会写在猫上面,或者通过拨号可以看到)
- 公有DNS:通常用在客户网络存在多个运营商,或者不知道对应运营商的DNS的情况下,可以使用公有DNS。(下面列出比较知名的公用DNS)