点击网页到页面响应的完整流程
大家好,我是程序员花卷,现在是一名大三学生,在持续学习进步,在这里分享一些我的学习感悟和积累
这是一个非常经典的面试题,在最近的面试中我被多次问起,现在我来详细讲述一下这道题,可以完整的给面试官讲我这篇文章,这个题你一定能拿高分。
第一步,浏览器**解析你的网址**,用的是什么协议**http还是https**,**域名**是什么?**路径**是什么?那这一层属于**应用层**,那先点进去就够。接下来关键的一步来了,**DNS解析**,浏览器要先知道服务器在哪,对吧?那他不会一上来就问DNS服务器,而是先查浏览器缓存,系统缓存没有,再去本地DNS服务器,本地DNS再帮你一路问到权威DNS,那最终把域名换成IP。拿到IP之后,浏览器能直接开始发业务数据吗?不行,他得先跟服务器确认关系,也就是TCP三次握手。建立一条可靠连接,如果是HTTPS,还要多一轮TLS握手协商加密算法和密钥,防止数据在路上被偷看被篡改。**这里的https是明显的加分点,一定要提一下。**
连接建立好之后,浏览器才开始真正发请求。那它会把请求内容组装成一个http报文。但注意,这时候它也只是应用层数据,还出不了门。接下来是整道题的灵魂——协议栈分装,本质上就是一层一层贴快递单,http数据先加tcp头标端口序号保证可靠传输;再加IP头写清楚从哪来到哪去;再加Mac头负责在当前网络把包送出去。那么问题来了,这个mac地址是哪来的?答案是ARP,也就是用IP地址去问下一条设备的Mac地址。那这个点你一说面试官就知道了。你不是只会背流程。
数据封装完之后交给网卡,被转化成电信号或者光信号。真正上路,到了局域网交换机出厂,那他不看IP,只看Mac,负责把数据转发到正确的端口。出了局域网,轮到路由器工作,路由器只看IP,决定下一跳往哪走。每过一个路由器,TTL-1,防止数据包在网络里无限兜圈子。这一句也属于加分项,提一嘴。数据包一路转发,终于到达服务器。服务器这边流程正好反过来,一层层拆包,去掉Mac头、IP头、TCP头,最后把HTTP请求交给web服务。服务端处理业务逻辑可能查数据库调接口生成响应数据。但按同样的封装流程把响应原路返回,浏览器收到响应之后,事情还没完。如果是HTML,就开始解析DOM,加载CSS,执行JS。如果是接口数据就交给前端框架去渲染。所以页面慢不一定是后端慢,也可能是慢在DNS网络或者前端渲染。
最后一句话收尾。从输入URL到页面展示,本质就是一次应用层发起协议栈层层封装,网络转发,服务器解封装。再原路返回并完成渲染的过程。
不同岗位面试官关注点不同。但你能把这条主线讲清楚,这道题基本就是高分答案。
我是后端新人花卷,持续学习中,如果你觉得文章有帮助,请帮忙转发给更多的好友,感谢大家的阅读。