vless协议

介绍#

vless 是类似于 socks5 协议的一种代理协议,被各大代理软件所使用,我推荐这个版本进行学习
https://github.com/sagerNet/sing-vmess
这个网页进行了简单的介绍,可以在这里了解一下
https://xtls.github.io/development/protocols/vless.html

报文解析#

请求#

版本号 UUID 附加信息长度 M 附加信息 ProtoBuf CMD PORT ATYP DST.ADDR DATA
1 16 1 动态 1 2 1 动态 动态
  • 版本号目前为 0x00
  • CMD 是命令码
    • 0x01 表示TCP转发
    • 0x02 表示UDP转发
    • 0x03 表示MUX
  • ATYP 和 DST.ADDR
    • 0x01 IPv4 地址,DST.ADDR 部分 4 字节长度
    • 0x02 域名,DST.ADDR 部分第一个字节为域名长度,DST.ADDR剩余的内容为域名,没有\0结尾。
    • 0x03 IPv6 地址,16 个字节长度。
  • DATA 是第一次请求的数据,服务器会转发到目的地址

这里的 ATYP 和 socks5 是不一样的

响应#

版本号 附加信息长度 M 附加信息 ProtoBuf DATA
1 1 动态 动态
  • DATA 第一次的响应数据

之后客户端和目的地址就以服务器为中介互相传递数据

附加信息#

sing-box 里面只实现了一种附加信息,就是 flow = xtls-rprx-vision ,报文就是如下

flow 标识符 字符串长度 字符串内容
0x0a 16 xtls-rprx-vision

sing-box 还解析了另一个种附加信息,就是 seed ,标识符为 0x12

udp#

和转发 tcp 的区别是 udp 的报文前会插入 2 个字节的报文大小,之后是 udp 数据