让我猜猜内网穿透原理

298 阅读2分钟

这是我参与8月更文挑战的第2天,活动详情查看:8月更文挑战

啥是内网穿透

百度百科

内网穿透,也即 NAT 穿透,进行 NAT 穿透是为了使具有某一个特定源 IP 地址和源端口号的数据包不被 NAT 设备屏蔽而正确路由到内网主机。

大白话

就是把原本访问不了内网网络通过某种方式让外网能够访问到 比如说你的手机

你的手机能上网吧,手机访问百度也能查到ip地址吧,但是外网却不能访问你手机的网络

现在我通过内网穿透就可以做到

分析

网上有很多原理图,但是说实话鄙人天资愚钝没咋看懂,在网上疯狂百度和个人的验证之后,得出如下简图 在这里插入图片描述 其实很简单 想让我们内网的服务能被外网访问到,只需要一个能被公网访问的服务器就行

  1. 内网服务器和外网的服务器建立tcp通讯
  2. 用户想访问内网服务器时候,需要先请求外网服务器,外网服务器再将请求的数据原样推送给内网的服务器
  3. 同理当内网服务器要将数据推送给用户,也是原路返回,先给外网服务器,然后外网服务器在将数据给用户

验证

验证过程其实也非常简单,只需要验证下 内网服务器是不是和外网建立了tcp链接就知道了

这里我用的是natapp这个工具是基于 ngrok的 启动之后如图所示 在这里插入图片描述 此时需要知道上文说的外网服务器地址,通过 ping iup4ue.natappfree.cc 就知道了 在这里插入图片描述 这时候打开wireshark 抓包

在这里插入图片描述 ip.dst 是本地内网ip ip.src 是外网服务器地址

这时候只需要在页面随便访问下 http://iup4ue.natappfree.cc/asdasdasdas

此时看 wireshark 应该有如下记录

在这里插入图片描述 在那一行右键 follow->http stream 可以看下如下

在这里插入图片描述 这样就证明了,数据是通过tcp通道传输的