太多了,。。我这里只限打个结构。有空再写。

这题其实以往我看过很多博客,但是最近又有了新的领悟:
原因是我开始重新学习了下OS和计算机网络的底层以及浏览器工作原理。

其实我可以先问下面试官,有没有什么具体的限制和场景,因为这个题的背后其实真的很复杂很复杂,情况很多。比如:我回答时间有限制吗?服务器和前端的架构层次结构是如何的?协议:http?https?url?ulis?等等

以https及web服务器常用架构(nginx,nodejs,mysql)及url情况下为例,一切按正常流程走:
可以引申出计算机网络、操作系统、编译原理、v8引擎的知识

回答时,可以先梳理一遍流程的名称。然后再详细展开讲。

补充

二层转发,工作在二层的设备(i.e交换机)只认识MAC地址,所以建立MAC地址和端口的映射关系,来决定往哪个端口转发。
三层路由,工作在三层的设备(i.e路由器)利用ip地址和port,根据路由表选择最佳路径来转发包。

二层转发:设备工作在链路层,帧在经过交换机设备时,检查帧的头部信息,拿到目标mac地址,进行本地转发和广播
三层路由:设备工作在ip层,报文经过有路由功能的设备时,设备分析报文中的头部信息,拿到ip地址,根据网段范围,进行本地转发或选择下一个网关
dns,网络请求的第一步是域名解析,所以工作在应用层…
cdn,内容分发网络,也是在应用层

URL解析

汉字等字符?utf-8,utf8mb4?
首先,浏览器做的第一步就是解析 URL 得到里面的参数,将域名和需要请求的资源分离开来,从而了解需要请求的是哪个服务器,请求的是服务器上什么资源等等。

URL URI URN 都是为了解决 怎么找到网络中的资源? 怎么标识资源?这两个问题,才抽象出来的概念,总的来说 URI 是 URL URN的超集

URL:RFC1739 定义, Uniform Resource Locator 表示资源的位置

URN:RFC2141 定义,Uniform Resource Name 为资源提供的持久的位置无关的标识方式。

URI:Uniform Resource Identifier 统一资源标识符。是 URL URN 的超集,用来区分资源

image.png

浏览器封装http请求报文


解释一下「封装」,这是一个贯穿整个计算机网络的概念。就是说发送端在层与层之间传输数据时,每经过一层必定会被打上一个该层所属的首部信息。反之,接收端在层与层之间传输数据时,每经过一层就会把该层对应的首部信息消去。

检查强缓存/协商缓存等

DNS 域名解析获取 IP 地址

查询规则与顺序等:递归迭代查询。
这里其实可以引申下ip与子网掩码,网管地址、主机地址,网关(即路由器),OSI7层等知识

建立tcp连接

三次握手,延伸出tcp协议的内容,比如:域名切片,全连接、半连接,队列等等,好好复习、梳理一下。

https证书验证流程

可以多讲讲CA认证,hash。然后connection:keep-alive,http的各个版本与特色。

浏览器发送请求

TCP 三次握手完成后,浏览器与目标服务器之间就建立了一个可靠的虚拟通道,于是浏览器就可以发送自己的 HTTP 请求了。
需要注意的是,HTTP 请求报文或者响应报文在 TCP 连接通道上进行传输的时候,由于这些报文比较大,为了更容易和准确可靠的传输,「TCP 会将 HTTP 报文按序号分割成若干报文段并加上 TCP 首部,分别进行传输。接收方在收到这些报文段后,按照序号以原来的顺序重组 HTTP 报文」

负责传输的IP协议

规划路径。网关(路由器),ip地址,网络地址、主机地址

ICMP协议:

https://blog.csdn.net/bbj12345678/article/details/105988848

补充:网关与网卡

网关和网卡不一样,具体区别如下:
1、含义上的区别
网关就是一个网络连接到另一个网络的“关口”。也就是网络关卡。
而网关有很多种,如:路由器、交换机、传输层网关是真正意义上的网关。
网卡是一块被设计用来允许计算机在计算机网络上进行通讯的计算机硬件,属于物理层。
2、主要功能上的区别
网关是一种充当转换重任的计算机系统或设备。使用在不同的通信协议、数据格式或语言,甚至体系结构完全不同的两种系统之间,网关是一个翻译器。网关既可以用于广域网互联,也可以用于局域网互联。
网卡的主要功能是数据的封装与解封,发送时将上一层传递来的数据加上首部和尾部,成为以太网的帧;链路管理,主要是通过CSMA/CD协议来实现;数据编码与译码,是一种常用的的二元码线路编码方式之一,被物理层使用来编码一个同步位流的时钟和数据。

