TCP/IP 基础
互联网通信并不是只靠一个巨大的机制运行。
查看网站、发送邮件、应用连接服务器时,都是多个通信规则组合在一起工作。
作为基础的思考方式就是 TCP/IP。
TCP/IP 这个名称中包含 TCP 和 IP,但它实际上并不是只指 TCP 和 IP。 它常被用来指互联网上使用的一组通信协议,也就是通信基本机制的整体。
本文不会把 TCP/IP 当作细节规格来说明,而是把它作为理解互联网通信整体图景的入口来整理。
什么是 TCP/IP
TCP/IP 是用于在互联网上通信的基本协议群。
协议是通信中的约定。 需要有规则来决定如何指定目的地、以什么单位发送数据、没送达时如何处理、应用之间用什么形式交换信息等。
TCP/IP 会按角色分开思考通信。
| 角色 | 主要负责 | 说明 |
|---|---|---|
| 送达目的地 | IP | 使用 IP 地址,让通信朝目的地前进 |
| 管理交付方式 | TCP、UDP | 决定如何发送数据,如何处理可靠性和轻量性 |
| 解析名称 | DNS | 查询与域名对应的 IP 地址 |
| 应用之间交换信息 | HTTP 等 | 交换 Web 页面、API 等应用数据 |
| 保护通信 | TLS | 加密 HTTP 等通信内容,使改造和冒充更容易被防止或发现 |
这样,互联网通信以 IP、TCP、UDP 为基础,并与 DNS、HTTP、TLS 等周边机制组合而成立。
IP 的作用是让通信朝目的地前进
IP 是 Internet Protocol 的缩写。
IP 的核心作用是使用 IP 地址让通信朝目的地前进。 在互联网上,会使用 IP 地址识别终端和服务器。
例如,浏览器与 Web 服务器通信时,最终会朝目的 IP 地址发送数据包。 中途的路由器会查看目的 IP 地址等信息,判断下一步把这个数据包送到哪里。
不过,IP 是用于“朝目的地前进”的机制,仅凭它并不能保证整体通信的可靠性。
仅靠 IP,无法充分处理下面这些问题。
- 数据是否送达
- 数据是否按正确顺序到达
- 是否重新发送丢失的数据
- 应该交给一台终端内的哪个应用
这些会涉及 TCP、UDP、端口号以及上层协议。
TCP 重视可靠性
TCP 是 Transmission Control Protocol 的缩写。
TCP 是为了更容易准确处理数据的机制。 它会建立与通信对象的连接,确认发送的数据是否送达,如果有丢失数据则重新发送,并把顺序错乱的数据整理成正确顺序。
因此,TCP 适合用于缺失或顺序错乱会造成问题的通信。
| 用途 | TCP 适合的理由 |
|---|---|
| HTTP/1.1、HTTP/2 | 需要正确接收 Web 页面数据 |
| 登录处理 | 认证所需信息缺失就无法处理 |
| 文件收发 | 一部分缺失可能导致文件损坏 |
| 邮件发送 | 需要正确送达消息内容 |
不过,TCP 不是让任何通信都变快的机制。 因为会进行到达确认和重传等处理,视通信状况而定,延迟也可能增加。
TCP 在比低延迟更重视可靠性的场景中很重要。
UDP 重视轻量和灵活性
UDP 是 User Datagram Protocol 的缩写。
UDP 不像 TCP 那样由协议本身进行连接建立、到达确认、顺序控制和重传。 相应地,它的机制更轻,也更容易由应用侧设计所需的控制。
UDP 用于重视实时性或灵活控制的通信。
| 用途 | 使用 UDP 的理由 |
|---|---|
| DNS | 容易快速处理短查询和响应 |
| 视频通话 | 有时比起事后准确送达旧音频或画面,更希望快速送达当前信息 |
| 在线游戏 | 有时希望以低延迟持续更新当前状态 |
| QUIC、HTTP/3 | 在 UDP 之上叠加新的可靠性和加密机制 |
UDP 并不意味着“因为不可靠所以是坏通信”。 UDP 本身减少保证,把所需控制交给应用或上层机制。
也有像 QUIC 这样以 UDP 为基础,同时自行实现可靠性和加密的机制。
端口号区分应用
IP 地址表示通信对象在网络上的位置。 但是,在一台终端或服务器内部,多个应用和服务会同时通信。
因此,仅靠 IP 地址,无法知道该把通信交给哪个应用。
这时使用的是端口号。
| 信息 | 作用 | 例 |
|---|---|---|
| IP 地址 | 表示朝哪个终端或服务器前进 | Web 服务器的 IP 地址 |
| 端口号 | 表示交给该终端内的哪个服务 | HTTPS 是 443 号,DNS 是 53 号 |
| 通信协议 | 表示 TCP 还是 UDP 等 | TCP 443 号,UDP 53 号 |
例如,同一台服务器上运行 Web、DNS、邮件等服务时,可以用不同端口号区分它们。
TCP 和 UDP 即使使用相同编号,也会被当作不同通信处理。 也就是说,TCP 443 号和 UDP 443 号虽然都使用“443”这个编号,但不是同一种通信。
DNS、HTTP、TLS 也运行在 TCP/IP 之上
查看网站时,并不是只靠 IP、TCP、UDP 就结束。
人通常使用域名而不是 IP 地址指定网站。 因此,首先会用 DNS 查询与域名对应的 IP 地址。
知道 IP 地址后,浏览器会与连接目标通信。 取得 Web 页面会使用 HTTP。 如果是 HTTPS,HTTP 通信会受到 TLS 保护。
| 机制 | 作用 |
|---|---|
| DNS | 从域名查询 IP 地址 |
| IP | 朝目的 IP 地址承载数据包 |
| TCP、UDP | 处理数据的交付方式 |
| TLS | 加密通信内容,进行连接目标确认和改造检测 |
| HTTP | 交换 Web 页面和 API 的数据 |
这里重要的是,这些并不是互相竞争的机制,而是分担不同角色。
例如 HTTPS 是用 TLS 保护 HTTP 的通信。 而在很多情况下,它的下层会使用 TCP、UDP、IP。
打开 Web 页面时的流程
从 TCP/IP 的视角简单整理打开 Web 页面的流程,可以得到下面这样的顺序。
| 阶段 | 发生的事 | 相关机制 |
|---|---|---|
| 1 | 解析 URL | 浏览器、HTTP/HTTPS |
| 2 | 从域名查询 IP 地址 | DNS |
| 3 | 让通信朝目的 IP 地址前进 | IP、路由 |
| 4 | 管理数据交付方式 | TCP、UDP、QUIC 等 |
| 5 | 如果是 HTTPS,则保护通信 | TLS |
| 6 | 请求页面或 API 的数据 | HTTP |
| 7 | 把接收到的数据显示在画面上 | 浏览器 |
实际通信中,还会涉及缓存、CDN、负载均衡器、既有连接的复用等。 因此,并不是每次都会从头开始按完全相同的顺序执行所有步骤。
不过,作为基础,把 DNS、IP、TCP/UDP、TLS、HTTP 分别具有不同角色来理解,会更容易整理。
TCP/IP 与匿名性的关系
TCP/IP 不是用于匿名化的机制。 它是让互联网通信成立的基础。
因此,为了让通信成立所需的信息,有时会对通信路径上或连接目标可见。
| 信息 | 可能可见的位置 | 匿名性上的注意点 |
|---|---|---|
| 源 IP 地址 | 连接目标服务器、通信路径上的设备等 | 成为连接源网络的线索 |
| 目的 IP 地址 | 通信路径上的设备等 | 成为推测通信朝哪个服务器前进的材料 |
| 端口号 | 路由器、防火墙、通信日志等 | 成为推测 HTTPS、DNS、 等通信类型的材料 |
| 通信协议 | 路由器、防火墙、通信日志等 | TCP 还是 UDP 会改变通信的处理方式 |
| 通信量和时刻 | 通信路径上的设备、连接目标服务器等 | 成为行为模式或与其他日志照合的材料 |
使用 HTTPS 或 TLS 后,通信内容更容易受到保护。 但是,IP 地址、通信量、通信时刻、与连接目标的关系等并不会全部消失。
思考匿名性时,需要分开考虑“通信内容”和“为让通信成立而存在的外侧信息”。
总结
TCP/IP 是让互联网通信成立的基本协议群。
IP 使用 IP 地址让通信朝目的地前进。 TCP 建立连接,并通过到达确认、重传、顺序控制重视可靠性。 UDP 减少保证,重视轻量和灵活性。
端口号用于在一台终端或服务器内部区分通信应交给哪个应用或服务。
DNS、HTTP、TLS 等也在 TCP/IP 之上分担角色运行。 打开 Web 页面时,会用 DNS 查询 IP 地址,用 IP 朝目的地前进,用 TCP 或 UDP 处理数据交付方式,在 HTTPS 中用 TLS 保护通信,并用 HTTP 交换页面内容。
TCP/IP 不是匿名化技术。 为了让通信成立,会处理 IP 地址、端口号、通信协议、通信量、时刻等信息。
理解这个基础后,学习 DNS、HTTP/HTTPS、TLS、VPN、、通信日志等时,就更容易整理“这是在处理哪一层的什么内容”。
相关工具
WhatIsMyIP
与本文相关的外部资源。只有在符合你的处境和威胁模型时再打开。
列在这里的原因: 它可能有助于理解本文主题,但位于 Anonymity Sense 之外,使用前应先自行确认。