协议与内核 · 系统查阅

V2Ray 协议与内核
选型技术参考

先确认服务端支持的组合,再在客户端选择协议。协议类型、安全层、传输方式与内核能力需要一起核对,不能只看节点名称。

本页解释配置背后的设计取舍,适合导入后核对参数、迁移内核与比较方案。首次连接请先沿着教程的快速上手主线完成安装与导入,再按目录返回对应章节查阅。

协议与配置分层:先读懂一个节点

把连接拆成四个问题

客户端里的节点是一组连接参数,不是一项孤立的协议开关。读配置时先问四个问题:连接哪台服务器、用什么身份认证、数据通过什么传输方式发送、连接外层采用什么安全机制。服务器地址与端口解决入口定位;VMess、VLESS、Trojan 或 Shadowsocks 决定代理协议;TCP、WebSocket 等决定承载形式;TLS 或 REALITY 则涉及安全层。它们互有关联,却不是可以互相替换的同级选项。

例如,看到“VLESS + WebSocket + TLS”,应分别检查用户标识、WebSocket 路径、请求主机与 TLS 服务器名称。路径正确不能弥补用户标识错误,服务器名称正确也不代表远端监听了对应端口。客户端界面有时把这些字段集中在同一个窗口,容易形成“选了协议就完成配置”的错觉。实际应以服务端提供的整套参数为准,逐层核对,而不是凭节点备注猜测。

系统代理与 TUN 位于另一层

系统代理决定应用是否把请求交给本地代理入口,TUN 则通过虚拟网络接口接收被路由到该接口的流量。它们改变的是流量进入客户端的方式,并不会把 VMess 变成 VLESS,也不会修复远端认证失败。某个浏览器能连接、另一个程序不能连接时,应先检查应用是否遵循系统代理;所有应用都失败时,再沿着本地入口、内核出站、远端入口的顺序排查。

配置层次常见字段主要核对内容
入口与身份地址、端口、UUID 或密码服务器监听位置与用户凭据一致
传输承载传输类型、路径、请求主机客户端与远端入口采用相同约定
安全层服务器名称、TLS、REALITY名称验证、密钥与安全机制匹配
本地接管系统代理、TUN、路由规则目标应用的请求确实进入客户端

区分域名解析发生的位置

服务器地址如果是域名,建立连接之前需要先解析;访问目标网站的域名,则可能由本地应用、客户端 DNS 模块或远端负责解析。这是两条不同的解析路径。修改目标域名的分流规则,不一定会改变服务器域名的解析结果。出现“域名地址失败,直接填写地址后能连接”的情况,应检查入口域名解析与地址族选择,不要立即更换协议。直接填写地址只是定位手段,仍须保留正确的安全层服务器名称。

选型也应遵循这套层次:先确认现有服务提供哪些组合,再确认客户端内核是否实现这些组合,最后考虑是否需要 TUN、分流或订阅管理。桌面端可先从 v2rayN 下载入口选择平台;如果手里只有订阅链接,应先完成导入,再查看节点详情。盲目把安全层切换为另一个名称,通常只会让原本完整的配置失去对应关系。

VMess 与 VLESS:认证与加密的取舍

VMess 的设计背景与兼容边界

VMess 是 Project V 生态中的代理协议,设计中包含用户认证与数据保护机制,形成了较完整的协议处理流程。它在既有订阅中仍然常见,不应因为名称较早出现就直接判定不可用。判断依据应是当前客户端内核与服务端实现是否兼容、配置是否完整,以及连接是否符合实际需求。协议内部的数据保护与外层 TLS 属于不同层次,同时存在时也不能简单理解成重复填写一个加密选项。

VMess 的常见排错点包括用户标识、加密设置和系统时间。认证涉及时间相关校验,设备时间明显偏离时可能导致握手失败;此时应开启系统自动校时,而不是反复刷新订阅。旧配置里可能保留额外身份参数,新实现通常采用 AEAD 认证。遇到历史字段应向服务提供方确认其适用性,不要照着旧截图随意填写,也不要把兼容旧参数理解为所有新旧实现都能互通。

VLESS 把安全责任交给组合方案

VLESS 的取舍是精简协议本身的处理,不在协议层承担与 VMess 相同的数据加密职责,通常配合 TLS 或 REALITY 使用。精简不等于自动安全,也不等于任何链路都更快。在公共网络中使用时,需要明确外层保护如何建立;如果只是把 VMess 节点的协议下拉框改成 VLESS,而服务端没有对应入口,认证自然不会成功。协议变更需要两端共同配置,不能仅在客户端单方完成。

