协议如何运行:深入了解独特的 AdGuard VPN 协议
多年来,我们集中于开发各种广告拦截应用程序、浏览器扩展和 DNS。对很多用户而言,两年前好像我们突然决定开发自己的 VPN 服务,但实际上,有几个原因让我们下定决心。
-
由于 AdGuard 移动应用程序与其它 VPN 应用程序存在兼容问题,因此我们将内部组建的 VPN 视为唯一可保证兼容性的解。“施点魔法”后,两款应用程序就可在一个 VPN 隧道上运行。
-
第二个原因是, VPN 非常符合我们的服务宗旨与原则。
-
最后一个原因是,在开发 AdGuard 软件的多年来,我们成为了过滤网络流量的高手。这些经验让我们为用户带来一个全新的,而不是又一个缺乏特点的 VPN 服务。
从一开始,我们就决定 AdGuard VPN 与其竞争对手相比要有一个关键区别 —— 我们不应用已存在的解决方案,而要自主开发并使用内部创建的 VPN 协议。
您也许会问:为何要费这么大劲呢?在这篇文章里,我们将为大家解释我们对现存协议不满意以及创建自己协议的原因,并且我们还会介绍一下我们未来改善协议的计划。
剧透:AdGuard VPN 协议与其它协议相比更快以及更难以检测。
但首先让我们多深入一些技术方面的信息,以及了解:
互联网工作原理
不用担心!我们在这里不会为您从头到尾解释互联网的工作原理,而是一些基本原则。目前互联网上的通信基于计算机之间数据包的传输。数据包类型有几个,而每一个类型具有自己独特的目的。数据包封装并处理的规则叫做协议。
IP 协议
您肯定听说过 IP 地址吧?基本上,IP 地址是 IP 协议的一个部分 —— 网络数据传输的主要机制。每一个数据包包含三个部分:数据、发送方和接收方的 IP 地址。
接收方知道是谁发送数据包,所以也可以送回一些数据。虽然"单纯"的 IP 协议几乎没用,但是基于它的其它两个协议则用途极广,也就是 TCP 和 UDP 协议。
TCP 协议
TCP 是互联网的一匹“役马”。当您打开网站时,最可能互联网使用 TCP 进行数据传输。
TCP 包含四个部分:
- IP 包头,包括源地址和目的地址。
- 发送方和接收方的端口号。该编号用于操作系统区别哪一个数据包传送到哪一个电脑上的服务来处理。
- 数据包序列号。有时,数据包发送的顺序,与到达接收方的顺序不同。序列号则能作为参考复原正确的序列。
- 数据包类型。此属性用于保证传送数据的准确性。阅读下面内容可以了解更多。
无论您使用的是什么网络,在传输过程中某些数据包可能会丢失。TCP 协议保证数据包将会成功转发到目标地址。对每一个发送的数据包,接收方将会送回包含确认信息的 TCP 包。如发送方没收到确认信息,它将会重新发送数据包。一直到发送方收到确认信息为止。
UDP 协议
UDP 是另一个,但不是那么热门的基于 IP 的协议。与 IP 协议相比,唯一一个区别在于,除了数据和发送方与接收方地址以外,它还传输关于端口号的信息(在 TCP 部分可以了解与端口号的相关信息)。正如从下方的 GIF 图可以看到,由于没有接收方送回的确认信息,因此 UDP 比 TCP 协议的数据包传输速度更快。
VPN 协议工作原理
当您给某一个人发送一封信或邮件时,您可以不写内容、事由、签名,但是需要输入接收方地址。互联网的工作原理是相同的。为了发送数据,您需要 IP 地址。
当您访问网站时,它能检测到您的 IP 地址。一知道 IP 地址就可以很容易判断用户的地理位置。VPN 则允许您的数据通过加密连接从您家/办公室或手机先被发送到互联网上的另一点,甚至可能是另一个国家,然后再发送到公共互联网。该操作仿佛一只兔子潜入一个洞,但出口是在某一个别的地方。
通过加密,您的数据会获取隧道另一端的 IP 地址,而非您的住址或工作的地址。现在,当您连接网络服务器时,服务器所检测的 IP 地址就不再是您家里的,而是 VPN 终点的 IP 地址。所以,如果您访问网站,您的数据不会被暴露无遗。
您很可能已了解下面的内容,但是也无妨回顾一下吧。让我们深入了解技术上的一些细节。为了让 VPN 起作用,需要传输并加密从您的设备发送到 VPN 服务器的数据。传输并加密这些数据的规则叫做 VPN 协议。最常见的 VPN 协议有 OpenVPN、WireGuard 和 IPSec。基本上,这些协议在运行方式以及功能上大同小异。但是,魔鬼在细节中(即在加密和连接的建立上)。
让我们看一下 VPN 协议的工作原理。比如,您想访问某一个网站。如您启用 VPN,VPN 服务器就相当于您和网站之间的中介人。最初,已加密的 IP 包将会发送到服务器。VPN 服务器对此数据包进行解密,改变“发送方地址”(即您的 IP),然后再将此数据包发送到接收方(即您访问的网站)。一般,以达到这个目的,可以使用 UDP 作为传输协议。因为它不需要等待对方的确认信息,因此速度更快。
现存 VPN 协议的限制
所有流行 VPN 协议(包括 OpenVPN、WireGuard、IPSec 等等)都有两个共同的缺点:
- 在网络层面上,它们可以很容易被检测并阻止。
- 如您试图“隐藏”它们,它们的性能将会降低。
为了“隐藏” VPN,通常数据可“包装”到 TCP 连接。有时,数据包还会额外加密,以让流量看起来更像正常网站连接。不幸的是,此方法有个缺点 —— 由于使用的是 TCP,您需要收到确认信息。
这样,当我们使用主流 VPN 协议时,我们总是面临两个尴尬的抉择:高速运行但更易于被探测 VS. 低速运行但更隐蔽。
AdGuard VPN 协议的优势
看到了现存协议的缺点,我们不愿意就这么拿来使用,因此研发了 AdGuard VPN 协议。那么我们协议的强项到底是什么?
- 我们的协议几乎无法与正常 HTTPS 流量区分。这意味着,AdGuard VPN 服务器的连接看起来与网站的正常连接几乎是一样的。
- 为了加密,我们使用能够很好加密的 HTTPS(TLS)。这是世界上最受欢迎的加密方式,而实现 HTTPS 的数据库不断经过数据库的安全审计。
有些现存 VPN 协议也能加密(这样隐藏 VPN 正在被使用),因此它们难以被检测到。但是,它们的加密功能导致运行速度降低。不过,我们找到了一些解决方案,所以这种情况与我们无关。
-
我们使用 HTTP/2 传输协议,这样 Adguard VPN 协议不仅几乎无法被检测到,但是速度一般也不受到任何限制。
-
与其他协议不同,AdGuard VPN 协议处理的是数据,而不是数据包。这意味着,AdGuard VPN 为每一个连接建立独立的“隧道”,每一个 HTTP/2 数据流在一个连接内响应。AdGuard VPN 经过该隧道传输数据,在将数据包发送到 VPN 服务器(或从服务器到客户端)前,我们可以将几个数据包的数据集成一个数据包,这样通过节省包含确认信息的包,我们可以加快处理的速度。数据包越少,我们需要的包含确认信息的包也越少。
未来规划
切换成 HTTP/3 和 QUIC
首先,我们打算切换成 HTTP/3 和 QUIC 协议以与服务器通信。HTTP/3 是 HTTP 的最新且最进阶的版本。很遗憾,当连接是正常以及稳定时,新协议不会让速度增加。不过,当连接不良时(比方说,在移动设备上或连接公共 Wi-Fi 时),协议的优势就会展现出来。新协议具有几个很明显的优点。第一个是,它们不会造成数据包重传以及对头阻塞(英语:Head of Line Blocking,HoLB)。第二个是,它们会允许使用连接迁移。简单地说,最重要的优点就是上述已提到的在不理想情况下,网络连接质量的改善。
TCP 和其它在 TCP 上运行的协议(包括 TLS、SSL、HTTP /1.1 和 HTTP/2)已存在很长时间,并且它们运行很好, 但是有一个问题 —— 它们只有在几乎完美的条件下能流畅运行。这意味着它们只有在具有稳定及高质量连接的网络基础上(比如,家里的 Wi-Fi 网络)才能良好运行。但是一出门连接移动网络,您就无法避免弱信号、慢连接、以及其它导致数据包丢失的“倒霉事”。数据包丢失则导致上述提到的数据包重传和 HoLB。即使 5G 都不是万能的,在电梯或地铁站之间的长隧道里连接都会减弱。因此当您使用 VPN over HTTP/3 时,上述问题就不会再出现 —— 无论您在电梯或因为某些其它原因导致网络连接质量改变,VPN 连接都不会再被破坏。
目前我们正在测试新实施方案的原型。预计它将在几个月内准备好。
开源代码
如您是 AdGuard 的老朋友了,那么您一定已经知道,我们产品很多都是开源代码的。开源软件的概念与我们的理念很接近。这是因为我们相信这种项目可以帮助人们,并为技术的发展做出贡献。但是我们也要保护隐私安全,所以我们只在产品的一些可以开源的地方开源。
未来我们打算向公众提供实现我们的协议的方法。很遗憾,由于需要很多时间及工作,现在我们没有足够时间能让我们准备好该项目。但是我们希望在这个年底前我们会有时间发布服务器和客户端实现的代码。
在所有的 AdGuard VPN 的移动和桌面应用程序里我们使用的都是我们自己的协议。立即下载我们的产品(一款或几款:) ),并让您的数据以最安全的方式被保护!如您愿意,我们欢迎您在博客文章下的评论或社交媒体上与我们分享您的体验。