从应用层到实体层的协议太多了,我们并不能一一涉及,目前来说就打算整理可能会与前端相关的协议.
前端面试常会问到一个问题-"从输入一个url到页面渲染经历了哪些过程".这其实是一个相当复杂的过程,所以总结的时候常常是归纳了几个重要的步骤.而这次我将尝试通过结合协议的方式去理解它们.
URL组成
首先,我们需要先了解网址的组成.举例说明
未解析版
https://i.cnblogs.com/posts/edit https----->https协议 i.cnblogs.com --- 域名 /posts/edit 路由
解析版
(不代表实际地址,我瞎编的一个,只是为了说明组成)
https//192.168.1.255:443/index.html https ---->https协议 192.168.1.255---->IP地址 443 ---->端口号 index.html---->文件路径
所以我们可以大概知道URL有这些组成,协议(http或者https协议)、IP地址、端口号、路径.那么,结合URL,我在之前前端路由那里已经大概解释了,路由为啥指向index.html静态资源路径,剩下的就需要知道域名是怎么解析成IP的,https是干嘛用的,端口号是怎么来的.
DNS协议
DNS为域名系统,其重要功能是域名转IP.在互联网中,每台计算机都会分到一个IP地址,我们可以通过IP地址去访问这些计算机,得到相关服务.而DNS就是关了管理域名和IP的系统.
首先,我们了解一下域名的组成.
i.cnblogs.com
而它的实际域名是
i.cnblogs.com.root
DNS是分级查询的,而域名的每个点都是一个分级.
".root":是根域名,因为大家都是这个根域名,所以就隐藏了.
".com":顶级域名,其他还有".cn"之类的
".cnblogs":次级域名,可以自定义
"i":三级域名或者主机名,如果不加,默认是"www"
DNS的解析就是按这种分级进行解析的.
DNS
1.当你输入一个域名的时候,计算机会先去本地的hosts文件中找有没有对应的映射关系,如果有就直接拿到对应id,没有就去到DNS解析器(具体作用就是将在完整合规的域名请求信息上再加几个信息,),之后再
2.查看本地DNS缓存,这些缓存可以会分存在很多地方,最主要的是DNS解析器和浏览器缓存中.比如你成功访问过一次某网站了,浏览器就可能把这个域名和ip的映射保存起来,下次输入相同域名时就可直接获取.到目前为止都没有向DNS服务器发请求.假如以上步骤都没找到,则
3.向DNS服务器发送请求,关于DNS服务器的工作流程如下.
1):首先会向本地DNS服务器发请求,这个本地并不是说在自己电脑上,而是给你指定的服务器.我们window+r ,然后输入cmd,然后再ipconfig/all 能看到我们的网络信息,其中有个就是DNS服务器的ip地址,这个就是咱们的本地DNS服务器,也就是"专门对你负责的",所以当它找到对应ip返回给我们时,这个域名解析是有权威性的.当本地DNS服务器没有对应的映射时,便会求助外界.
2):本地DNS服务器有内置根域名服务器对应的ip地址,目前全世界有13个根域名服务器,本地DNS服务器内部可能对应其中的多条.接下来便进行DNS的分级查询.查询的流程如下
a):先向这些根服务器发送一个".com"的搜索条件,然后可能有多条信息,告诉本地服务器我们都有相关信息.但是本地DNS服务器只会保存首先回复的根域名服务器的相关信息,并且不再向其他根服务器发送信息.
b):根服务器下面管理着许多下一级服务器.当本地服务找到对自己负责的根服务器时,便会再给它发一个".cnblogs.com"的请求.而该根服务器则会返回一个列表,告诉本地服务器有哪些服务器有相关信息,并把对应服务器的ip给出来.
c):本地服务器拿到对应ip之后便会去请求,发送"i.cnblogs.com"请求,对应服务器将会给出一条或者多条信息.如果是多条,将会有多个ip,每条对应每个ip,也就是是这一个域名对应了多条ip,而这些ip理论上都是可以访问的.
假如这个服务器并没有"i.cnblogs.com",那本地服务器则会拿到另一个服务器去查,知道把所有次级服务器查完或者查到想要的ip为止.
d):转发.以上的三个步骤已经是个完整的流程了,但是转发是一个新规则.默认情况下,当本地DNS服务器没解析成功时会向根服务器发送请求,然后逐级往下.这个顺序.但是转发是可以打破这种顺序的.它可以让服务器直接去向指定服务器发送请求,不必循规蹈矩.但是前提是必须安装转发器,并且配置了转发目标服务器ip.
到目前为止我们只是解析了ip,拿到了如下的地址
https//192.168.1.255/index.html
下一篇我们再分析https
参考文献: