DNS详解

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服务器询问,具体步骤如下

  1. 客户端会发出一个DNS请求,询问www.baidu.com的IP是什么,这个请求交给本地DNS服务器处理(本地DNS则为客户端TCP/IP中手动填写或者自动获取到的地址)

  2. 本地DNS服务器收到请求后,如果缓存中能找到www.baidu.com的记录,则直接告诉对应的IP地址,如果没有,本地DNS会去问根域:大哥,能告诉我 www .baidu.com的IP地址吗?从这里可以看出来当本地DNS没有对应的缓存记录的时候,会向根域进行求助,当然根域不会记录任何域名信息,它只记录DNS服务器地址,当有请求询问的时候,告诉对方找谁可以得到答案,指明一个方向。

  3. 根域收到本地DNS请求后,发现顶级域是.com,告诉本地DNS,”这个是.com区域管理的地址,你去问问它。“

  4. 本地DNS得到大哥的帮助后,继续发起请求“二哥,能告诉我www. Baidu.com的IP地址吗?”

  5. 顶级.com域名回复:“我知道baidu.com区域权威DNS服务器地址,你问问它应该能得到答案”

  6. 本地DNS继续向权威DNS发起请求:“三哥,www.baidu.com,对应的IP是多少”权威的意思就是这个区域,它说了算(负责维护、删除、新建)

  7. 权威DNS查询后将对应的IP地址告诉本地DNS

  8. 最终本地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)

图片

  • 抓包看下DNS的报文

 这个就可以直接打开wireshark,选择自己的上网网卡,抓取即可

图片

图片

使用DNS过滤下,只看DNS的内容,可以看到本地使用的是223.5.5.5的公用DNS。

图片

通常客户端发送的DNS一个A记录的查询,讯问对应域名的IP是都是,可以看到DNS协议使用的是UDP的53端口号,DNS的查询还有另外的,比如邮件使用的(MX记录)、别名(CHAME)等。

图片

 回应报文中会发现有多个IP地址,这其实是DNS的轮询技术,作用就是实现负载均衡,因为像B站这样的日活访问特别高的WEB服务,都会有多台服务器提供服务,所以在客户端请求的时候就可以相应多个地址,客户端随机选取一个,达到均衡的效果,不然一台服务器顶不住这么大的访问量,直接死机。

Windows命令学习

1、地址释放:ipconfig/release,释放掉获取的地址,通常是在测试的环境下使用,比如我们做了某些地址绑定,释放掉这个在重新获取看下是否成功。

2、重新获取:ipconfig/renew,重新获取IP地址,跟上面类似,测试的时候使用。

3、清空DNS缓存:ipconfig/flushdns,清空本机已经缓存的DNS记录,在获取到错误的解析的时候,可以使用该命令清空

4、查看DNS缓存:ipconfig/displaydns,查看本地缓存的DNS记录

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

资料库01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值