之前写了一篇关于GVP开源项目FastTunnel的一篇介绍 《FastTunnel-开源内网穿透框架》,只简单介绍了使用方法,不少伙伴对其原理表示好奇,今天画抽空了一下其内部实现原理流程。
不知道其他穿透软件实现是什么样子的,FastTunnel是于2020年开始编写,经过几次尝试,最终采取一种实现方案,自认是最容易理解和去实现的。

FastTunnel内网穿透实现原理图

揭开内网穿透的神秘面纱

1270端口为http监听端口,1271为客户端通信端口

  1. 客户端登录,将子域名web1注册到服务端,此socket一直保持在线,维持客户端和服务端的连接
  2. 服务端收到注册请求,创建Map集合,进行登记,此时登录完成,后面该客户端不断发起心跳互相检测
  3. 此时用户发起一次Http请求到1270端口,socket1
    • 监听1270端口的Socket收到该请求,并为该次http请求分配全局唯一的guid,后面会用到guid;
    • 读取socket1所有header,解析host内容,解析为web1.abc.com,去查找哪个客户端注册了这个host,找不到,则客户端不在线,否则对客户端发送Swap指令,表示通知该客户端,有人要请求你内网的服务啦,请求的域名为web1;
    • 本次请求保存到一个KV集合中,等待客户端建立Swap连接
    • 客户端收到Swap指令,创建2个临时socket分别连接本地服务SokcetY和服务端1271端口SocketZ,SocketZ连接后发送一条Swap应答指令携带guid,服务端收到此应答便知道该scoket是用于数据交换的
    • SocketY与SocketZ开始接收数据,并把接收的数据互相发给对方
  4. 服务端收到Swap应答请求,根据guid查找KV集合,寻找等待接收响应数据的Sockt1,一旦找到,Socket1将与SocketZ进行数据互相转发。
  5. Socket1接收到SocketZ发来的内容,根据第5步我们知道了,SocketZ发来的内容为SocketY给发的内容,而SocketY的内容来自内网服务,经过两次数据转发,浏览器最终得到了来自内网站点的数据。
  6. 端口转发的实现不做介绍,其原理与以上类似。

本实现或许不是最好的实现,但是这种是我感觉最好实现和理解的一种方案,如果你有更好的实现方案,欢迎一起交流。通过以上的原理介绍,再读FastTunnel源码应该十分顺畅,项目还有很多地方需要优化,欢迎大家一起进行完善,打造.net平台最优秀的内网穿透工具。

仓库地址

FastTunnel-GitHub
FastTunnel-Gitee
SuiDao(免费使用内网穿透)

走过路过的点个star支持一下

有兴趣的可加qq群

声明

开源项目及文章皆为原创内容,转载或摘抄请附 原文链接

FastTunnel-内网穿透原理相关推荐

  1. 内网穿透原理和实现思路介绍

    内网穿透技术,简单理解就是将内网的服务映射到公网中,这样可以随时随地访问. 那什么是内网?什么是公网?先从这个基本概念来简单介绍吧 1. 公网.内网和外网 首先声明,公网.内网和外网这几个概念,不是专 ...

  2. ngrok内网穿透原理分析和实现

    转载: ngrok内网穿透原理分析和实现 在互联网终端急剧增长的今天,公网ip已经成为稀缺资源,对于国内垄断的电信运营商来讲,更是不可能随便免费给你一个公网ip,许多家庭宽带都无法分配到 公网ip,又 ...

  3. frp内网穿透原理及配置应用

    1 Frp介绍 frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP.UDP.HTTP.HTTPS 等多种协议.可以将内网服务以安全.便捷的方式通过具有公网 IP 节点的中转暴露到公网. ...

  4. 内网穿透原理,以及用花生壳实现内网穿透

    在做自学项目部署nginx的时候,nginx部署在阿里云服务器上,项目在本地,阿里云的nginx无法访问到本地的ip,所以需要做一下内网穿透.记录一下 什么是内网穿透? 内网和外网的概念: 内网:即所 ...

  5. 大白话告诉你内网穿透原理和验证

    内网穿透到底干啥的这里不做详述,这篇文章主要是讲这玩意怎么做的 分析 网上有很多原理图,但是说实话鄙人天资愚钝没咋看懂,在网上疯狂百度和个人的验证之后,得出如下简图 其实很简单 想让我们内网的服务能被 ...

  6. FastTunnel Win10内网穿透实现远程桌面

    目录 一.需求 二.购买公网服务器 三.远程公网服务器 四.FastTunnel 的使用 1.下载 FastTunnel 2.启动服务器端 3.启动客户端 五.测试 六.安装服务 结束 一.需求 Fa ...

  7. 内网穿透实现原理及三种实现方式

    1.操作系统 Deepin - 基于Linux的开源国产操作系统(软件生态好,缺点不够流畅) 官网 Ubuntu | 全球领先的用于个人电脑.平板及手机的操作系统 我使用的版本 Ubuntu乌班图-桌 ...

  8. ZEROTIER ONE实现内网穿透

    原文链接:https://post.smzdm.com/p/741270/ 原文链接:https://www.jianshu.com/p/77abb0a64a82 传统的内网穿透: 内网设备<- ...

  9. 手把手教你内网穿透(Windows环境)

    内网穿透原理知识 一.传统NAT穿透 传统的NAT技术是通过将专用的网络地址(如企业内部网Internet)转换为公用地址(如互联网Internet),从而对外隐藏了内部管理的IP地址.这样,通过在内 ...

  10. 树莓派mjpg-streamer+内网穿透

    树莓派mjpg-streamer+内网穿透 一.背景 二.你需要的材料 三.视频传送 四.内网穿透 五.应用及效果 一.背景 我相信很多小伙伴和我一样,对物联网很感兴趣,就算你的专业.工作不是物联网方 ...

最新文章

  1. java list合并_Java流系列之第2部:使用流执行聚合
  2. 单目3D人脸重建DECA
  3. 【机器视觉】机器视觉博客汇总
  4. 前端学习(2632):vuex刷新丢失
  5. CentOS 安装OciLib 4.2.1 (Linux)
  6. cadence导入dxf文件_DXF如何导入为图纸?
  7. python现有两个磁盘文件a和b_有两个磁盘文件a和b,各存放一行字母,今要求把这两个文件中的信息合并...
  8. ceph的读写性能测试
  9. 模块化(1):基本思路
  10. 网上开零食店3个月销100万的传奇创业
  11. 常用视频接口线头介绍
  12. 安徽庐江:副副春联送祝福 浓浓墨香迎新春
  13. 班长投票小程序的java代码
  14. MacBook 快捷键
  15. 2020-10-23 集合+序列化+递归+多线程+泛型+枚举+单例+反射小记
  16. dsa数字签名算法_密码学中的数字签名算法(DSA)
  17. 【附源码】Python计算机毕业设计时事新闻管理系统
  18. 不会玩可别说节日营销过气了
  19. 英语学习利器,后悔后知后觉了--------------------韦氏三宝
  20. 2021年熔化焊接与热切割复审考试及熔化焊接与热切割作业模拟考试

热门文章

  1. Qt—QTableView
  2. kali2.0 msf连接数据库及启动armitage
  3. Maven中的groupId和artifactId分别是什么
  4. ⭐算法入门⭐《二叉树 - 平衡二叉树》简单01 —— LeetCode 110. 平衡二叉树
  5. 海思3516A开发板调试整理(三)
  6. 节点流(文件流)|字符流和字节流
  7. Centos中的lvm创建和扩容
  8. 非root账号切换到root修改root密码
  9. python-opencv人脸检测和识别实现(有代码和资源)
  10. python安装tkinter_Python GUI开发初步——安装和使用Tkinter | 学步园