之前写了一篇关于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. iOS WebviewJavascriptBridge 源码研读笔记
  2. Science论文:诺奖经济学家的经典决策模型,被AI挑战
  3. python3 byte int string 互转 转换
  4. C# 5.0中新增特性
  5. 华为Mate 30系列后摄相机模组曝光:圆形三摄各有不同
  6. 搭建高性能计算环境(七)、应用软件的安装之MS
  7. 爬虫 知识点 总结。
  8. Dockerfile 中的命令
  9. const 和 非const函数重载
  10. bfc -- 块级格式化上下文
  11. Android 广播学习笔记
  12. 虚拟机的三种网络连接方式
  13. 瀚高数据库php连接,HighGo瀚高数据库4.3版本安装说明
  14. td中的块元素居中问题
  15. smartforms设备类型CNSAPWIN不支持页格式ZXXX
  16. Android 欢迎引导页的魅力
  17. Android 真正的3D Gallery
  18. python doc 转docx
  19. 15.正则表达式以及Data以及Calendar
  20. 图像处理之Lanczos采样放缩算法

热门文章

  1. ShowDialog使用
  2. Ubuntu系统配置网络(图文教程)
  3. coredump设置
  4. Java中拦截器与过滤器的区别
  5. 19.Win10安装Linux(Ubuntu 20.04)双系统
  6. Android逆向工具 - jadx 安装使用 和 --show-bad-code查找未成功解析代码
  7. IntelliJ IDEA 2018.2.3破解
  8. 一起来学kafka之Kafka集群搭建
  9. C/C++基础题124.反转链表
  10. 关于Mysql的认识