udp内网穿透讲解及代码实现
① 内网穿透是什么意思
内网穿透原理说起来很简单,就是A客户端要访问B客户端,通过一台服务器进行桥接,桥接有两种方式,一种是相互转发,另一个是告诉对方的地址,自己就当一个介绍人的角色。
需要内网穿透的地方有很多,比如大环境下很多公司或者家庭网络并无固定的公网IP,由于国内IP资源有限,有的运营商并不会分配公网IP,都是运营商的局域网IP,这个时候动态解析就不起作用,只能使用内网穿透,还有一种情况就是既有公网IP,应用也在一级网络,但是没有办法使用80或者443端口,这个时候不能使用动态解析,只能使用内网穿透,就拿国内做的最好的两个厂家神卓互联和花生壳来说,七实现方式基本一致,都是通过公网的一台服务器,给用户分配一个公网地址和端口号,
② 内网穿透的问题介绍
利用P2P点对点技术实现,需解决的两个问题。
1.实现内网之间机器的网络通信。
2.需要解决UDP出现的数据传输不稳定问题。
假设一台在NAT211.133.*后的192.168.1.77:8000要向NAT211.134.*后的192.168.1.88:9000发送数据,假设你向211.134.*这个IP地址的9000端口直接发送数据包,则数据包在到达NAT211.134.*之后,会被当做无效非法的数据包被丢弃,NAT在此时相当于一个防火墙,会对没有建立起有效SESSION的数据包进行拒绝转递。当然,你也不能直接用内网地址192.168.1.88进行发送数据包,这就好比你在广州要打电话到上海的某个地方,如果你不加区号,直接拨打区域内电话是件很愚蠢的事。
首先我们要认识NAT设备,NAT英文全拼是Network Address Translator(网络地址转换器),说白了就是凡是经过NAT发出去的数据包,都会通过一定的端口转换(而非使用原端口)再发出去,也就是说内网和外网之间的通信不是直接由内网机器与外网NAT进行,而是利用内网对外网的NAT建立起SESSION与外网NAT的SESSION进行。
根据SESSION的不同,NAT主要分成两种:SymmetricNAPT以及CONE NAPT。简单的说,Symmetric NAPT是属于动态端口映射的NAT,而CONE NAPT是属于静态端口映射的NAT。而市场上目前大多属于后者,CONE的意思就是一个端口可以对外部多台NAT设备通信。这个也正是我们做点对点穿透的基本,是我们所希望的,否则现在的大部分点对点软件将无法正常使用。
像上面的例子,NAT211.133.*和NAT211.134.*之间需要进行通信,但开始不能直接就发数据包,我们需要一个中间人,这个就是外部索引服务器(我们假设是211.135.*:7000),当NAT211.133.*向211.135.*:7000发送数据包,211.135.*:7000是可以正常接收到数据,因为它是属于对外型开放的服务端口。当211.135.*:7000收到数据包后可以获知NAT211.133.*对外通信的临时SESSION信息(这个临时的端口,假设是6000会过期,具体的时间不同,但我个人的测试是每30秒发送一个心跳包keep住连接以保证端口维持住通信连接不断开),索引服务器此时应将此信息保存起来。而同时,NAT211.134.*也在时刻向索引服务器发送心跳包,索引服务器就向NAT211.134.*发送一个通知,让它向NAT211.133.*:6000发送探测包(这个数据包最好多发几个),NAT211.134.*在收到通知包之后再向索引服务器发送反馈包,说明自己已经向NAT211.133.*:6000发送了探测包,索引服务器在接收到反馈包之后再向NAT211.133.*转发反馈包,NAT211.133.*在接收到数据包之后再向原本要请求的NAT211.134.*发送数据包,此时连接已经打通,实现穿透,NAT211.134.*会将信息转发给192.168.1.88的9000端口。
对于Symmetric NAPT的情况,网上有人说可以通过探测端口的方式,不过成功率并不高,我建议可用服务器进行中转。另外,最好在数据包发送前先检测是否进行的是同个NAT的情况,也就是内网发内网,如果是,直接发送即可,而无需通过外网再绕回来。
其次关于第二点,解决UDP传输的不稳定问题,其实这里涉及到另一个方面的知识,就是滑动窗口的东西,可以开一个缓冲区用于循环接收数据以及重组,另外加上超时重发机制以及确认发送机制,有点像TCP的传输原理,不过如果处理的好,效率绝对比采用TCP的方式要高。
③ 内网穿透的几种简单实用的穿透方式
实际工作和生活中,常常遇到以下问题:如何让任何地方都能访问自己家里的笔记本上的应用?如何让局域网的服务器可以被任何地方访问到?对于没有公网 IP 的内网用户来说,远程管理或在外网访问内网机器上的服务是一个问题有很多类似的需求,我们可以统一用一个解决方案:内网穿透软件和工具。下面介绍一种免费的内网穿透的方式,供大家学习和参考。具体的内网穿透教程可以向我索要。《网云穿内网穿透》是一款便捷,免费的内网穿透及端口映射软件,无需服务器,无需设置路由器,不需公网ip,不需固定ip,即可对外发布应用,支持远程桌面,支付调试,NAS云盘,游戏联机等都可使用,支持Http,Https,Tcp,Udp协议,不需动态域名,用户可免费添加多个映射,适合在公司,小区宽带,出租屋,校园网,教育网等网络结构复杂,限制严格的环境中使用。