什么是协议
互联网上的通信,并不是单纯把数据发送出去。 它依靠发送方和接收方按照同一套规则交换数据而成立。
这种通信规则称为 协议。
查看网站、发送邮件、应用与服务器通信时,背后都会使用各种协议。 HTTP、DNS、TCP、UDP、TLS 等,都是角色不同的协议。
对初学者来说,它们也许看起来像彼此分散的技术术语。 但实际上,它们都是“让通信成立的约定”。
本文不会深入展开协议的细节,而是整理它们在通信中分别承担什么角色。
协议是通信的约定
协议是为了通信而制定的规则。
在通信中,需要事先决定下面这些事情。
- 以什么格式发送数据
- 按什么顺序进行交换
- 如何指定对方
- 如何确认数据已经到达
- 是否加密通信内容
- 出现错误时如何处理
如果发送方和接收方按照不同规则运行,通信就无法成立。 即使发送了数据,接收方也无法理解它的含义。
也就是说,协议是让计算机之间正确通信的共同规则。
为什么通信需要约定
互联网上,世界各地的各种设备都在通信。
PC、智能手机、服务器、路由器、DNS 服务器、应用、浏览器等,许多设备和软件都会参与其中。 如果各自都用自己的方式通信,就无法正确发送或接收数据。
因此,会根据通信类型制定共同规则。 遵循这些规则后,不同厂商的设备之间、不同 OS 之间,也能访问同一个网站。
正因为有协议,互联网上多种多样的设备才能在同一套机制中通信。
Web 中使用的代表性协议
访问网站时,会涉及多个协议和机制。
代表性的有下面这些。
| 协议・机制 | 主要作用 |
|---|---|
| DNS | 查询与域名对应的 IP 地址 |
| HTTP | 交换网页数据 |
| HTTPS | 用 TLS 保护 HTTP 通信 |
| TCP | 准确传送数据 |
| UDP | 重视速度和实时性来发送数据 |
| TLS | 加密通信内容 |
它们并不承担同一个角色。 它们在通信中负责的范围各不相同。
DNS 的作用
DNS 是用于查询与域名对应的 IP 地址的机制。
访问网站时,你通常不会直接输入 IP 地址。 例如,你会使用 example.com 这样的域名。
但是,计算机要实际把数据发送到通信目标,就需要 IP 地址。 因此会使用 DNS 查询与域名对应的 IP 地址。
也就是说,DNS 是查询你想通信的对象的 IP 地址的机制。
传统 DNS 查询有时会在未加密的情况下发送。 在这种情况下,查询了哪个域名,可能会在网络上被看到。
HTTP 和 HTTPS 的作用
HTTP 是用于交换网页数据的协议。
浏览器向 Web 服务器请求“请显示这个页面”,服务器返回 HTML、图片、CSS、JavaScript 等数据时,会使用 HTTP。
HTTPS 是用 TLS 保护 HTTP 通信的机制。 通过用 TLS 加密 HTTP 交换的内容,通信路径上的其他方就更难直接读取内容。
只有 HTTP 时,通信内容不会被加密。 另一方面,使用 HTTPS 时,通信内容会被加密,因此中途网络更难原样读取内容。
不过,即使使用 HTTPS,与通信有关的所有信息也并不会都被隐藏。 通信目标的 IP 地址、通信量、连接时机等,仍可能以其他形式可见。
TCP 和 UDP 的作用
TCP 和 UDP 是与数据传送方式有关的协议。
TCP 重视准确传送数据。 它具有在数据中途丢失时重新发送、整理顺序等机制。
浏览网站、邮件、文件传输等重视准确性的通信中,经常使用 TCP。 另外,现在也有 HTTP/3 这样利用 UDP 的 Web 通信机制。
另一方面,UDP 重视速度和轻量。 因为它不像 TCP 那样细致确认是否到达,所以具有更容易降低通信延迟的特点。
在语音通话、视频通话、在线游戏、DNS 等重视低延迟的通信中,有时会使用 UDP。
TCP 和 UDP 并不是谁更高级。 重视准确性的通信会使用 TCP,重视速度和实时性的通信会使用 UDP。
TLS 的作用
TLS 是用于加密通信内容的协议。
通过 HTTPS 访问网站时,实际负责保护通信内容的是 TLS。 TLS 会加密浏览器和服务器之间交换的内容。
例如,登录信息、搜索内容、表单中输入的内容等,因为 HTTPS 而更难在通信路径上被读取。
TLS 不只与加密有关,也与确认通信对象、检测篡改有关。 不过,在本文中,先把它理解为“保护通信内容的机制”就足够了。
另外,TLS 是保护通信内容的机制,并不会完全隐藏通信存在本身。 正在与哪个服务器通信、什么时候通信、通信了多少数据等信息,仍可能以其他形式可见。
一次通信会涉及多个协议
访问网站的通信,并不是只使用一个协议。
例如,在浏览器中打开网站时,大致会经过下面这样的流程。
- 用 DNS 查询与域名对应的 IP 地址
- 使用 TCP 或 UDP 等,处理与数据传送方式有关的性质
- 用 TLS 保护通信内容
- 用 HTTP 交换网页数据
实际通信中还有更细的处理。 但是,重要的是多个协议会分担不同角色。
DNS 负责查询通信目标的 IP 地址。 TCP 和 UDP 负责决定数据的传送方式。 TLS 负责保护通信内容。 HTTP 负责交换网页信息。
像这样,即使是一次 Web 访问,也会组合多个协议。
每种协议保护的范围不同
理解协议时,重要的是把每种协议负责的范围分开思考。
例如,使用 HTTPS 并不意味着与通信有关的所有信息都会被隐藏。 HTTPS 主要保护浏览器和 Web 服务器之间交换的内容。
但是,通信目标的 IP 地址、DNS 查询、通信量、连接时机等,仍可能从其他视角可见。
另外,传统 DNS 查询有时会在未加密的情况下发送。 在这种情况下,查询了哪个域名,可能会在网络上被看到。
像这样,理解某个协议保护什么、不保护什么非常重要。
思考匿名性时的重要视角
思考匿名性时,理解协议非常重要。
因为使用的协议不同,可见的信息和被保护的范围也会变化。
例如,如果使用 HTTPS,网页内容会被加密。 但是,通信目标的 IP 地址和通信时机并不会因此完全隐藏。
如果理解 DNS 的机制,就能知道访问网站之前会发生域名查询。 如果理解 TCP 和 UDP 的差异,就更容易整理通信的性质和使用场景。 如果理解 TLS 的作用,就能把被加密的范围与可能未被加密的信息分开思考。
要提高匿名性,只看“是否加密”是不够的。 需要按照协议分别思考:通信的哪些部分可见,哪些部分受到保护。
总结
协议是让通信成立的约定。
发送方和接收方遵循同一套规则,计算机之间才能正确交换数据。
Web 通信中会涉及 DNS、HTTP、HTTPS、TCP、UDP、TLS 等多个协议和机制。 它们在通信中各自承担不同角色。
DNS 查询与域名对应的 IP 地址。 HTTP 交换网页数据。 HTTPS 用 TLS 保护 HTTP 通信。 TCP 重视准确性来传送数据。 UDP 重视速度和实时性来发送数据。 TLS 保护通信内容。
即使是一次通信,也会组合多个协议。
思考匿名性时,理解哪种协议保护什么、又让什么处于可见状态非常重要。 理解协议之间的差异后,就更容易整理通信的哪些部分受到保护、哪些地方可能留下信息。
相关工具
DNSLeakTest
与本文相关的外部资源。只有在符合你的处境和威胁模型时再打开。
列在这里的原因: 它可能有助于理解本文主题,但位于 Anonymity Sense 之外,使用前应先自行确认。