内网穿透的原理
前言
作为一个开发路上的学习者,经常会开发一些学习项目。但是我们开发的项目需要别人来访问的话,就必须上线到有公网ip的服务器上。当我们没有公网ip的服务器时,就可以使用内网穿透技术来实现在本地运行的项目公网的用户也可以访问到。
公网ip与内网ip
内网ip
内网ip是我们在生活中常使用的ip,它是由局域网的网关所分配的IP地址,也就是说我们平常上网是处于局域网中。每一个内网ip是和局域网网关的端口相映射的。同时在同一个局域网中不同内网ip是可以相互找到对方的,也就是可以直接相互访问的。
公网ip
如果内网中的设备需要访问非同一个局域网的设备,那么就需要使用到公网ip,在下面的图中可以将局域网的网关ip看成公网ip。
NAT技术
NAT技术又称网络地址转换技术,就是要将公网ip进行复用。NAT技术有三种实现方式,分别是静态转换、动态转换、端口多路复用。
静态转换
将内部网络的内网IP地址转换为公网IP地址,IP地址是一对一的,是一成不变的,某个私有IP地址只转换为某个公有IP地址。它的作用是可以实现外部网络对内部网络中某些特定设备(如服务器)的访问。
动态转换
将内网IP地址转换为公网IP地址时,公网IP地址是不确定的、随机的,内网IP地址可随机转换为任何指定的合法IP地址。
端口多路复用
就是将内网ip地址与公网ip地址的某一个端口进行映射。采用端口多路复用方式,内部网络的所有主机均可共享一个合法外部IP地址实现对Internet的访问,这种方式可以最大限度地节约IP地址资源。同时,又可隐藏网络内部的所有主机,有效避免来自internet的攻击。因此,网络中应用最多的就是端口多路复用方式。
内网穿透原理
常用的内网穿透服务有花生壳、ngrok、frp。那么它们的实现原理是什么呢?下图是端口多路复用内网穿透的原理图。
由上图可见,内网穿透的本质是让公网ip地址与内网ip地址建立联系。内网穿透服务通常是使用一台有公网ip的服务器作为请求的中转,从而实现从公网访问内网。内网穿透服务通常是使用一台有公网ip的服务器作为请求的中转,从而实现从公网访问内网。