v2ray / discussion

For general discussion over Project V development and usage.
298 stars 34 forks source link

vless-tpc-xtls和常用协议性能对比 #857

Closed Yochee closed 3 years ago

Yochee commented 3 years ago

做了个小测试,用R2S路由器(CPU: RK3328, 4*Cortex-A53)做服务端,用vless自带的fallbacks运行vless-tcp-xtls, vmess-tcp-tls和vmess-ws-tls服务,PC客户端访问本地iperf3测速服务,为模仿真实流量,先套了一层tls,具体流线为:

(PC)in --> (PC)socks over tls --> (PC)v2ray --> (Router)v2ray --> (PC)socks --> (PC)iperf3

在PC客户端用了两次dokodemo-door实现上述流程,经测试网络环境和PC性能均不构成瓶颈。

结果: vless-tcp-xtls 372 Mbps vless-tcp-tls 186 Mbps vmess-tcp-tls-none 148 Mbps vmess-ws-tls-none 157 Mbps vmess-ws-tls-aes-256-gcm 153 Mbps vmess-ws-tls-chacha20-poly1305 155 Mbps

结论:

  1. xtls确实提升巨大
  2. vless协议对比vmess有小幅提升
  3. vmess自身加密算法影响不大
  4. 不知道为啥好像websocket性能反而优于tcp
  5. R2S这小路由器真的香,可以当主路由用了
RPRX commented 3 years ago

Direct?

Yochee commented 3 years ago

Direct?

RPRX commented 3 years ago

(最好是四台机器,比较准确,另外看起来 R2S 跑满了;我之后也会出个测试)

Yochee commented 3 years ago

(最好是四台机器,比较准确,另外看起来 R2S 跑满了;我之后也会出个测试)

多谢大佬 确实跑满了,但是不管啥组合都能满100M对于家用宽带很足够了 能否解释下为啥4台机器比较准,我测的时候任意门转发和socks转发以及内层tls的加解密都在PC端,网络也是全千兆,应该没啥影响了呀

RPRX commented 3 years ago

因为有个东西叫 ReadV,流量方向不同也会影响它。

https://github.com/v2fly/v2ray-core/issues/416

简单来说就是去掉一层 TLS 后,可以得到质的飞跃,之后的 Splice 更强大。

Yochee commented 3 years ago

因为有个东西叫 ReadV,流量方向不同也会影响它。

v2fly/v2ray-core#416

简单来说就是去掉一层 TLS 后,可以得到质的飞跃,之后的 Splice 更强大。

看了下,是因为socks包了tls后就不算裸协议了导致ReadV失效?如果给socks包tls是在另一台机器或者另一个v2ray进程实现的就没影响?有点玄妙啊

badO1a5A90 commented 3 years ago

能否解释下为啥4台机器比较准,我测的时候任意门转发和socks转发以及内层tls的加解密都在PC端,网络也是全千兆,应该没啥影响了呀

四台机器是因为高速率测试下如果都在同一台机器跑本地回环或两台机器跑客户端-服务器,各种因素相互影响很大,在各种组合跑满CPU时,并不能确定瓶颈所在,也无法得到准确的速率.(比如可能在制造TLS数据流就用去了大量CPU性能,可能iperf本身占用了CPU),所以把 iperf客户端及制造TLS数据(A)/v2ray客户端(B)/v2服务端(C)/接收TLS数据及iperf服务端(D),拆开四个部分ABCD. 并且通过性能控制手段或者机器本身的性能差距,保证用来AD无论任何测试中都不会满负荷(不成为变量,不产生影响),AD只是提供了一个稳定的高上限的TLS数据流. 唯一的变量是B-C的组合,这样就可以最精确的测试B-C直接的组合性能了. 另外分别拆开也可以分别对各个环节进行控制,比如可以用来分析某个环节的影响程度等等.

你这个测试中,其实ABD都是PC,但我猜测,这个速率肯定跑不满PC的CPU.所以相互影响因素应该不大. (重新看了一下路由器这里充当的是v2ray服务器角色,那应该readV是生效的,但是这个数据流向不符合正常上网的数据流向,即主要是服务器发送到客户端.)

ws比TCP快有点玄学...也许可以再检查一下哪里还有不一致的地方.

badO1a5A90 commented 3 years ago

另外不知道你是用什么先套了一层tls和解除tls的? 数据流向里没有看出解除TLS的位置.

Yochee commented 3 years ago

你这个测试中,其实ABD都是PC,但我猜测,这个速率肯定跑不满PC的CPU.所以相互影响因素应该不大.

对的,就是出于这个考虑选了比较弱的R2S测试,能看出协议本身的性能差别

(重新看了一下路由器这里充当的是v2ray服务器角色,那应该readV是生效的,但是这个数据流向不符合正常上网的数据流向,即主要是服务器发送到客户端.)

打算晚点用x86软路由再跑一次,用4台机器,到时候iperf加上-R

ws比TCP快有点玄学...也许可以再检查一下哪里还有不一致的地方.

我能想到的就是cpu降频了...R2S无风扇还蛮热的

另外不知道你是用什么先套了一层tls和解除tls的? 数据流向里没有看出解除TLS的位置.

v2ray本身socks的streamSettings里加了个tls...所以都是在PC端

badO1a5A90 commented 3 years ago

所以实际上 (PC)socks over tls 也是v2ray做的...那应该是有多一次的inbound和outbound来处理这个吧. 你流程的倒数第二环节的(PC)socks应该也是要多一次inbound和outbound来解除TLS然后freedom到iperf吧. 我觉得需要观察下PC的cpu是否满负荷... 还可以试一下iperf多个线程 -P

badO1a5A90 commented 3 years ago

我能想到的就是cpu降频了...R2S无风扇还蛮热的

如果会降频...那可能就会有更多影响了.应该是可以锁定频率的吧(我有点记忆模糊,很久以前做一些其他的东西的时候接触过这个芯片而已.

Yochee commented 3 years ago

贴下配置文件吧,虽然没啥注释但也很简单 server:

{
  "inbounds": [{
    "port": 1080,
    "protocol": "vless",
    "settings": {
      "clients": [{
        "id": "***",
        "flow": "xtls-rprx-direct"
      }],
      "decryption": "none",
      "fallbacks": [{
        "dest": 1081,
        "xver": 1
      },{
        "path": "/ws/",
        "dest": 1082,
        "xver": 1
      }]
    },
    "streamSettings": {
      "security": "xtls",
      "xtlsSettings": {
        "alpn": ["http/1.1"],
        "certificates": [{
          "certificate": ["***"],
          "key": ["***"]
        }]
      }
    }
  },{
    "listen": "127.0.0.1",
    "port": 1081,
    "protocol": "vmess",
    "settings": {
      "clients": [{
        "id": "***",
        "alterId": 64
      }]
    },
    "streamSettings": {
      "tcpSettings": {
        "acceptProxyProtocol": true
      }
    }
  },{
    "listen": "127.0.0.1",
    "port": 1082,
    "protocol": "vmess",
    "settings": {
      "clients": [{
        "id": "***",
        "alterId": 64
      }]
    },
    "streamSettings": {
      "network": "ws",
      "wsSettings": {
        "acceptProxyProtocol": true,
        "path": "/ws/"
      }
    }
  }],
  "outbound": {
    "protocol": "freedom"
  }
}

client:

{
  "inbounds": [{
    "listen": "127.0.0.1",
    "port": 1080,
    "tag": "data-in",
    "protocol": "dokodemo-door",
    "settings": {
      "address": "127.0.0.1",
      "port": 5201
    }
  },{
    "listen": "127.0.0.1",
    "port": 1081,
    "tag": "tls-in",
    "protocol": "dokodemo-door",
    "settings": {
      "address": "PC的IP",
      "port": 1080
    }
  },{
    "listen": "PC的IP",
    "port": 1080,
    "protocol": "socks",
    "streamSettings": {
      "security": "tls",
      "tlsSettings": {
        "certificates": [{
          "certificate": ["***"],
          "key": ["***"]
        }]
      }
    }
  }],
  "outbounds": [{
    "protocol": "freedom"
  },{
    "protocol": "socks",
    "tag": "tls-out",
    "settings": {
      "servers": [{
        "address": "127.0.0.1",
        "port": 1081
      }]
    },
    "streamSettings": {
      "security": "tls",
      "tlsSettings": {
        "serverName": "***"
      }
    }
  },{
    "protocol": "vless",
    "tag": "proxy-out",
    "settings": {
      "vnext": [{
        "address": "R2S的IP",
        "port": 1080,
        "users": [{
          "id": "***",
          "flow": "xtls-rprx-direct",
          "encryption": "none"
        }]
      }]
    },
    "streamSettings": {
      "security": "xtls",
      "xtlsSettings": {
        "serverName": "***"
      }
    }
  }],
  "routing": {
    "rules": [{
      "type": "field",
      "inboundTag": ["data-in"],
      "outboundTag": "tls-out"
    },{
      "type": "field",
      "inboundTag": ["tls-in"],
      "outboundTag": "proxy-out"
    }]
  }
}

PC的CPU一直在30%以下,如果把server也放在PC上跑,各种协议组合的速度都超过3Gbps,所以PC应该不存在瓶颈

badO1a5A90 commented 3 years ago

嗯,PC不是瓶颈就应该没什么额外影响.

Yochee commented 3 years ago

嗯,PC不是瓶颈就应该没什么额外影响.

刚才试了下iperf client加了-R别的都没改,速度一下慢了,xtls-direct大概120出头,别的100不到,有点不能理解

github-actions[bot] commented 3 years ago

This issue is stale because it has been open 90 days with no activity. Remove stale label or comment or this will be closed in 5 days