共计 2475 个字符,预计需要花费 7 分钟才能阅读完成。
需要剖析
微信公众号的开发过程中,微信服务器和我的项目的后端会互相发送信息。如果须要测试,就必须保障我的项目能够被公网拜访,但大多数状况下家庭网络都是通过了运营商层层 NAT 之后的网络,并没有公网 IP,此时就须要应用内网穿透来解决“公网拜访”的问题。
实现内网穿透后,就能够在微信的公众号页面设置 URL 到本人的我的项目上了。
“为什么我的电脑不能被公网拜访到?”
晚期的互联网的总设施量还没有那么多,运营商的确会给每个用户都调配一个公网 IP,大家都在公网上其乐融融。
但随着设施减少,IPV4 的地址池行将耗尽,运营商不得不缩小 IP 地址的应用来让互联网包容更多的设施,NAT 技术实现了节俭 IP 地址的目标。
NAT
NAT 全称“网络地址转换”,它容许局域网内的一系列设施应用同一个公网地址发送数据,而路由器会记录下转换的过程,并在收到公网的返回之后依据之前的记录转发给内网。
具体的转换过程是:内网地址 + 端口 <–> 外网地址 + 端口,如图:
① 当位于局域网 192.168.1.100 的电脑 1 想拜访公网服务器 39.100.100.100 的 Web 端口 8080 时,因为它不晓得服务器的具体位置,所以向它的网关(路由器)所在的 192.168.1.1 发送申请(Request)(这个申请会随机从一个闲暇的高位端口收回,如 27777)。
② 路由器一侧连贯公网(WAN),一侧连贯内网(LAN),当路由器收到申请(Request)后,因为路由器晓得服务器的地位,所以会把数据转发进来,但内网数据包不容许在公网上转发,于是数据会被转化成源地址是公网的地址的数据包,也就是把申请头变成路由器的公网地址 122.122.122.122,并且随机应用一个闲暇的高位端口,如 60000。
③与此同时,路由器会记录下内网到外网的转换关系,也就是 192.168.1.100:27777<—->122.122.122.122:60000,如果前面服务器向 60000 端口返回数据,路由器就晓得这个数据应该返回给电脑 1 所在的 192.168.1.100。在电脑 1 和服务器的连贯断开之前,这条映射规定不会生效。
④ 服务器收到数据包后,它只晓得发送人是位于 122.122.122.122 的路由器,并不知道真正的发送者,所以返回(Response)数据也会发送到路由器的公网地址 122.122.122.122
⑤路由器收到服务器的 Response 后,通过查看 NAT 表晓得,这个数据应该返回给电脑 1,所以把 Response 发送到 192.168.1.100
这样就实现了一次申请和返回,当连贯断开一段时间后,NAT 表的记录生效。
但 NAT 的原理就决定了它有一个问题:公网无奈被动向内网发动申请,这就导致了家里的电脑无奈做服务器。
如图:
① 如果公网电脑被动向路由器发动申请(Request)
② 路由器查问 NAT 表之后发现并没有记录,因而不晓得转发给哪一台内网机器,数据被抛弃。
看到这里读者可能会想,既然能通过 NAT 表实现长期的端口对端口的映射,并且来自公网的 Response 能够转发回来,那么有没有一种办法,能实现一种“短暂的”端口映射,这样公网服务器是不是能够通过特定的端口来被动连贯内网服务器呢?
的确是能够的,而这种形式叫做端口转发,用一个固定的“端口转发表”来记录永恒的转发规定
端口转发
如图:
①在路由器中设置好规定:将公网的 60000 端口映射到内网电脑 1 的 8080 端口
②服务器向路由器发动申请时,发送到 122.122.122.122 的 60000 端口
③路由器通过端口转发表,晓得了该把数据发送到 192.168.1.100 的 8080 端口
④路由器把数据发给电脑 1
通过这么一通操作,咱们能够了解成,端口转发把电脑 1 的 8080 端口变成了“公网上的端口”
DMZ
还有一种非凡的端口转发叫做 DMZ,它能够了解为“所有端口都转发”,也就是只有有来自公网的申请,全副都转发给电脑 1
那么为什么我用了端口转发还是不能被公网拜访到呢?
上文的例子是一个现实状况,它的前提在于:路由器是本人家里装置的,并且运营商给路由器调配的地址是公网地址,换言之,只通过了路由器这一层 NAT
但理论的状况是,在家庭宽带连贯到路由器之前,运营商就曾经进行了好几层 NAT 了,也就是说,或者一个小区通过 NAT 共用了一个 IP 地址,再换句话说,达到我家的网络,曾经是一个内网地址了。如图:
所以这种状况再应用端口转发就没有意义了,咱们能够冲破家里路由器的 NAT,但无奈冲破运营商的 NAT。
除非咱们能管制运营商的路由器,在他们的路由器上,一层一层的设置转发规定,直到最外层的路由器,但这并不可能。
所以就有了内网穿透的办法
内网穿透的原理
内网穿透须要借助一台在公网上的电脑(这台电脑的作用就是转发数据,咱们称为跳板机),实质上是应用内网电脑连贯到跳板机,建设长连贯(长连贯的作用是保障 NAT 表始终无效),并实现端口的一一映射,当其余设施须要拜访内网电脑时,只须要拜访到咱们的跳板机,由跳板机转发到内网机器,如图:
①内网电脑启动内网穿透,被动连贯到位于公网 180.2.2.2 的跳板机
②连贯过程中,路径的各级路由器都会产生 NAT 规定,并且因为行将造成长连贯,这个 NAT 规定不会生效
③内网电脑和跳板机握手后造成了长连贯,也就是始终抓住一直开,此时单方都能够随便向对方发送数据,
此时咱们能够设置一份规定,只有有人向跳板机的 8080 发送数据,跳板机就向内网机器的 8000 端口发送数据
④如果有其余电脑想拜访内网机器,只须要连贯 180.2.2.2 的 8080 端口
⑤跳板机沿着隧道把申请转发到内网上
⑥内网机器解决完之后,会把返回的数据发送到跳板机上
⑦跳板机会把数据返回给发动申请的电脑
这样就实现了从公网被动向内网发动申请。
总结
什么是内网穿透:在公网上部署一个负责转发的跳板机,与内网主机进行长连贯,当其余设施拜访跳板机时,跳板机将数据转发到内网主机,实现内网穿透
为什么应用内网穿透:① IP 地址池无限 ② NAT 技术使得外网无奈被动向内网发动申请 ③端口转发不适用于多层 NAT 的状况
多看看上文的几张图片,能够有更好的了解。