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

概念

连接,本文用的连接,可以成为socket连接,connection,tcp连接, udp连接等
工作连接通信连接要分开的理解
工作连接是实际用户操作的连接,如ssh通信的流量就走这连接。
通信连接是客户端与服务端的协议通信建立内网穿透的逻辑,里面逻辑就包含工作连接的创建
用户连接是用户发起与服务端的连接
实际业务的连接就是目标程序的连接,如ssh,就是内网22端口的连接,frpc会创建一个tcp连接,连接到22端口

角色

客户端:就是执行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

电脑杂技集团
208 声望32 粉丝

这家伙好像很懂计算机~