VLESS 配置中的用户标识仍然是身份参数,不能与 TLS 的服务器名称混为一谈。流控字段也有实现约束,例如服务提供方给出 Vision 相关配置时,需要核对承载方式、内核支持与服务端要求。并不是所有 VLESS 节点都应填写同一种流控,更不是看到 REALITY 就自行增加流控值。保留订阅中明确提供的设置,比套用一份所谓通用参数更可靠。

如何在两者之间作决定

已有运行稳定的 VMess 配置,且目标客户端能完整导入时,没有必要仅凭“新协议更快”的概括就迁移。若服务端明确提供 VLESS 与合适的安全层,并且客户端使用支持该组合的内核,可以按原始参数尝试。对比时应固定服务器、测试目标与本地接管方式,否则不同入口的负载、线路和路由策略会掩盖协议差异,最后得到的只是两个节点的整体差异,而非协议本身的差异。

迁移前先保留原配置,在独立分组导入新配置,确认网页访问、长连接与所需的 UDP 应用,再决定是否替换默认节点。不要覆盖仍可工作的条目后才开始排错。若新配置只在某个内核下失败,应查传输与安全层支持情况;若所有内核都失败,应回到服务端参数与网络可达性。有关导入动作的具体位置,可参照v2rayN 订阅导入教程,本章只负责解释字段之间的关系。

Trojan 与 Shadowsocks:两类连接模型

Trojan 依赖完整的 TLS 连接

Trojan 的典型设计是在 TLS 连接中承载代理请求,并用密码完成身份认证。它的配置界面可能显得简洁,但简洁并不意味着只需要地址和密码。服务器名称、证书信任与传输设置同样重要。连接 IP 地址与验证域名可以不同:前者用于找到服务器,后者用于建立预期的 TLS 身份关系。若服务器给出专门的名称字段,应保留该字段,而不是把节点地址机械复制到每个输入框。

证书错误通常应从名称是否匹配、系统时间是否准确、信任链是否完整入手排查。关闭证书验证会改变安全前提,不应作为日常修复方案。若使用的是服务端自定义的部署方式,还需要确认它采用哪一种承载形式;不同内核或客户端对扩展组合的表达可能不同。普通 Trojan 入口可用,并不能证明某种额外传输扩展也受支持,必须核对实际实现与参数。

Shadowsocks 的方法字段不能省略

Shadowsocks 常简写为 SS,采用共享密钥思路,客户端需要知道服务器地址、端口、密码以及加密方法。它与主要依赖外层 TLS 的配置路径不同,不能将 SS 的方法名称填写到 VLESS 的安全层选项中。早期方法与现代 AEAD 方法存在差异,实际选择应由服务端支持范围决定。把方法改成客户端列表里看起来更强的一项,不会自动升级服务端,反而会造成两端无法解读数据。

部分较新的 Shadowsocks 方法对密钥编码和长度有明确要求,不再适合把任意短语当作通用密码。客户端能显示某个方法名称,也不保证当前运行内核实现了它。遇到导入后方法丢失、密码被截断或认证持续失败,应对照原始分享格式检查,而不是不断重试相同连接。还要留意插件参数:客户端具有基础 SS 支持,不代表同时具有某个外置插件或扩展传输的运行条件。

UDP、连接复用与使用边界

两类协议都不能只凭“支持 UDP”四个字判断目标应用一定可用。远端是否允许转发、客户端是否开启相关能力、本地应用流量是否进入代理,以及路由是否放行,都会影响结果。有些测试只测 TCP 连接建立,无法说明语音、游戏或其他 UDP 应用的表现。若网页正常而某类应用失败,应先核对该应用使用的传输方式和接管路径,再检查远端支持,而不是立即改密码。

对于配置维护,Trojan 的重点通常是 TLS 名称、证书与密码;SS 的重点通常是方法、密钥与可选扩展参数。若服务端只提供其中一种,选择支持原始组合的客户端即可,没有必要为了统一名称而转换成另一种协议。桌面端优先在 v2rayN 中查看节点完整参数;Android 端可根据内核需求选择 v2rayNG 或 v2flyNG。两端保持同一组服务参数,有助于把客户端差异与服务端问题分开。

TLS 与 REALITY:安全层参数逐项核对

先区分名称验证与网络入口

