liudf0716 / rust-frp-client

frp client implemented with rust language

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

rust-frp-client

用rust语言实现的frp客户端

frp协议详解

将frp协议分为两个阶段: 连接阶段,服务阶段

连接阶段

Note 实线代表明文,虚线代表密文,本流程图默认配置只有控制连接加密,工作连接不加密(可配置)

sequenceDiagram
	title:	连接阶段
	participant frpc as frp客户端
  participant frps as frp服务端
  
  frpc ->> frps  : TypeLogin Message
  frps ->> frpc  : TypeLoginResp Message
  Note right of frps  : 根据Login信息里面的pool值,决定给xfrpc发送几条TypeReqWorkConn请求信息
  frps ->> frpc  : frps aes-128-cfb iv[16] data
	loop 根据Login中的PoolCount创建工作连接数
		frps -->> frpc : TypeReqWorkConn Message
  	frpc ->> frps  : TypeNewWorkConn Message
  	Note left of frpc  : 与服务器创建代理服务工作连接,并请求新的工作连接请求
  	Note right of frps  : 处理xfrpc端发送的TypeNewWorkConn消息,注册该工作连接到连接池中
	end
  frpc ->> frps  : xfrpc aes-128-cfb iv[16] data
  loop 用户配置的代理服务数
  	frpc -->> frps : TypeNewProxy Message
  	frps -->> frpc : NewProxyResp Message
  end
	
  loop 心跳包检查
    frpc -->> frps : TypePing Message
    frps -->> frpc : TypePong Message
  end

服务阶段

sequenceDiagram
	title:	 服务阶段
	actor l_svc as 本地局域网应用服务
	participant frpc as frp客户端
  participant frps as frp服务端
  actor user as 互联网远程访问用户
  
  user ->> frps : 发起访问
  frps ->> frpc	: TypeStartWorkconn Message
	frpc -> l_svc	: frp客户端与本地局域网应用服务创立连接
  loop  远程访问用户与本地服务之间的交互过程
		user ->> frps 	: 用户访问数据
    frps ->> frpc   : 用户访问数据
    frpc ->> l_svc  : 用户访问数据
    l_svc ->> frpc  : 本地服务返回数据
    frpc ->> frps   : 本地服务返回数据
    frps  ->> user  : 本地服务返回数据
  end
  user ->> frps		: 断开访问服务
	frps ->> frpc 	: 断开访问服务
	frpc -x l_svc 	: 断开frp客户端与本地局域网应用服务的连接

About

frp client implemented with rust language

License:Apache License 2.0


Languages

Language:Rust 100.0%