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

最近学习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

你可能感兴趣的:(frp,golang)