TLS 为连接提供安全保护,常规使用中还需要验证对端身份。服务器名称用于表达预期连接的身份,不一定与实际拨号地址完全相同;ALPN 用于协商应用层协议,也不是可以任意填写的加速参数。只有服务端配置要求某些值时,客户端才应按约定设置。为了让连接通过而忽略名称或证书问题,会失去原先的验证前提,应先确认配置来源与远端部署是否一致。

在带 WebSocket 或其他中间承载的方案中,请求主机、TLS 服务器名称与路径可能分别影响不同处理阶段。某些部署让它们使用同一域名,另一些则并非如此。排错时应把字段名称与含义列清楚,不要因为界面只有几个输入框就将它们统一替换。浏览器能够访问某个域名,也只能说明该访问路径成立,不能证明代理协议的认证、路径与远端转发同样正确。

REALITY 不是第五种出站协议

REALITY 是 Xray 生态中的安全层机制,常见于 VLESS 组合。它与普通 TLS 证书部署有不同的配置关系,不能只把安全层名称改成 REALITY 就完成迁移。客户端通常需要服务端提供的服务器名称、认证公钥参数以及 shortId,必要时还要核对指纹与流控。不同客户端可能把相关字段显示为“公钥”或使用随内核演进而变化的名称,应按内核说明和订阅提供方的字段对应关系核对。

公钥用于对应服务端持有的私钥,不能根据域名推算;shortId 必须属于服务端允许的集合,空值也只有在服务端明确允许时才成立。不要把其他节点的这两个参数借来使用。连接地址负责找到部署入口,服务器名称则必须符合该部署的要求,两者承担不同职责。如果订阅更新后这些字段变化,旧配置可能不再成立,应重新导入完整参数,而不是只更新地址与端口。

指纹与流控都不是独立的性能按钮

客户端指纹涉及 TLS 握手特征的实现方式,其可选值取决于内核,不能凭名称判断兼容性。流控同样受协议组合与远端配置限制。若导入后客户端提示未知参数,优先检查是否选用了正确内核、当前配置格式是否能表达这些字段,以及转换过程是否丢失信息。不同界面上的默认值未必相同,因此排错时需要查看实际保存的内容,而不只是回忆导入前的分享文本。

较稳妥的核对顺序是:先确认远端提供的是普通 TLS 还是 REALITY,再核对服务器名称;使用 REALITY 时继续核对公钥参数与 shortId,最后检查指纹、流控及传输方式。每次只修改一组相关字段并保留原值,避免同时更换地址、内核与安全层后无法定位原因。遇到握手错误,可结合疑难解答中的连接排查理解日志,但不要把包含认证参数的完整配置公开粘贴。

连接速度、资源占用与移动端电量

把首次连接与持续传输分开

讨论“哪个协议快”之前,需要先定义观察对象。首次打开页面涉及域名解析、与服务器建立连接、协议认证和可能的 TLS 握手;持续下载则更多受链路容量、拥塞、远端负载与设备处理能力影响。某种组合减少了一个处理环节,不代表在所有网络中都能明显缩短页面加载。若测试目标或服务端入口不同,就不能把最终差异全部归给协议,尤其不能据此给出固定的速度排名。

握手过程对往返时间敏感,而大文件传输对稳定吞吐更敏感。连接复用可以在适合的场景中减少重复建立连接,但也可能改变连接之间的竞争与故障影响范围。客户端提供复用开关,不意味着应对全部节点统一启用。部分组合对复用或流控有特定限制,优先遵循服务端建议;若想验证效果,应保持其余配置不变,并分别观察短请求、长连接与并发访问。

CPU 与内存开销来自完整处理链

VMess 的协议处理、SS 的加密方法、TLS 握手、数据复制与传输封装都会产生开销,现代处理器的硬件加速能力又会改变相对成本。VLESS 减少协议层处理,但其外层安全机制仍然需要计算资源。TUN、DNS 模块与规则匹配也消耗资源,不能把客户端整体占用直接视为某个协议的占用。若桌面端切换模式后内存变化,应先确认是否同时启用了额外内核功能与规则集合。

观察对象主要影响因素比较时保持一致
首次响应解析、握手、远端处理目标、缓存状态与测试时段
持续传输容量、拥塞、加密与负载文件来源与并发任务
设备耗电唤醒、重连、无线状态信号条件与后台应用

移动端重点观察唤醒与重连

