什么是网络分层模型
互联网通信并不是只靠一个机制运行。
查看网站时,在你的终端中,会组合使用通过 Wi-Fi 或有线 LAN 承载通信的处理、使用 IP 地址送达目的地的处理、用 TCP 或 UDP 管理数据交付方式的处理,以及通过 HTTP 或 DNS 让应用之间交换信息的处理。
如果把这些全部放在同一层级理解,就很难看清网络通信的整体图景。
因此,重要的是用分层的视角来思考通信。
网络分层模型,是把通信机制按角色分开整理的思考方式。 把每一层看作负责不同角色,可以更容易理解复杂的通信。
本文将以理解互联网通信时常用的 TCP/IP 模型 为中心,查看网络的分层结构。
TCP/IP 模型的四个层
TCP/IP 模型中,通信大致分为下面四个层来思考。
| TCP/IP 模型的层 | 主要作用 | 代表性要素 |
|---|---|---|
| 网络接口层 | 处理物理通信以及同一网络内的通信 | Ethernet(有线 LAN)、Wi-Fi、光纤 |
| 互联网层 | 使用 IP 地址送达目的地 | IP |
| 传输层 | 管理数据的交付方式 | TCP、UDP |
| 应用层 | 决定应用之间的通信规则 | HTTP、HTTPS、DNS |
用这四个层来看,就更容易整理网络通信中的角色。
重要的不是把所有细节死记硬背。 首先需要理解各层负责的角色有什么不同。
另外,本文的目的在于理解 TCP/IP 模型的整体图景。 IP 地址、路由、TCP、UDP、HTTP、HTTPS、DNS 等详细机制,会在其他文章中分别处理。
这里不会细致说明每项技术,而是整理“它与 TCP/IP 模型的哪一层有关”“它在整体通信中有什么角色”。
为什么按层思考
按层思考,是为了把通信的角色分开理解。
例如,即使无法访问网站,原因也不一定只有一个。
可能是 Wi-Fi 或有线 LAN 的连接有问题。 可能是使用 IP 地址到达通信目标时有问题。 可能是 TCP 连接没有顺利建立。 可能是 DNS 无法把域名转换成 IP 地址。 也可能只是 HTTP 响应返回了错误。
同样是“无法通信”的状态,出问题的层也可能不同。
使用 TCP/IP 模型,可以像下面这样分开思考通信问题。
| 查看位置 | 要思考的问题 |
|---|---|
| 网络接口层 | 首先是否能在物理或无线层面通信 |
| 互联网层 | 是否能使用 IP 地址到达目的地 |
| 传输层 | TCP 或 UDP 通信是否成立 |
| 应用层 | HTTP、DNS 等应用侧处理是否正确运行 |
这样,通过按层思考,可以把网络机制按部分整理。
网络接口层
TCP/IP 模型最下面的是网络接口层。
这一层是实际承载通信的部分。 有线 LAN、Wi-Fi、光纤、移动通信等都与它有关。
通信数据并不是在空无一物的空间中原样移动。 实际上,它会作为电信号、电波、光信号等被承载。
例如,有线 LAN 使用线缆通信。 Wi-Fi 使用电波通信。 使用光纤的通信会使用光信号。
这一层的角色不是理解 HTTP 的内容或 DNS 查询内容。 它的角色首先是让信号处于可以实际传输的状态。
如果网络接口层不能工作,上层的 IP 通信、TCP 通信、HTTP 通信也无法成立。
另外,根据资料不同,这一层也可能被称为“网络访问层”或“链路层”。 名称有所不同,但在这里理解为“实际承载通信的层”即可。
互联网层
即使网络接口层让信号可以传输,仅凭这一点也无法到达互联网上的目的地。
接下来需要的是判断“要送到哪里”的机制。 承担这个角色的是互联网层。
互联网层的核心是 IP。
IP 使用 IP 地址处理通信的发送源和目的地。 当你的终端访问网站时,通信会朝对方的 IP 地址发送。
互联网上有许多路由器和网络设备。 通信数据会经由这些设备送达目标目的地。
在这一层,“要送到哪个对象”很重要。
这里重要的是,IP 并不理解通信内容本身。 IP 不是判断 HTTP 内容或网页内容,而是处理为了送达目的地所需的信息。
也就是说,互联网层负责“让通信朝哪里前进”。
传输层
即使互联网层提供了送达目的地的机制,数据要如何送达仍是另一个问题。
承担这个角色的是传输层。
传输层使用 TCP 和 UDP。
TCP 是一边管理与通信对象之间的连接,一边收发数据的机制。 它与数据是否按顺序到达、途中丢失的数据如何处理等有关。
UDP 是比 TCP 更简单的通信方式。 因为它不像 TCP 那样进行严格的连接管理和到达确认,所以有时用于重视实时性的通信。
这一层涉及“如何交付数据”“是否管理连接”“交给哪个应用”等问题。
例如,在同一台终端中,浏览器、聊天应用、游戏、邮件软件等多个应用可能同时通信。 传输层会使用端口号等,处理把哪条通信交给哪个应用。
也就是说,传输层负责“以什么方式交付朝向目的地的通信”。
应用层
TCP/IP 模型最上面的是应用层。
这一层处理应用之间按什么规则交换信息。
查看网站时,会使用 HTTP 或 HTTPS。 HTTP 是浏览器和 Web 服务器交换信息的规则。
例如,浏览器向 Web 服务器请求“我想取得这个页面”,服务器返回 HTML、图片、CSS、JavaScript 等。
DNS 也与应用层有关。 DNS 是把域名转换成 IP 地址的机制。
当你在浏览器中输入域名时,终端会查询与这个名称对应的 IP 地址。 然后使用该结果连接实际的通信目标。
这一层会以应用能够理解的形式交换信息。 如果是 HTTP,就以请求和响应的形式通信。 如果是 DNS,就查询与域名对应的 IP 地址。
也就是说,应用层负责“应用之间交换具有什么含义的信息”。
用 TCP/IP 模型看 Web 访问
访问网站时,TCP/IP 模型的各层也会协同工作。
不过,实际通信并不是“从下层按顺序开始”。 当你访问网站时,处理首先从浏览器等应用开始。
在发送侧,通信会从上层传递到下层。
首先,在应用层,浏览器会生成 HTTP 或 HTTPS 请求。 必要时,也会通过 DNS 查询与域名对应的 IP 地址。
接着,在传输层,TCP 或 UDP 会管理数据的交付方式。 许多 Web 通信使用 TCP,但也有像 HTTP/3 这样使用 UDP 的通信。
接着,在互联网层,会使用 IP 地址处理朝通信目标前进所需的信息。 在这里,通信数据会朝目的 IP 地址发送。
最后,在网络接口层,通信会通过 Wi-Fi、有线 LAN、光纤、移动通信等,作为实际信号被承载。
这样,在发送侧,上层生成的数据会在向下层传递的过程中附加通信所需的信息。 这个处理称为封装。
到达服务器侧的通信,这次会从下层传递到上层。
网络接口层接收信号,互联网层处理目的地信息,传输层处理通信的交付方式,最终交给 Web 服务器的应用。
也就是说,Web 访问会形成下面这样的流程。
| 场景 | 通信流程 | 主要内容 |
|---|---|---|
| 发送侧 | 应用层 → 传输层 → 互联网层 → 网络接口层 | 浏览器的请求被转换成可以作为通信发送的形式 |
| 网络上 | 经由各个网络设备朝目的地前进 | 基于 IP 地址承载通信 |
| 接收侧 | 网络接口层 → 互联网层 → 传输层 → 应用层 | 到达的通信被传递到 Web 服务器应用 |
这样看,TCP/IP 模型并不是单纯说“从下往上按顺序通信”。 通过发送侧从上到下、接收侧从下到上进行处理,应用之间的通信才会成立。
对网站的访问,最终是浏览器和 Web 服务器这两个应用之间的交互。 为了让这种交互成立,传输层、互联网层、网络接口层在下面支撑着它。
与 OSI 参考模型的区别
作为网络分层模型,OSI 参考模型也经常被使用。
OSI 参考模型是把通信分为七个层的思考方式。 另一方面,TCP/IP 模型是为了理解互联网通信而更实用地使用的四层模型。
在初学阶段,没有必要细致背诵 OSI 参考模型的七层。 先用更容易连接到实际互联网通信的 TCP/IP 模型来理解,会更容易。
OSI 参考模型也是理解网络时的重要思考方式。 如果想进一步学习,也可以查阅 OSI 参考模型。
本文以更容易连接实际互联网通信的 TCP/IP 模型为中心,整理通信的基本结构。
思考匿名性时的重要视角
TCP/IP 模型在思考匿名性时也很重要。
因为通信中每一层可见的信息不同。
例如,IP 地址与互联网层有关。 TCP 或 UDP 的端口号与传输层有关。 DNS、HTTP、、User-Agent 等与应用层有关。
这些都与通信有关,但并不都在同一层。
即使隐藏 IP 地址,也可能通过 Cookie 判断为同一使用者。 即使 HTTPS 加密了通信内容,也不代表与连接目标有关的信息全部消失。 如果 DNS 处理不当,也可能看到试图访问哪个域名。
也就是说,思考匿名性时,需要分开考虑“想隐藏什么”和“哪一层的信息正在可见”。
理解 TCP/IP 模型后,就更容易整理 IP 地址、DNS、HTTPS、Cookie、User-Agent 等分别与通信的哪一部分有关。
总结
网络分层模型,是为了按角色分开理解通信的思考方式。
本文以容易理解互联网通信的 TCP/IP 模型为中心进行了说明。
TCP/IP 模型把通信分成下面四个层来思考。
| 层 | 作用 |
|---|---|
| 网络接口层 | 通过有线 LAN、Wi-Fi、光纤等承载通信 |
| 互联网层 | 使用 IP 地址送达目的地 |
| 传输层 | 使用 TCP 或 UDP 管理数据交付方式 |
| 应用层 | 用 HTTP 或 DNS 等处理应用之间的通信规则 |
通信通过这些层协同工作而成立。
只有网络接口层,无法判断目的地。 只有互联网层,无法管理数据交付方式。 只有传输层,无法处理 Web 页面取得或 DNS 名称解析。 只有应用层,无法在物理层面承载通信。
每一层承担不同角色,互联网通信才得以成立。
理解 TCP/IP 模型后,更容易整理网络通信的整体图景。 在思考匿名性时,也更容易判断哪一层的信息可见、什么被隐藏以及什么没有被隐藏。
相关工具
DNSLeakTest
与本文相关的外部资源。只有在符合你的处境和威胁模型时再打开。
列在这里的原因: 它可能有助于理解本文主题,但位于 Anonymity Sense 之外,使用前应先自行确认。