使用 ARP 协议凭借 MAC 地址通信

数据链路层。网络接口层

刚才说了 DNS 解析是将 域名映射为 IP 地址,而 ARP 协议是什么呢?ARP 协议是将 IP 地址映射为 MAC 地址。IP 地址和 MAC 地址是什么关系呢?这里就体现了计算机网络的分层的设计哲学。IP 地址是网络层的概念,而 MAC 地址是数据链路层的概念。假如有 N 个主机,通过一个交换机连接起来,那么这就是一个局域网,而局域网之间通过发送 MAC 帧进行通信,互相识别的都是 MAC 地址。而 N 个局域网通过路由器连接在一起就形成了一个互联网,这时候主要假如主机之间跨局域网,通过互联网来通信,就需要 IP 地址来发挥作用了。那 ARP 地址解析和咱们的这道题又有什么关系呢。是这样的,如果一台主机,新加入了一个局域网,那他会知道自己的 IP 地址和 MAC 地址,他也会知道自己网关路由器的 IP 地址,但是他不知道网关路由器的 MAC 地址。这就导致了比如咱们的主机发送 DNS 请求的时候,有可能会无法发送 MAC 帧给网关路由器,咱们的 DNS 请求根本就无法发出。这时候就需要 ARP 协议了。

ARP 解析的过程:

“ARP协议在TCP/IP模型中属于IP层(网络层),在OSI模型中属于链路层。

  1. 主机会先检查自己的 ARP 缓存中有没有相关信息,如果没有则准备发送 ARP 请求
  2. 主机发送一个 ARP 请求,里面有自己的 IP 地址和 MAC 地址和目标主机的 IP 地址。此主机会对局域网的所有主机发送一个广播 MAC 帧
  3. 每个主机收到 ARP 请求之后,将会比较自己的 IP 地址是不是和 ARP 请求报文中的 IP 地址一致,如果一致,则需要发送一个 ARP 回应报文
  4. 回应报文中会写入自己的 MAC 地址,这样主机收到 ARP 回应之后,就知道网关路由器的 MAC 地址,就可以发送 MAC 帧了

    CSMA/CD

    实际上CSMA/CD的工作流程与人际间通话非常相似,可以用以下7步来说明。
    第一步:载波监听,想发送信息包的节点要确保没有其他节点在使用共享介质,所以该节点首先要监听信道上的动静(即先听后说)。
    第二步:如果信道在一定时段内寂静无声(称为帧间缝隙IFG),则该节点就开始传输(无声则讲)。
    第三步:如果信道一直很忙碌,就一直监视信道,直到出现最小的IFG时段时,该节点才开始发送它的数据(有空就说)。
    第四步:冲突检测,如果两个节点或更多的节点都在监听和等待发送,然后在信道空时同时决定立即(几乎同时)开始发送数据,此时就发生碰撞。这一事件会导致冲突,并使双方信息包都受到损坏。以太网在传输过程中不断地监听信道,以检测碰撞冲突(边听边说)。
    第五步:如果一个节点在传输期间检测出碰撞冲突,则立即停止该次传输,并向信道发出一个“拥挤”信号,以确保其他所有节点也发现该冲突,从而摒弃可能一直在接收的受损的信息包(冲突停止,即一次只能一人讲)。
    第六步:多路存取,在等待一段时间(称为后退)后,想发送的节点试图进行新的发送。
    这时采用一种叫二进制指数退避策略(Binary Exponential Back off Policy)的算法来决定不同的节点在试图再次发送数据前要等待一段时间(随机延迟)。
    第七步:返回到第一步。
    实际上,冲突是以太网电缆传输距离限制的一个因素。例如,如果两个连接到同一总线的节点间距离超过2500米,数据传播将发生延迟,这种延迟将阻止CSMA/CD的冲突检测例程正确进行 。

    服务器处理并响应请求

    映射关系

    nginx

nodejs

mysql

状态码

协商缓存等

断开TCP连接

四次挥手

浏览器开始渲染页面

js加载时间线等

还有difer与async等

渲染流程与机制

编译原理

v8引擎

此处跳转到我v8引擎的笔记吧