Android 设备的耗电不仅来自加密计算,也来自无线连接保持、后台心跳、DNS 请求与失败后的重复重连。信号较弱或频繁切换网络时,同一协议也可能表现不同。若开启客户端后待机耗电明显增加,应先检查是否存在持续失败日志、某个应用是否高频联网,以及订阅或探测任务是否过于频繁。只更换协议而保留相同的重连循环,通常不会解决根本原因。

进行电量比较时,应在相近信号条件下保留同一组应用和使用方式,区分屏幕常亮测试与后台待机测试。短时间的电量百分比跳动不足以证明协议优劣。桌面端同样应检查空闲与忙碌两种状态,并避免一边运行其他下载任务一边比较。若重点是非浏览器程序的接管,再阅读v2rayN TUN 模式原理与设置,先解决流量进入路径,再评估额外开销。

V2Fly、Xray 与三款客户端的分工

内核家族与图形界面不是同一层

Project V 是理解这一生态的背景入口,V2Fly 延续 V2Ray 相关项目的开发,Xray 则与 V2Ray 有共同历史并独立演进。两者在协议、传输与配置结构上存在共同基础,也各自发展了功能。开源意味着可以依据各项目的许可证查看与使用代码,不意味着不同项目永久共享完全相同的配置语义。涉及具体功能时,应以正在运行的内核实现为准,而不是只看家族名称。

图形客户端负责订阅管理、节点编辑、启动内核与系统代理等操作,内核负责连接处理、协议实现和规则执行。v2rayN 是桌面端优先选择的客户端,覆盖 Windows、macOS 与 Linux;同一客户端的不同界面形态或打包方式,也不应被误认为不同代理协议。选择安装包时先确认平台与处理器架构,之后再确认实际运行的内核以及它接收的配置内容。

Android 端按内核需求选择

v2rayNG 面向 Android,采用 Xray 内核;v2flyNG 是采用 V2Fly 内核的备选。二者的界面可能具有相似的导入步骤,但内核能力并不因此相同。需要 REALITY 等 Xray 相关能力时,应优先确认 v2rayNG 对当前组合的支持,不应默认 v2flyNG 能原样承接。若已有面向 V2Fly 的配置,则可以根据实际传输与协议支持情况评估 v2flyNG,而不是仅凭名称相近决定。

v2rayN 中若提供内核选择,应注意节点与路由配置最终交给了哪一个内核。界面能保存某个字段,只说明编辑器接受了文本,不代表后台内核已经实现对应功能。启动失败时先读内核错误,连接失败时再读握手与路由错误。若日志提示未知字段或不支持的传输类型,应回到内核兼容性,而不是反复开启、关闭系统代理。两类错误位于不同处理阶段。

配置兼容应按字段检查

两个内核都使用 JSON,并不意味着可以直接交换整份配置。某些协议名称相同,但扩展参数、默认值、传输实现或 DNS 行为可能不同。配置迁移时,应先迁移最小可用出站,再逐项加入路由、DNS 与其他功能。一次性复制整套复杂配置,容易把不支持的字段和逻辑依赖一起带入,造成看似节点有问题、实际却是配置加载失败的情况。

客户端升级也应分清界面与内核的变化:界面新增选项不一定表示所有已有配置都需要修改;内核更新后,旧字段也可能出现提示或兼容变化。保存可恢复的配置、记录当前内核名称,并先验证单个节点,有助于降低迁移成本。安装与运行环境问题可查阅v2rayN 首次安装与初始设置;客户端与架构入口统一见下载中心,不需要另行寻找独立的内核下载区。

订阅格式兼容性:导入成功之后还要查什么

订阅地址、分享链接与内核配置

订阅地址通常指向一个返回节点内容的网络资源,单节点分享链接则编码一项连接配置,内核配置文件还可能包含本地入站、DNS 与路由。三者用途不同,不能只凭文本看起来很长就按同一种方式导入。部分客户端能自动识别多种格式,但识别能力不是无限的。先确认拿到的是订阅地址还是单节点内容,再选择对应导入入口,可以避免把网页地址或整份配置误当成节点链接。

传统订阅中常见经过 Base64 编码的多行分享内容,也有其他结构化表示。Base64 只是编码,不承担保密职责;能解码也不代表每一行都包含有效节点。VMess 分享内容常把字段放在编码后的 JSON 中,VLESS 与 Trojan 常使用带查询参数的 URI,SS 还存在不同的编码表达。不同格式对新字段的表达能力不同,订阅转换时尤其要留意安全层、流控与扩展传输参数。

编码正确仍可能丢失语义

