完整的网络访问过程分析(宏观角度分析)
2024年10月28日大约 3 分钟
完整的网络访问过程分析(宏观角度分析)
以访问百度为例,来一步步分析一个完整的网络访问过程是怎样的
- 当我们输入http://www.baidu.com,然后按回车(在这里我们通过使用浏览器的F12开发人员工具进行分析),发生的一系列事情如下:
首先,会进行一次DNS域名解析(就是找到对应的IP地址),DNS解析有将近10步,分别是
- 检查浏览器缓存中是否有对应映射,有就结束;
- 检查操作系统缓存(hosts文件)中是否有对应映射;
- 访问我们电脑配置中的DNS(即LDNS)中看是否有对应映射大约80%的域名解析在这就完成了;
- 直接到root server请求解析;
- 根域名服务器返回给LDNS一个所查域的主域名服务器(gTLD);
- LDNS向主域名服务器发出解析请求;
- gTLD查找并返回对应的name server(就是你注册的域名服务器)域名服务器地址;
- name server查找到对应映射将结果返回给LDNS;
- LDNS缓存这个映射,并把结果返回给用户
查找到对应的ip之后,浏览器就会向对应的ip发送一个http请求,具体的请求如下图:
对于每个字段的含义,在此处就不一一解释了
请求到达服务器之前可能还会经过CDN、反向代理服务器等,如下图
到达真正的服务器端之后,服务器那边经过复杂的业务逻辑(有的也许很简单),返回给浏览器一个响应,如下图:
浏览器接收到响应结果后会进行渲染,大体的渲染过程是这样的:
- 浏览器解析html源码,然后创建一个DOM树。 在DOM树中,每一个HTML标签都有一个对应的节点,并且每一个文本也都会有一个对应的文本节点。 DOM树的根节点就是 documentElement,对应的是html标签。
- 浏览器解析CSS代码,计算出最终的样式数据。 对CSS代码中非法的语法她会直接忽略掉。 解析CSS的时候会按照如下顺序来定义优先级:浏览器默认设置,用户设置,外链样式,内联样式,html中的style。
- 构建出DOM树,并且计算出样式数据后,下一步就是构建一个 渲染树(rendering tree)。 渲染树和DOM树有点像,但是是有区别的。DOM树完全和html标签一一对应,但是渲染树会忽略掉不需要渲染的元素,比如head、display:none的元素等。 而且一大段文本中的每一个行在渲染树中都是独立的一个节点。 渲染树中的每一个节点都存储有对应的css属性。
- 一旦渲染树创建好了,浏览器就可以根据渲染树直接把页面绘制到屏幕上。 当然,如果渲染的过程中发现还有一些静态资源(如图片、js等)的时候又会发出http请求
至此,一个完整的网站访问流程就结束了。
当然,其中还有很多的细节,这里只是大体的分析了一下流程。关于更具体的网络的内容(包括包的流动等)可以查看计算机网络一书(详细的讲解了从应用层到传输层到网络层再到网络接口层是怎样一步步执行的,当然还有路由的选择等等)。当然,服务器那边是如何进行数据的接收、处理的,也是值得我们深究的内容。