V2ray的简介与工作原理

在介绍V2RAY的工作机制之前让或多或少的来介绍一下Project V

What is the Projcet V?

  • Project V 是一个工具集合,它可以帮助你打造专属的基础通信网络。Project V 的核心工具称为V2Ray,其主要负责网络协议和功能的实现,与其它 Project V 通信。V2Ray 可以单独运行,也可以和其它工具配合,以提供简便的操作流程。*

So what does it do or advantages?

  • 多入口多出口: 一个 V2Ray 进程可并发支持多个入站和出站协议,每个协议可独立工作。
  • 可定制化路由: 入站流量可按配置由不同的出口发出。轻松实现按区域或按域名分流,以达到最优的网络性能。
  • 多协议支持: V2Ray 可同时开启多个协议支持,包括 Socks、HTTP、Shadowsocks、VMess 等。每个协议可单独设置传输载体,比如 TCP、mKCP、WebSocket 等。
  • 隐蔽性: V2Ray 的节点可以伪装成正常的网站(HTTPS),将其流量与正常的网页流量混淆,以避开第三方干扰。
  • 反向代理: 通用的反向代理支持,可实现内网穿透功能。
  • 多平台支持: 原生支持所有常见平台,如 Windows、Mac OS、Linux,并已有第三方支持移动平台。

​ --引自Project V官网

说了这么多我们进入正题

1.什么 是V2RAY?

​ V2Ray 是 Project V 下的一个工具。Project V 是一个包含一系列构建特定网络环境工具的项目,而 V2Ray 属于最核心的一个。 官方中介绍Project V 提供了单一的内核和多种界面操作方式。内核(V2Ray)用于实际的网络交互、路由等针对网络数据的处理,而外围的用户界面程序提供了方便直接的操作流程。不过从时间上来说,先有 V2Ray 才有 Project V。 如果还是不理解,那么简单地说,V2Ray 是一个与 Shadowsocks 类似的代理软件,v2ray是模块化的代理软件包,支持很多协议,可以用来科学上网(翻墙)学习国外先进科学技术

2.既然提到了V2RAY,那么相比于Shadowsocks和ShadowsocksR之间有什么区别?

Shadowsocks 只是一个简单的代理工具,而 V2Ray 定位为一个平台,任何开发者都可以利用 V2Ray 提供的模块开发出新的代理软件。

了解 Shadowsocks 历史的同学都知道,Shadowsocks 是 clowwindy (请允许我致以崇高的敬意)开发的自用的软件,开发的初衷只是为了让自己能够简单高效地科学上网,自己使用了很长一段时间后觉得不错才共享出来的。V2Ray 是 clowwindy 被喝茶之后 V2Ray 项目组为表示抗议开发的,一开始就致力于让大家更好更快的科学上网。

由于出生时的历史背景不同,导致了它们性格特点的差异。

简单来说,Shadowsocks 功能单一,V2Ray 功能强大。但与之相反,在上手难度来说,SS更适合萌新,而V2ray会显得更加难上手。

3.既然它比SS/SSR更加复杂,那为什么还要用它?

更完善的协议: V2Ray 使用了新的自行研发的 VMess 协议,改正了 Shadowsocks 一些已有的缺点,更难被墙检测到

更强大的性能: 网络性能更好,具体数据以实际的数据以及个人体验为主。

更丰富的功能:

mKCP:在V2RAY上使用KCP协议时,不必安装kcptun 1

^1:
KcpTun是一款服务器双边加速工具,可以将服务器的TCP流量,比如SS/SSR的流量装华为KCP协议的UDP流量发出。作为一款暴力发包工具,KcpTun却可以有效解决丢包问题,明显提升传输速度。具有以下以下3个特点1.对服务器平台的兼容,OpenVZ、KVM、Xen等虚拟化架构技术都支持
2.对基本见得到的系统都兼容如Linux下的CentenOs、Debian、Ubuntu等都可以安装使用 3.加速效果明显 但是与之相对的缺点也不少 1.需要KCPTUN服务器和客户端两者搭配使用
2.参数配置项比较多,可能需要多次尝试不同的参数配置搭配,从而才能达到想要得到的最佳效果。3.发包暴力导致可能会过分甚至加倍服务器流量的使用,甚至影响其他服务器带宽
4.只能加速单一端口的TCP流量,对于其余的端口的并没有特别效果,所以多用于SS/SSR

动态端口:动态改变通信的端口,对抗对长时间大流量端口的限速封锁 2

^2:
动态端口的范围从1024到65535,这些端口号一般不固定分配给某个服务,也就是说许多服务都可以使用这些端口。只要运行的程序向系统提出访问网络的申请,那么系统就可以从这些端口号中分配一个供该程序使用。比如1024端口就是分配给第一个向系统发出申请的程序。在关闭程序进程后,就会释放所占用的端口号

传出代理:看名字可能不太好理解,其实差不多可以称之为多重代理。类似于 Tor 3的代理

^3:
以Tor为例子的通过多次多重中继的覆盖网络跳转,从而达到隐藏用户真正的IP地址,避免网络流量监控、流量分析的目的。事实上不少暗网都是通过Tor来登录的。

数据包伪装:类似于 Shadowsocks-rss 的混淆,另外对于 mKCP 的数据包也可伪装,伪装常见流量,令识别更困难

WebSocket 协议4:可以 PaaS 平台搭建V2Ray,通过 WebSocket 代理。也可以通过它使用 CDN 中转,抗封锁效果更好

^4:

WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输

Mux(Multiplexer):又称为多路复用器,进一步提高科学上网的并发性能

2.工作机制

​ 以下便是V2ray的内部架构示意图,一个V2ray与其他V2ray之间相互独立,不会影响各自的工作。

1.jpg

那么它要怎么工作呢?

​ 首先,我们要配置至少一个输入端-传入协议(Inbound)和一个输出端-传出协议(Outbound)才可以做到最起码的正常运作。关于有哪些协议,上文已经提到了便不再累赘。

  • 传入协议负责与客户端进行通信握手(如浏览器,主流浏览器都支持以上各种协议)

    • 传入协议会配置当前用户的认证 如加密密码等
    • 当传入协议收到需要访问的数据之后,会传给分发器(Dispatcher)进行分发
    • 传出协议负责将数据发给服务器上的V2ray server端
  • 当有多个传出协议时,可以通过配置路由(Routing)来制定某一类的流量经由某一个传出协议来发出

    • 路由会在必要时查询DNS以获取更多的信息进行判断

写在最后 写给能看到这篇文章的自己与各位,V是一个开源的项目,它不是一个人,一个固定的团队建立起来的,是一个又一个的人加入自己的idea,加入自己的function所一块叠一块砖所累积起来的。如果翻出去了,不要仅仅的去看ph看历史,不妨也看看墙外的技术,看看那些为了我们这些过墙人 所搭建的梯子是怎么做的,或许你的了解已经是对他们的一种支持了。

随着2019年11月底 GFW的进一步更新,墙的高度进一步的提高,以SS/SSR为主流的加密流量对于GFW来说变得更加容易被识别拦截,各大机场甚至出现了沦陷的现象,那么这个日子对于V2ray来说还有多近呢,谁也不知道。

参考资料

V2RAY官网
V2RAY配置指南

最后修改:2022 年 03 月 15 日 10 : 05 PM