这个主题很早就想写,最近刚好看到相关的视频,就总结一下
参考视频:『面试问答』:浏览器从输入URL到展示页面,经历了哪些过程?
浏览器从输入URL到展示页面的过程,涉及到网络中各种协议的交互和各种设备对报文的转发。
主要流程包括:URL解析、生成HTTP请求、生成TCP报文段、DNS解析域名得到服务器的IP地址、IP路由寻址和生成IP数据报、请求下一跳网关MAC地址、服务器返回响应报文等。
1、浏览器进行URL解析并生成对应的请求
浏览器对URL解析确定要访问的web服务器协议、域名和文件名
http://www.server.com/dir1/file1.html
如上,使用HTTP协议访问www.server.com
服务器的dir1
目录的file1.html
文件
浏览器先查看本地有无缓存,如果有就直接返回,如果没有就生成请求报文
2、传输层生成TCP报文段,准备发起TCP连接
HTTP协议是基于TCP报文,应用层HTTP请求准备完成后,客户端主机开始进行TCP报文段头部的封装。
3、网络层生成IP数据报
传输层报文段组装好后,开始进行IP数据报的组装。
这一步需要知道服务器的IP地址,所以先要通过DNS进行域名解析。
DNS解析
- 先检查浏览器DNS缓存
- 再查host主机文件
- 最后查DNS服务器
- 递归查询:DNS服务器替客户端访问上一级域名解析服务器
- 迭代查询:客户端自己一级一级查询
- 最终获得服务器的IP地址,确定IP数据报的目的IP
IP路由寻址
传输层TCP处理完后,开始进行网络层IP数据报的处理,特别是对多网卡客户端主机,访问服务端的IP数据报需要确定从哪个网卡发出去,所以需要路由寻址,查找路由表确定报文发出去的网口,从而确定IP数据报的源IP地址,生成IP数据报。
4、数据链路层生成以太网帧
网络层生成IP报文后,下一步需要数据链路层生成以太网二型帧将请求发送出去。
5、ARP请求下一跳网关的MAC地址
以太网帧头的源MAC就是发送网卡的MAC,目的MAC是路由表中指定的下一跳网关IP对应的MAC。ARP协议使用IP地址获取对应的MAC地址,从而确定以太网帧头的目的MAC
6、报文经过网络到达服务器
整个网络是经过大量的路由器和交换机互联组成的,报文经过这些设备的转发最终到达Web服务器。
7、服务器返回响应报文
服务器收到请求报文后首先检查报文的目的MAC是否是自己网卡的MAC,目的IP是否是自己的IP,然后查看传输层TCP协议的端口是否是Web服务进程监听的端口,然后将请求报文交给Web服务进程处理。
- 浏览器与服务器经三次握手后建立TCP连接。
- Web服务进程将请求的网页内容封装成响应报文,然后通过网卡发出去。
- 响应报文经过网络中的路由器和交换机转发到达客户端主机。
- 浏览器与服务器经四次挥手后释放TCP连接。
- 浏览器将请求的网页内容渲染出来。
上面是对于浏览器从输入URL到展示页面,经历了哪些过程的简单总结,但真实情况需要考量的细节远不止于此,如服务器是否配置了CDN服务、服务器防火墙对于报文的处理、服务器中间件的运作、服务器意外断开连接、请求资源需要重定向或需要请求转发等,这些细节共同构建了互联网资源的运作。