【面试中的网络知识】DNS原理-如何实现域名和IP地址的查询转换
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
接上一篇理解 浏览器是如何生成HTTP消息的 最好是按照顺序来读。
从上一篇博客我们得知浏览器是如何生成了HTTP消息了但是浏览器作为应用程序是不具备向网络中发送请求的能力而是需要委托给操作系统的内核协议栈来发送请求。在委托协议栈之前浏览器还要做的一件事情就是将域名转换为IP地址。
在了解这个过程之间我们先来学习一下IP地址。
1. IP地址
IPInternet Protocol网际互联协议是TCP/IP协议中的核心部分。通常我们接触比较多的是IP地址像 192.168.0.1
这种4组数字和3个点分隔符组成每组数字的取值范围是0~255换算成2进制最大表示到28也就是8个bit1个字节的长度所以1个IP地址的长度占用了4个字节。
IP地址的作用可以帮助我们在互联网中定位到某台主机。通常我们访问的网站域名都是很多字符组成一般占用几十到几百个字节而1个IP地址只占用4个字节如果通过域名去定位这台主机要远大于使用IP地址定位的使用的网络传输成本。
IP地址一般是由2部分组成子网号+主机号
那子网和主机又分别代表了什么呢下面这张图就展示了他们的关系比如几台计算机通过集线器可以组成的一个小的内网这个内网就是子网而每一台计算机就是子网中的主机。子网与子网之间可以通过路由器连接起来实现访问。
1.1 掩码
既然IP地址是由子网号和主机号组成那他们是通过什么规则组成的呢这里就需要接触掩码地址。
掩码地址和IP地址长的是一样的都是占用4个字节的一组.
号分隔的数字。掩码的表示有很多种形式如下两种
掩码理解起来其实比较简单掩码掩码遮掩起来的就是子网号剩下的就是主机号原理上如下首先将IP地址和掩码地址转换为2进制表示然后做拆分转换如下
这样我们就可以拿到子网号和主机号了路由器可以根据子网号定位到子网集线器可以定位到具体的主机。
还有一种简单的方式表示掩码就是上面的c表示法24其实就是二进制表示方法中从左往右24个数字1。
2. 查询IP地址
接下来浏览器需要根据域名查询IP地址这一步要借助DNS服务器同理浏览器无法直接向DNS服务器发起请求而是要调用操作系统Socket库中的DNS解析器程序来完成。
DNS解析器其实就是DNS客户端是一段实现在Socket库中的程序代码他的作用就是接收各种域名转换IP地址的请求将域名发送给DNS服务器DNS服务器接收请求解析后将IP地址返回给DNS解析器解析器再将IP地址存放到浏览器指定的内存地址处。当然DNS解析器也是不具备直接向网络发送请求的同理要借助操作系统的内核协议栈来实现。接下来浏览器就会从内存中取出IP地址和生成的HTTP消息交给操作系统来执行发送网络请求。
通常DNS服务器的地址是作为TCP/IP设置的一个配置项提前设置好的DNS地址有很多比如有阿里的223.5.5.5
谷歌的8.8.8.8
等等。
3. DNS服务器的工作原理
DNS服务器的主要工作就是将客户端发来的域名转换为IP地址在DNS服务器中保存着域名与IP地址的映射表这张表中除了保存域名
、IP地址
还有Class
DNS设立之初考虑了除了互联网之外的网络不过目前只有互联网IN这一种类型和记录类型
A就是Adress表示IP地址MX表示邮件服务器。
客户端的入参中会包含域名、Class类型、记录类型等参数以此来确定最终的IP地址。
在全世界有很多的WEB服务器如果只有一台DNS服务器来记录相关的域名和IP地址是不现实的所以这么多的映射记录肯定是分散保存在不同的WEB服务器上的。下面我们就来看下如何根据域名找到最终的IP地址。
3.1 DNS服务器缓存
查找的第一步是根据我们配置的DNS地址找到对应的DNS服务器这台DNS服务器上会缓存之前查找过的域名当然是有过期时间的。如果有此域名会直接返回客户端同时也会告诉客户端这个IP地址来自缓存还是保存此地址的DNS服务器。
3.2 DNS接力查找
我们知道域名通常是由很多层级来表示的比如www.lab.glasscom.com
这个域名就包含了4层域名1个是.
放在最后一般隐藏不写表示根域com
表示顶级域名glasscom
表示一级域名lab表示二级域名www就代表了web服务器。一般来说每层的域名会分布在不同的DNS服务器上当然也不是那么绝对但是上一层级的域名会记录下一层级域名的IP地址然后所有的域名服务器都会记录根域服务器的IP地址。以上面这个域名为例
- 根域名 全世界的根域IP地址有13个这样就有对应的13组服务器大部分在美国据说中国以前有一台后来因为国内互联网开放程度过低动不动就封这个网站那个网站被撤掉了。回到上面例子根域服务器会记录
com
这个域名的服务器IP地址。 - 顶级域名 上面例子中的
com
是当前互联网中应用最广的域名这个域名对应的DNS服务器中会记录下一级glasscom
的域名服务器地址。 - 一级域名 上面例子中的
glasscom
是一级域名这个对应的服务器中会记录lab
的DNS服务器IP地址。 - 二级域名 这是最下一层的域名了这个DNS服务器中就会记录
lab.glasscom.com
这个域名与IP的映射记录。
因为所有的域名服务器中都会记录根域服务器的IP地址所以不管我们电脑上配置的哪个DNS服务器在DNS缓存无法命中的情况下会直接将请求发给根域服务器根域服务器将顶级域com
的IP地址返回到我们配置的DNS服务器它再去寻找com
的DNS服务器同理会返回glasscom
域名DNS服务器的地址依次直到最下层的lab.glasscom.com
域名DNS服务器这台DNS服务就会把www.lab.glasscom.com
对应的IP地址返回给客户端完成对此IP地址的请求。
经常上面的这些步骤查找浏览器就可以得到我们输入的URL中域名对应的IP地址下一步就可以将网络请求委托给操作系统了。
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |