目录
- 交互流程
- 域名解析
- 与服务器建立连接
- OSI七层模型
- TCP/IP四层模型
- 五层体系结构
- 三种模型结构
- 数据在各层之间的传递过程
- 服务器响应HTTP请求, 浏览器得到html代码
- 浏览器解析html代码,并请求html代码中的资源(如js、css、图片)
- 浏览器对页面进行渲染呈现给用户
1. 交互流程
- 域名解析
- 与服务器建立连接
- 服务器响应HTTP请求, 浏览器得到html代码
- 浏览器解析html代码,并请求html代码中的资源(如js、css、图片)
- 浏览器对页面进行渲染呈现给用户
2. 域名解析
以Chrome浏览器为例
-
首先搜索浏览器自身的DNS缓存
-
搜索操作系统自身的DNS缓存
-
读取hosts文件(位于C:\Windows\System32\drivers\etc)
-
向DNS服务器获取ip地址
如果经过以上的4个步骤,还没有解析成功,那么会进行如下步骤(以下是针对Windows操作系统):
5. 操作系统就会查找NetBIOS name Cache(凡是最近一段时间内和我成功通讯的计算机的计算机名和Ip地址,就都会存在这个缓存里面)
6. 那会查询WINS 服务器(是NETBIOS名称和IP地址对应的服务器)
7. 那么客户端就要进行广播查找
8. 就读取LMHOSTS文件(和HOSTS文件同一个目录下,写法也一样)
如果第八步还没有解析成功,那么就宣告这次解析失败,那就无法跟目标计算机进行通信。只要这八步中有一步可以解析成功,那就可以成功和目标计算机进行通信
3. 与服务器建立连接
3.1 OSI七层模型
网络模型 | 作用 | 对应的网络协议 |
---|---|---|
应用层 | 是最靠近用户的OSI层。这一层为用户的应用程序(例如电子邮件、文件传输和终端仿真)提供网络服务 | HTTP TFTP FTP NFS SMTP |
表示层 | 可确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取 | Telnet SNMP |
会话层 | 通过传输层(端口号:传输端口与接收端口)建立数据传输的通路。主要在你的系统之间发起会话或者接受会话请求 | SMTP DNS |
传输层 | 定义了一些传输数据的协议和端口号(WWW端口80等) | TCP UDP |
网络层 | 在位于不同地理位置的网络中的两个主机系统之间提供连接和路径选择 | IP ICMP ARP |
数据链路层 | 定义了如何让格式化数据以进行传输,以及如何让控制对物理介质的访问。这一层通常还提供错误检测和纠正,以确保数据的可靠传输 | FDDI PDN SLIP PPP |
物理层 | 主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流 | IEEE 802.1A IEEE 802.2到IEEE 802.11 |
3.2 TCP/IP四层模型
- 应用层
- 运输层
- 网际层
- 网络接口层
3.3 五层体系结构
- 应用层
- 运输层
- 网络层
- 数据链路层
- 物理层
3.4 三种模型结构
3.5 数据在各层之间的传递过程
4. 服务器响应HTTP请求, 浏览器得到html代码
这个不同的系统架构,内部流程不同,后面补充
5. 浏览器解析html代码,并请求html代码中的资源(如js、css、图片)
浏览器拿到index.html文件后,就开始解析其中的html代码,遇到js/css/image等静态资源时,就向服务器端去请求下载(会使用多线程下载,每个浏览器的线程数不一样),这个时候就用上keep-alive特性了,建立一次HTTP连接,可以请求多个资源,下载资源的顺序就是按照代码里的顺序,但是由于每个资源大小不一样,而浏览器又多线程请求请求资源,所以从下图看出,这里显示的顺序并不一定是代码里面的顺序
浏览器在请求静态资源时(在未过期的情况下),向服务器端发起一个http请求(询问自从上一次修改时间到现在有没有对资源进行修改),如果服务器端返回304状态码(告诉浏览器服务器端没有修改),那么浏览器会直接读取本地的该资源的缓存文件。
详细的浏览器工作原理请看:http://kb.cnblogs.com/page/129756/
6. 浏览器对页面进行渲染呈现给用户
参考链接:
https://blog.csdn.net/LRH0211/article/details/72724361
https://blog.csdn.net/qq_22238021/article/details/80279001