密码、路径和查询参数中包含特殊字符时,需要遵循对应格式的编码规则。例如 URL 中的分隔符不能随意当作普通字符使用,聊天工具换行或复制时截断也会破坏链接。排查时应优先从原始来源重新复制,避免先手工解码、编辑、再编码,反而引入新错误。订阅内容返回登录页或错误提示时,即使网络请求成功,也不会形成有效节点。

下面是本地 SOCKS 入站的最小片段,用来说明内核配置与节点分享链接属于不同结构。它不是完整客户端配置,不能作为订阅导入;需要放入相应内核的完整配置上下文,并配置出站。示例只绑定回环地址,避免把本地代理入口直接暴露给其他设备。实际使用图形客户端时,通常应在界面内修改本地端口,由客户端生成配置,不要同时手改生成文件。

{
  "inbounds": [
    {
      "listen": "127.0.0.1",
      "port": 10808,
      "protocol": "socks",
      "settings": {
        "auth": "noauth",
        "udp": true
      }
    }
  ]
}

转换订阅不能补足内核能力

订阅转换的作用是重新表达已有信息,而不是给不支持某项功能的客户端增加实现。如果目标格式无法携带 REALITY 所需参数,转换后可能出现节点列表正常、握手却失败的情况。应对照原始配置检查协议、安全层、服务器名称、公钥参数与 shortId 是否保留。若原始内容本来就缺少字段,转换服务也无法推断正确值,应向配置提供方索取完整信息。

订阅地址往往带有可用于访问账户配置的标识,应按敏感信息对待。把地址提交给第三方转换服务,等于让该服务接触订阅内容;分享截图时也要避开链接、二维码与认证字段。更新失败时,先确认有效期与返回内容,再区分“直连更新失败”和“通过代理更新失败”。具体检查顺序可读订阅解析失败自查,转换边界见订阅转换常见问题。

按使用场景选型,并完成连接验证

已有可用订阅:先兼容,再优化

如果已经持有有效订阅,最务实的选择是使用能完整表达该订阅参数的客户端。桌面端首选 v2rayN,按系统和处理器选择安装入口;Android 端根据内核需求选择 v2rayNG,面向 V2Fly 的既有配置可评估 v2flyNG。不要先列一个协议优先级,再强行把全部节点改成排在前面的名称。服务端已经决定了可用组合,客户端的任务是正确还原,而不是凭空替换。

首次验证时保留最简单的使用路径:完成订阅导入,选择一个参数完整的节点,使用明确支持系统代理的应用检查访问。确认基础连接后,再加入分流规则、TUN 或其他功能。若所有设置同时开启,出现失败时很难判断是协议、DNS、规则还是权限问题。快速操作步骤见订阅导入主线;Android 的具体入口见v2rayNG 订阅导入。

移动使用与复杂应用分别处理

移动端经常切换网络,应关注重新连接、后台运行与系统电量管理,而不是只看一次连接测试。若休眠后中断,先检查客户端是否被系统限制、网络切换后是否重新建立连接,以及入口域名能否重新解析。对于电量敏感的使用方式,减少不必要的探测和失败重试通常比追求某个协议名称更有意义。订阅更新间隔也应适度,相关设置可参考v2rayNG 订阅更新说明。

桌面端若有不遵循系统代理的程序,再考虑 TUN,并同时检查系统权限、DNS 与路由回环。开启虚拟网卡不等于每种流量都应交给远端,也不等于可以忽略本地网络访问需求。远程办公、局域网设备和本地服务可能需要保留直连路径。路由器或旁路由部署则属于另一类运行环境,需要考虑处理器架构与配置维护,可进一步阅读路由器运行 Xray 的部署概览。

用分层验证收敛故障范围

连接验证可以按四步展开。第一步确认客户端内核正常启动,本地入口没有端口冲突;第二步确认服务器域名可解析且入口可达;第三步检查协议认证与安全层握手;第四步检查目标应用的 DNS、路由和传输需求。每一步都应对应可观察的信息。端口可达不代表认证成功,认证成功不代表目标网站能够访问,浏览器可用也不代表其他应用已进入代理。

比较方案时记录客户端、内核、协议组合与接管方式,并只改变一个变量。若问题跟随某个节点,应查服务参数与远端状态;若问题跟随某个应用,应查代理支持与路由;若切换网络后才出现,应查解析、重连与网络限制条件。最终选型以参数可维护、所需应用稳定工作和设备负担可接受为准。协议没有脱离部署环境的统一排名,保留一份可恢复配置,比频繁套用陌生参数更有实际价值。