内网穿透的说明
内网穿透,即NAT穿透,网络连接时术语,计算机是局域网内时,外网与内网的计算机节点需要连接通信,有时就会出现不支持内网穿透。就是说映射端口,能让外网的电脑找到处于内网的电脑。不管是内网穿透还是其他类型的网络穿透,都是网络穿透的统一方法来研究和解决。
NAT技术
NAT技术是通过将专用的网络地址转换为公用地址,从而对外隐藏了内部管理的IP地址。这样,通过在内部使用非注册的IP地址,并将它们转换为一小部分外部注册的IP地址,从而减少了IP地址注册的费用以及节省了越来越缺乏的地址空间。同时,这也隐藏了内部网络结构,从而降低了内部网络受到攻击的风险。NAT的功能就是在内部网络的私有地址需要与外部通信时,把内部私有地址转换成合法的全局IP地址。NAT可以在两个方向上隐藏地址,为了支持这种方案,NAT在两个方向上都要翻译原地址和目的地址。NAT的功能通常被集成到路由器、防火墙等设备中。NAT设备维护一个映射表,用它来实现全局到本地和本地到全局的地址转换 [2] 。
NAT有三种类型:静态NAT(StaticNAT)、动态地址NAT(PooledNAT)、网络地址端口转换NAPT(Port-LevelNAT)。
其中,网络地址端口转换NAPT(NetworkAddressPortTranslation)则是把内部地址映射到外部网络的一个IP地址的不同端口上。它可以将中小型的网络隐藏在一个合法的IP地址后面。NAPT与动态地址NAT不同,它将内部连接映射到外部网络中的一个单独的IP地址上,同时在该地址上加上一个由NAT设备选定的端口号。
NAPT是使用最普遍的一种转换方式,在HomeGW中也主要使用该方式。它又包含两种转换方式:SNAT和DNAT。
(1)源NAT(SourceNAT,SNAT):修改数据包的源地址。源NAT改变第一个数据包的来源地址,它永远会在数据包发送到网络之前完成,数据包伪装就是一具SNAT的例子。
(2)目的NAT(DestinationNAT,DNAT):修改数据包的目的地址。DestinationNAT刚好与SNAT相反,它是改变第一个数据懈的目的地地址,如平衡负载、端口转发和透明代理就是属于DNAT。
SOCKET介绍
套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP地址与端口的组合。
内容过多,这里不在过多的赘述,《Socket的学习(一)什么是Socket?》这篇有很全面的介绍,包括TCP/IP网络协议的介绍,这也是实现网络穿透的一个保证,即不考虑网络连接情况将数据内容进行完全转发,协议的解析等工作与直连方式不变。 在不考虑网络连接带来的IP变化的情况,可以将内容进行完全转发,协议的解析等工作与直连方式不变;也可以将协议通过解析后,再根据目标的协议进行组装,如HTTPS协议转HTTPS协议。
穿透思路
因NAT网内CLIENT可以正常连接到SERVER端,并且能够保持一段时间的长连接,则由CLIENT发起连接,建立SOCKET对,在SERVER收到外部请求时,可以通过已经建立好的SOCKET将数据传输给CLIENT,CLIENT使用相同的方式将数据发送给指定的网络程序,网络程序回发数据后则按原路返回给请求方。