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

黄小数 · · 1409 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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

有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:黄小数

查看原文:内网穿透工具frp的源码解读之概念流程篇

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1409 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传