之前读过 Github 上面的关于从浏览器输入 google.com 到浏览器加载出 google 首页, 整个技术细节流程的介绍. 最近又在出差的路上读完了 网络是怎样连接的 这本书, 对输入网址或者点击一个链接时, 发生的整个流程终于比较清晰了. 记录 于此, 供有类似好奇心的朋友参考. 另外 Youtube 上 Vox 有一个 视频 讲解网络 是如何运行的,也非常清晰,可以一看。

抽象的说, 整个网络是由两部分构成:

  1. 浏览器和 Web 服务器这类网络应用程序: 负责发起请求和响应请求
  2. 数据搬运的机制: 负责将两头的数据传输准确无误地传递到指定地方

具体来说, 可以分成下面六部分来看:

浏览器

浏览器主要做两件事:

  1. 生成请求消息(解析 URL, 查询 IP 地址)
  2. 委托操作系统中的网络控制软件(协议栈)发送消息

协议栈/网卡

协议栈主要负责:

  1. 将请求消息打包, 并加上相应的控制信息(socket 机制)
  2. 将打好包的信息发送给网卡

网卡主要负责:

  1. 将收到的消息包(Packets)转换成电信号
  2. 通过网线将这些电信号发送出去(信息终于离开电脑/或手机本机了)

交换机/路由器

信号从计算机中流出后, 在网线中经过集线器/交换机/路由器等设备继续前进.

交换机和路由器, 主要是负责包转发, 将数据包按各自协议进行转发. 交换机是苦 于以太网规格工作, 而路由器是基于 IP 工作.

接入网/运营商

数据从用来接入互联网的路由器出来, 就进入了互联网内部. 路由器对接的运营商 网络, 接入方式可以是电话线, ADSL, 有线电视, 光纤, 专线等, 这些接入线路统 称为 接入网.

防火墙/缓存服务器

数据通过骨干网后, 最终到达 Web 服务器所在的局域网中. 第一个会遇到的就是 防火墙, 它会对进入的包进行检查, 看看有没有危险的包混在里面. 接着会遇到缓 存服务器, 如果要请求的内容在缓存中已经存在, 可以不用劳烦缓存服务器, 直接 从缓存服务器读取数据返回.

Web 服务器

当网络包到达 Web 服务器后, 数据包被解包还原为原始请求渻, 然后交给 Web 服 务器程序.

接着, Web 服务器分析请求消息含义, 并按其中指示将数据装入响应消息中, 然后 回复给客户端.

当响应消息到达客户端后, 浏览器会从中读取网页的数据, 并在屏幕上显示出来.

至此, 我们的一次输入网址并看到页面的内容整个过程就全部完成了.