内网穿透工具frp的源码解读之概念流程篇

54次阅读

共计 661 个字符,预计需要花费 2 分钟才能阅读完成。

最近学习 go 语言,看完基础和高级篇后,果断拿起一个开源项目看看,于是就找到内网穿透工具——frp,它具体干嘛的,我就不多说,可以自己上官网看看,动手试试。

概念

工作连接 通信连接 要分开的理解
工作连接 是实际用户操作的连接,如 ssh 通信的流量就走这连接。
通信连接 是客户端与服务端的协议通信建立内网穿透的逻辑,里面逻辑就包含 工作连接 的创建

角色

客户端:就是执行 frpc 程序的机子(也就是内网的机子)
服务端:就是执行 frps 程序的机子
用户: 就是外网机子,访问 frps 的机子。

核心流程

  1. 客户端登陆(通信连接)
  2. 服务端建立 controler
  3. 客户端建立 control,发送 NewProxy(通信连接)
  4. 服务端接收到 NewProxy(通信连接),并响应 ReqWorkConn,开始建立与用户的监听,handler 是 HandleUserTcpConnection(server/proxy/proxy.go:235)
  5. 客户端接收 ReqWorkConn(通信连接)
  6. 客户端创建流量连接(与服务端的新连接)
  7. 发送 NewWorkConn 给服务端(流量连接)
  8. 客户端创建与本地的连接(实际业务)
  9. 客户端 join 两个连接(流量连接和本地连接)
  10. 服务端在接收 NewWorkConn,就将该流量连接放入连接池
  11. 服务端接收用户的连接,会调用 HandleUserTcpConnection,该 handler 就是从上面的连接池获取连接,然后 join 用户连接和流量连接。

所谓建立 controler 也是为了创建消费者模式的,readCh, sendCh, msgHandler, manager

正文完
 0