经典面试题 从浏览器输入一个URL之后,都发生了哪些事情?

首先要明确,这是一个非常复杂的问题,从不同的角度(前端,后端,网络通信...)来看待这个问题,得到的结果也是不一样的.本文主要具体从网络传输的基本原理这个角度来分析这个事情,其他各种角度简单了解即可.

目录

一.从网络传输角度来看(主要)

<1>客户端发送之前的准备工作

<2>数据传输路途中间的转发过程

<3>数据到达接收方

二.站在后端工程师的角度(简单了解)

三.前端的角度来看(简单了解)

四.总结


一.从网络传输角度来看(主要)

这里我们分为三个步骤

<1>客户端发送之前的准备工作

        1.当我们输入一个URL,首先浏览器会根据这里的域名,查询对应的IP地址.    这里查询IP地址具体过程   (1)先查浏览器自身的缓存.   (2)再查hosts文件.  (3)查DNS服务器. 

         2.浏览器会构造出一个HTTP请求.   这个HTTP请求中就包含了刚才的这个域名信息(用户输入的URL信息).

         3.浏览器调用操作系统的 socket api,把构造出的HTTP数据交给 TCP 来进一步处理.      这里TCP协议就需要构造一个TCP数据报.   

此时 : (1)在发送TCP数据报之前,要先进行"三次握手",与对端服务器建立连接. 三次握手涉及到的 SYN/ACK 也是同样要经过网络层,数据链路层,物理层依次封装,到达对端服务器之后再依次分用.

(2)建立连接之后再进行数据传输. 发送方就会把这个TCP数据进一步的交给IP协议再一次封装.

        4.网络层把TCP数据报封装成一个IP数据报(也可能是多个IP数据报,IP协议会自动进行分包的过程),进一步的进行封装,然后把数据交给数据链路层.

        5.数据链路层会把这个数据再封装成以 太网数据帧.再把这个数据交给物理层传输.  在构造帧头的时候就需要根据IP映射到 mac地址,这个构造的过程就依赖了 ARP协议.

        6.物理层把数据转换成电信号进行传输.

这里客户端才将数据封装完成,通过网线/光纤/无线网络等 进行传输.

<2>数据传输路途中间的转发过程

        7.电信号沿着网线,到达了下一个设备(路由器),路由器就会针对收到的数据进行分用.物理层把数据交给数据链路层,数据链路层交给网络层,路由器拿到了网络层中的IP数据报,取出其中的目的ip,查询路由表,找到下一个传输的目标和下一个要传输目标的mac地址,再重新进行封装(把数据交给数据链路层,数据链路层再交给物理层).

这里我们就用一个路由器来举例,实际中会涉及到很多设备.

<3>数据到达接收方

        8.数据到达接收方,开始进行"分用". 

物理层把光电信号转化成以 太网数据帧交给数据链路层,数据链路层解析出IP数据报,交给网络层 .(这些过程都涉及到crc校验,如果发现校验和不对,说明数据是错的,就直接丢弃了).

 IP协议再进行解析,解析出一个TCP数据报(IP报头里包含着协议类型). 这个解析的过程还可能涉及到组包的过程,由IP报头中的三个报头(16位标识,3位标志,13位分片偏移)辅助进行实现.

再根据TCP数据报中的端口号找到对应的进程,把数据放入到对应socket的接收缓冲区里.

        9.应用程序调用对应的socket api,从TCP接收缓冲区中读取数据. 应用程序把这个数据按照HTTP协议解析,获取到其中的URL. 根据URL中指定的路径,知道了是要获取到/这个根路径.

        10.服务器里面会对/这个路径进行配置,映射到一个具体的index.html(也可能是其他名字)这样的一个html文件.服务器就会读取的这个文件,把这个文件的内容构造成一个HTTP响应数据(这个响应数据要发送回客户端),然后再调用socket api进行发送.

        11.服务器发送的响应数据也会进行层层封装(与上面客户端数据封装过程类似),最终变成物理层上传输的光电信号.

        12.这个光电信号到达下一个路由器,重复上面路由器的分用过程,解析到网路层,取出其中的目的IP,查路由表,找到下一个要经过的设备在哪.再重新对数据进行封装.

        13.数据到达了用户的主机.用户主机重复上面分用的过程,依次把数据读取出来,最终交给应用程序.

        14.浏览器得到了HTTP响应报文,解析这个报文,获取到其中的html内容,根据html进行渲染......由于html中可能会包含一些<img>,<link>,<script>这些标签,这些标签可能会出发二次请求,浏览器会根据这些标签中的信息,再构造出对应的HTTP请求发给服务器,得到对应的响应(这里要完整的重复上面的所有过程).

以上是一些网络传输的基本原理,包含了协议之间如何相互配合,以及封装分用,路由转发的过程.

二.站在后端工程师的角度(简单了解)

站在后端工程师的角度,核心就不在网络传输网络通信上了,而是一些应用层所做的一些事情.

用户输入URL,浏览器会发送出一个HTTP请求,HTTP请求会先去CDN服务器(运营商部署在各个地方的缓存服务器)中查找对应的响应,找到就返回响应,找不到的话就去对应浏览器机房的服务器获取响应(一般会先访问反向代理服务器(也是缓存服务器,为了降低后续业务服务器的压力),获取不到就继续访问后续的应用服务器,应用服务器会进一步访问分词服务器,搜索服务器,物料服务器,用户服务器,广告服务器等待这些服务器来获取相应(这是个十分复杂的过程)).

站在后端的角度就简单了解这些.

三.前端的角度来看(简单了解)

从前端的角度来看,主要关注的就是浏览器这里的工作过程.尤其是请求如何构造,响应如何解析.当收到一个响应的HTML之后,浏览器是如何解析这个HTML,如何构造DOM树,以及浏览器的引擎如何工作,如何执行这里的一些js内容....

四.总结

        这个问题,从不同的角度看待得到的结果就不同.本文主要是从网络传输的角度来分析,大体上阐述了网络传输的步骤.

        其中包含了一些具体问题的解决并没有详细介绍,例如:查询DNS服务器的步骤,TCP协议的具体原理,以及crc如何校验等等,这些问题我之后会具体在博客上进行总结.

        欢迎大家及时纠错.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值