从输入URL到页面加载发生了什么之DNS解析

总体来说可以分为以下几个阶段:

(1)DNS解析
(2)TCP连接
(3) 发送HTTP请求
(4)服务端处理请求并返回HTTP响应报文
(5)浏览器解析渲染页面
(6)TCP连接关闭

1. DNS解析

(1)DNS定义
DNS(Domain Name System)服务是和HTTP协议一样位于应用层的协议。它提供域名到IP地址之间的解析服务。更通俗点讲,它就是网络世界的地址簿,根据名称(域名),就可以查看具体的地址(IP地址)。
互联网上每一台计算机的唯一标识是它的IP地址,但是IP地址并不方便记忆。因此,用户通常使用主机名或域名来访问对方的计算机,而不是直接通过IP地址访问。但是让计算机去理解名称,相对而言就变得困难了。因为计算机更擅长处理一长串数组。为了解决上述问题,DNS服务应运而生。DNS协议提供通过域名查找IP地址,或逆向从IP地址反查域名的服务。
在介绍DNS解析流程之前我们先认识一下因特网的域名结构以便方便后续的理解。在因特网中的命名采用层次树状结构,任何一个连接在因特网上的主机或路由器,都有一个唯一的层次结构名字,即域名。这里,**“域”**是名字空间中一个可被管理的划分。域还可以划分为资源,而子域还可以继续划分为子域的子域,这样就形成了*域、二级域、三级域,等等。各级域名由上一级的域名管理机构管理,而最高的*域名则由ICANN进行管理。
从输入URL到页面加载发生了什么之DNS解析

从输入URL到页面加载发生了什么之DNS解析
(2)四种类型的域名服务器

  • 根域名服务器(root 那么server)
    根域名服务器是最高层次的域名服务器,也是最重要的域名服务器。所有。的根域名服务器都知道所有的*域名服务器的域名和IP地址。根域名服务器是最重要的域名服务器,因为不管是哪一个本地域名服务器,若要对因特网上任何一个域名进行解析(即转换为IP地址),只要是自己无法解析,就首先要求助于根域名服务器。
  • *域名服务器(即TLD服务器)
    负责管理在该*域名服务器注册的所有二级域名。当收到DNS查询请求时,就给出相应的回答(可能是最后的结果,也可能是下一步应当找的域名服务器的IP地址)。
  • 权限(权威)域名服务器
    负责一个区的域名服务器。
  • 本地域名服务器(local name server)
    当一个主机发出DNS查询请求时,这个查询请求报文就发送给本地域名服务器。当PC使用Windows操作系统,就可以看见有关DNS地址的选项(自动获取或指定地址)。这里的DNS服务器指的就是本地域名服务器。本地域名服务器离用户交集,一般不超过几个路由器的距离。从输入URL到页面加载发生了什么之DNS解析
    从输入URL到页面加载发生了什么之DNS解析

(3)DNS解析流程
以访问www.csdn.net为例,经过几个步骤我们才能知道域名解析后对应的IP地址。
①当在浏览器输入www.csdn.net按下回车键时,电脑客户端首先会发出一个DNS请求,询问本地域名服务器(本地DNS)www.csdn.net的IP是多少。
②本地DNS收到来自客户端的请求。你可以想象成本地服务器缓存了(key,value)的哈希表,其中key是域名,value是对应的IP地址。如果能找到www.csdn.net,它直接就返回IP地址。如果找不到,本地DNS会去问它的根域名服务器:“老大,你能告诉我www.csdn.net的IP地址吗?”,根域名服务器是互联网域名解析系统(DNS)*别的域名服务器,负责返回*域的权威域名服务器地址,所有域名解析操作均离不开它们。它不直接用于域名解析,但能告诉你接下来去哪里询问。
③根DNS收到来自本地DNS的请求,发现后缀是.net,便会返回.net*域名服务器地址。
④本地DNS转向问*域名服务器。“老二,你能告诉我www.csdn.net的IP地址吗?”。*域名是域名的最后一个部分,即是域名最后一点之后的字母。它负责管理二级域名,比如csdn.net,所以它能提供一条更清晰的方向。
⑤*域名服务说:“我给你负责www.csdn.net区域的权威(权限)域名服务器的地址,你去问它应该能问到”。
⑥本地DNS转向问权威DNS服务器:“您好,www.csdn.net对应的IP是多少”,cdsn.net的权威DNS服务器,负责一个区(区csdn.net)的域名服务器,给出最后的查询结果。
⑦权威DNS服务器查询后将对应的IPX.X.X.X告诉本地DNS。
⑧本地DNS再将IP地址返回客户端,客户端和目标建立连接。
从输入URL到页面加载发生了什么之DNS解析
(4)DNS缓存
为了提高DNS查询效率,并减轻根域名服务器的负荷和减少因特网上的DNS查询报文数量,在域名服务器中广泛地使用了高速缓存,它用来存放最近查询过的域名以及从何处获得域名映射信息的记录。
通过输入 ipconfig /displaydns 命令来查看缓存命中的是否是正确 IP。也可以通过ipconfig /flushdns来清除DNS缓存,以保证解析到正确的 IP 。
从输入URL到页面加载发生了什么之DNS解析
(5)DNS负载均衡
不知道大家有没有思考过一个问题: DNS返回的IP地址是否每次都一样?如果每次都一样是否说明你请求的资源都位于同一台机器上面,那么这台机器需要多高的性能和储存才能满足亿万请求呢?其实真实的互联网世界背后存在成千上百台服务器,大型的网站甚至更多。但是在用户的眼中,它需要的只是处理他的请求,哪台机器处理请求并不重要。DNS可以返回一个合适的机器的IP给用户,例如可以根据每台机器的负载量,该机器离用户地理位置的距离等等,这种过程就是DNS负载均衡,又叫做DNS重定向。大家耳熟能详的CDN(Content Delivery Network)就是利用DNS的重定向技术,DNS服务器会返回一个跟用户最接近的点的IP地址给用户,CDN节点的服务器负责响应用户的请求,提供所需的内容。
从输入URL到页面加载发生了什么之DNS解析
从上图可以看到,用户的访问被分流了,所有的请求不再是聚集到一个节点上,而是被分担在了各个合适的节点上,这样即使存在单点故障,也仅仅只会影响到一部分用户,况且我们还可以使用其他手段做故障转移。
参考资料:
1.谢希仁 编著《计算机网络》
2.图解HTTP
3.刘超老师-趣谈网络协议
4.前端经典面试题: 从输入URL到页面加载发生了什么?