从输入URL到页面展示,这中间究竟发生了什么(网络通信角度分析)?

55 阅读5分钟

“在浏览器里,从输入 URL 到页面展示,这中间发生了什么? ”这是一道经典的面试题,涉及到了网络、操作系统、Web 等一系列的知识。下面从网络通信角度分析整个过程:

一、DNS

构成互联网 Internet 的最基本的网络协议就是互联网协议 Internet Protocol,简称 IP 协议。

DNS作用是将域名转化为ip。

二、CDN

CDN 是内容分发网络 Content Delivery Network 的缩写。我们能够用手机或者电脑上网,是因为运营服务商为我们提供了互联网接入服务,将我们的手机和电脑连接到互联网上。App 请求的数据最先到达的是运营服务商的机房,然后运营商通过自己建设的骨干网络和交换节点,将我们请求数据的目的地址发往互联网的任何地方。

为了提高用户请求访问的速度,也为了降低数据中心的负载压力,淘宝会在全国各地各个主要的运营服务商的接入机房中部署一些缓存服务器,缓存那些静态的图片、资源文件等,这些缓存服务器构成了淘宝的 CDN。

三、HTTP

HTTP 是一个应用层协议,当我们进行网络通信编程的时候,通常需要关注两方面的内容,一方面是应用层的通信协议,主要是我们通信的数据如何编码,既能使网络传输过去的数据携带必要的信息,又使通信的两方都能正确识别这些数据,即通信双方应用程序需要约定一个数据编码协议。另一方面就是网络底层通信协议,即如何为网络上需要通信的两个节点建立连接完成数据传输,目前互联网应用中最主要的就是 TCP 协议。

在 TCP 传输层协议层面,就是保证建立通信两方的稳定通信连接,将一方的数据以 bit 流的方式源源不断地发送到另一方,至于这些数据代表什么意思,哪里是两次请求的分界点,TCP 协议统统不管,需要应用层面自己解决。如果我们基于 TCP 协议自己开发应用程序,就必须解决这些问题。而互联网应用需要在全球范围为用户提供服务,将全球的应用和全球的用户联系在一起,需要一个统一的应用层协议,这个协议就是 HTTP 协议。

四、TCP

TCP 是一个传输层协议。

4.1 分层模型

传输层协议 TCP 和网络层协议 IP 共同构成 TCP/IP 协议栈,成为互联网应用开发最主要的通信协议。OSI 开放系统互联模型将网络协议定义了 7 层,TCP/IP 协议栈将 OSI 顶部三层协议应用层、表示层、会话层合并为一个应用层,HTTP 协议就是 TCP/IP 协议栈中的应用层协议。

数据链路层就是将数据进行封装后交给物理层进行传输,主要就是将数据封装成数据帧,以帧为单位通过物理层进行通信,有了帧,就可以在帧上进行数据校验,进行流量控制。数据链路层会定义帧的大小,这个大小也被称为最大传输单元。

物理层负责数据的物理传输,计算机输入输出的只能是 0 1 这样的二进制数据,但是在真正的通信线路里有光纤、电缆、无线各种设备。光信号和电信号,以及无线电磁信号在物理上是完全不同的,如何让这些不同的设备能够理解、处理相同的二进制数据,这就是物理层要解决的问题。

4.2 三次握手

IP 协议不是一个可靠的通信协议,并不会确保数据一定送达。要保证通信的稳定可靠,需要传输层协议 TCP。TCP 协议在传输正式数据前,会先建立连接,这就是著名的 TCP 三次握手。

App 和服务器之间发送三次报文才会建立一个 TCP 连接,报文中的 SYN 表示请求建立连接,ACK 表示确认。App 先发送 SYN=1,Seq=X 的报文,表示请求建立连接,X 是一个随机数;服务器收到这个报文后,应答 SYN=1,ACK=X+1,Seq=Y 的报文,表示同意建立连接;App 收到这个报文后,检查 ACK 的值为自己发送的 Seq 值 +1,确认建立连接,并发送 ACK=Y+1 的报文给服务器;服务器收到这个报文后检查 ACK 值为自己发送的 Seq 值 +1,确认建立连接。

4.3 数据模型

以 POST 方法提交一个搜索请求给服务器,那么最终在数据链路层构建出来的数据帧大概是这个样子:

五、LB(负载均衡)

请求到达数据中心的时候,首先到达的是搜索服务器集群的负载均衡服务器。然后,由负载均衡服务器将请求分发到对应服务器集群中的某台服务器上。

负载均衡服务器的实现手段有很多种,淘宝这样规模的应用,通常使用 Linux 内核支持的链路层负载均衡。

在负载均衡服务器的 Linux 操作系统内核拿到数据包后,直接修改数据帧中的 mac 地址,将其修改为搜索服务器集群中某个服务器的 mac 地址,然后将数据重新发送回服务器集群所在的局域网,这个数据帧就会被某个真实的搜索服务器接收到。

极客时间《后端技术面试38讲》学习笔记 Day07