40 lines
1.9 KiB
Protocol Buffer
40 lines
1.9 KiB
Protocol Buffer
//Relay-Based Connection Upgrade (RBCU) 是通信流程中的一个步骤。它通过中继路径确保基础通信的可用性,并在此基础上,尝试升级到更高效的直连(P2P)方式。
|
||
|
||
//## RBCU 流程
|
||
//前提:1. 已建立的中继连接, 2. 可以获取自己socket对应的外网地址端口(STUN或其他)。
|
||
//设定主动方为A,被动方为B
|
||
//1. 【基于中继】A获取地址列表,形成RbcuInfo发送到B,并等待RbcuInfo。
|
||
//2. 【基于中继】B收到RbcuInfo,将自己的地址列表形成RbcuResp作为响应。
|
||
//4. 【基于UDP】AB向对方的地址列表发送RbcuProbe
|
||
//5. 【基于UDP】AB收到RbcuProbe则认为直连成功,并回复RbcuConfirm
|
||
// 参阅:https://docs.star-lock.cn/zh/starchart/rbcu
|
||
|
||
syntax = "proto3";
|
||
package main;
|
||
option go_package = "./spb/rbcu";
|
||
|
||
// RbcuInfo 地址交换
|
||
message RbcuInfo {
|
||
string SessionId = 1; // 随机UUID,用于匹配接下来的打洞会话
|
||
string Name = 2; // 用于标识自己的名字
|
||
repeated string Address = 4; // 地址+端口 列表
|
||
uint64 Time = 5; // 开始时间戳
|
||
bool isResp = 6; // 是否是响应, 如果是响应,就不用回复了, 第一个发起的人这里传false,后续收到并发出的人这里传true
|
||
}
|
||
|
||
// RbcuProbe 万箭齐发
|
||
message RbcuProbe {
|
||
string SessionId = 1; // RbcuInfo的UUID,用于匹配
|
||
string Data = 2; // 100字节随机数据,因为有些防火墙会拦截小包(空白也行,但是会被pb压缩,所以最好填充随机或顺序数据)
|
||
string TargetAddress = 3; // 目标地址,例如这个包我发往192.168.1.2:9000 那么这个字段就是192.168.1.2:9000
|
||
}
|
||
|
||
// RbcuConfirm 连通确认
|
||
message RbcuConfirm {
|
||
string SessionId = 1; // RbcuInfo的UUID,用于匹配
|
||
string ProbeAddress = 2; // 地址+端口 从RbcuProbe里面取的TargetAddress
|
||
string ReceiveAddress = 3; // 地址+端口 收到RbcuProbe的来源地址(udp_read()函数的返回值)
|
||
}
|
||
|
||
|