字节面试题:请详细说一下从输入网址到获得页面的网络请求的过程

前言

这应该算是一个很经典的面试题了,前端工程师,后端工程师,包括网络工程师都有可能被问到。开放度很高,每个人都可以针对自己熟悉的部分,进行深入的讲解。

从输入网址到获得页面的网络请求的过程

(1)域名解析,其实就是根据用户输入的网址去寻找它对应的IP地址,比如输入www.baidu.com的网址就会经历以下过程

1.先从浏览器缓存里找IP,因为浏览器会缓存DNS记录一段时间

2.如没找到,再从Hosts文件查找是否有该域名和对应IP

3.如没找到,再从路由器缓存找

4.如没好到,再从DNS缓存查找

5.如果都没找到,浏览器域名服务器向根域名服务器(baidu.com)查找域名对应IP,还没找到就把请求转发到下一级,直到找到IP

这个是对应上面步骤的图:

 

 

(2)建立TCP连接 (这里使用五层协议更详细的描述如何建立这个TCP链接的)

先是客户端发起请求过程:

1. 使用应用层发起HTTP请求(这个可以根据你本身输入的url访问时,用的什么协议就发起对应协议去进行请求)

2. 然后是传输层的TCP协议为传输报文提供可靠的字节流服务,这里也就使用了TCP三次握手

3. 网络层是把TCP分割好的各种数据包传送给接收方。而要保证确实能传到接收方还需要接收方的MAC地址,也就是物理地址

4. 然后才是链路层将数据发送到数据链路层传输。至此请求报文已发出,客户端发送请求的阶段结束

然后是服务端接受请求处理阶段:

原路进行处理:链路层—>网络层—>传输层—>应用层然后响应客户端发送报文。

(3)根据SpringMVC后台业务返回数据,并把数据填充到HTML页面上,然后返回给浏览器

这里用到的TCP三次握手的图:

转存失败重新上传取消

 

 

这里是根据IP地址去映射对应的MAC地址:

转存失败重新上传取消

 

 

这个是服务端去接受客户端发送过来的请求并进行解析的过程图:

转存失败重新上传取消

 

 

(4)浏览器进行处理

服务器通过后台语言程序处理,找到数据返回给浏览器,HTML字符串被浏览器接受后被一句句读取解析,解析到link标签后重新发送请求获取css,解析到sript标签后发送请求获取js,并执行代码

(5)绘制网页

然后浏览器会进行渲染,浏览器根据HTML和CSS计算得到渲染树,绘制到屏幕上,js会被执行

七层协议图:

全部评论

相关推荐

totoroyyw:千年老妖😂
投递华为等公司10个岗位
点赞 评论 收藏
分享
微风不断:兄弟,你把四旋翼都做出来了那个挺难的吧
点赞 评论 收藏
分享
评论
点赞
2
分享
牛客网
牛客企业服务