这是一道经典的面试题,主要考察对计算机网络知识的掌握,我们可以这样作答:
1.在浏览器中输入 url ,并请求
2.应用层解析 url
- 浏览器先查看(浏览器缓存 - 系统缓存 - 路由器缓存),如果这些缓存中有当前 url 的 web资源,则直接展示页面,如果没有,需要进行域名解析
- 域名解析(DNS解析),将域名转换为 IP地址
- 应用层生成 HTTP请求报文
3.传输层 TCP协议 传输报文
- 传输层的 TCP协议 提供可靠的数据传输服务
- TCP协议 是面向连接的,所以需要 “三次握手” 建立连接
4.建立起连接之后,浏览器向服务器发送 HTTP请求报文
5.网络层 IP协议 选择路线
- IP协议 将用户报文封装成组进行数据传输
- ARP协议(地域解析协议),将 IP地址 解析为对应的 MAC地址,便于数据传输
6.数据到达数据链路层,在相邻结点间无差错的、可靠的传输数据帧
7.服务器接收数据,处理收到的请求,将响应返回至浏览器
8.浏览器接收到 HTTP响应
至此,从输入 url 到浏览器接收响应的过程结束。那么响应页面是如何展示的呢?
- 读取页面内容,浏览器进行渲染,解析 html源码
- 生成 Dom 树,解析 css 样式,js 交互
- ajax 查询