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

前言

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

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

(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会被执行

七层协议图:

全部评论

相关推荐

程序员牛肉:主要是因为小厂的资金本来就很吃紧,所以更喜欢有实习经历的同学。来了就能上手。 而大厂因为钱多,实习生一天三四百的就不算事。所以愿意培养你,在面试的时候也就不在乎你有没有实习(除非是同级别大厂的实习。) 按照你的简历来看,同质化太严重了。项目也很烂大街。 要么换项目,要么考研。 你现在选择工作的话,前景不是很好了。
点赞 评论 收藏
分享
xxxxOxo:该催就催,想要你的不会因为催就挂,催了就挂的是因为本来就要挂你
点赞 评论 收藏
分享
评论
点赞
2
分享

创作者周榜

更多
牛客网
牛客企业服务