一、域名与IP地址

互联网的每一台主机都是由IP地址来标识位置的,IP地址要么是纯数字,要么就是数字加字母。要记下来实在是太痛苦了,于是就有了将IP地址就和域名关联起来,我们只需要记下域名就可以了。在浏览器里我们都是输入域名得到相应网页内容的,而不是输入IP地址。但是计算机只能识别IP地址并进行定位,于是就需要进行域名转换IP地址这个过程,这个过程就是DNS域名解析

ios 解析域名获取 ipv4 ipv6 地址 通过ip解析域名_网络

二、域名结构树

域名是按照层级划分的。以B站——www.bilibili.com为例子,从左到右解读这个域名。

  • 首先,是wwwwww其实是主机名,同样的还有mailmemberspace等等主机名,这些主机名其实非常方便我们记忆。比如www我们知道是访问主站的,mail是与邮箱有关,member是与会员有关的页面。
  • 接着,它们的后面都跟着.bilibili,也就是都隶属于bilibili域名统一管理。类似的,qq也是这么一回事,www访问主站,mail访问qq邮箱,还有非常多网页都是以这样的形式。
  • 最后,bilibili后面跟着.com,有很多网页都是跟着.com,因为都隶属于com域名来进行管理。常见的还有.cn.net等等。
  • 那么对于.com.cn.net这与域名又是谁来管理呢?域名是由点来进行划分的,所以域名的最后也是要有一个点.来分割的,但是因为最后都是由根来统一管理,就没必要在全部域名的最后写.root,所以直接把根用点.表示,而一般我们都会把这个点给忽略掉。

完整的域名结构树表示如下。

ios 解析域名获取 ipv4 ipv6 地址 通过ip解析域名_http_02

三、域名服务器

由域名结构树可以看到,最顶部是由一个点.来表示的,那么就有一个问题,底下这么多域名最终都会聚由一个根管理能行嘛?实际下这个根是由一群服务器组成的,由国际组织iana负责管理。

ios 解析域名获取 ipv4 ipv6 地址 通过ip解析域名_域名服务器_03


如上图,这群服务器仅仅只用了13个不同的域名,这13个域名从am开头,这13个根域名服务器是由12个独立机构运营的。注意是是13个域名,不是13台机器。那么究竟目前有多少台机器负责根域名服务器的工作呢?大概有1467台。13个域名,但有1400多个节点,也就意味着绝大部分节点的IP地址是一样的。那我们如何与最近一个节点取得联系呢?答案就是任播。采用这种技术,当我们向根域名服务器进行联系时,就能找到离我们最近的根域名服务器了。

根域名服务器会管理.com.cn.net这些域名服务器,它们被成为顶级域名服务器,也就是Top Level Domain,简写TLD

ios 解析域名获取 ipv4 ipv6 地址 通过ip解析域名_http_04


顶级域名服务器会分别管理各自的域名服务器,比如上面提到的bilibiliqq,这些服务器叫权限域名服务器或者权威域名服务器

权威域名服务器就会管理各自的主机,当然实际网络中的管理层次会更复杂。

四、域名解析过程

假设现在我们用浏览器访问B站,在地址栏输入域名后,

  • 浏览器首先需要看看自己浏览器缓冲中有没有对应的IP记录,如果有,解析结束;
  • 如果浏览器缓存没有(没命中),接着查询一下主机本地文件里面有没有对应记录,就是hosts文件,如果有记录就没必要进行后面的步骤了。
  • 假设还没命中域名,浏览器就会调用解析器,以通过域名获取IP地址的代码。解析器可以帮助浏览器调用系统的网络功能,它其实就是一段程序,如gethostbyname。解析器就相当于DNS客户端,DNS客户端需要向DNS服务器查询IP地址。通常我们在网络设置里可以查到自己的DNS服务器地址,DNS客户端就会向此地址发起解析请求。如果没有这个地址,或者DNS服务器地址设置错误,但是又可以上网,就会出现可以上QQ但不能浏览网页的情况,因为QQ是直接使用IP地址访问服务器的。

    这台DNS服务器一般是离我们最近的,由ISP负责管理。ISP就是互联网服务提供商,常见的有中国电信和中国网通等。本地DNS服务器(LDNS)在收到请求后会查看自己的缓存,如果有就直接返回IP地址,并且会标注非权威non-authoritative。毕竟本地DNS服务器并不像.com控管域名,只是帮我们走走流程而已。
  • 如果LDNS没有缓存,就会向根域名服务器(Root Server)发起请求。
  • 根域名服务器返回给LDNS一个所查询域的主域名服务器(gTLD Server,国际顶尖域名服务器,如.com .cn .org等)地址
  • 此时LDNS再发送请求给上一步返回的gTLD
  • 接受请求的gTLD查找并返回这个域名对应的Name Server的地址,这个Name Server就是网站注册的域名服务器
  • Name Server根据映射关系表找到目标ip,返回给LDNS
  • LDNS缓存这个域名和对应的ip
  • LDNS把解析的结果返回给用户,用户根据TTL值缓存到本地系统缓存中,域名解析过程至此结束

这里任以访问bilibili为例,整个过程表示如下。要注意的是解析器与本地DNS服务器之间用的是递归方式传输,传递以后回归,意思是发送数据以后最终返回结果给我就可以了;而本地DNS服务器和三层服务器之间用的迭代方式传输,也就是第一步得到什么,然后第二个,接着第三步。

ios 解析域名获取 ipv4 ipv6 地址 通过ip解析域名_网络协议_05

如果本文对屏幕前的你有帮助,希望给作者点个赞,有任何疑问也欢迎评论区留言,谢谢支持!😉😘