NAT(Network Address Translation)是一种广域网的接入技术,将私有地址转换为合法的公共IP地址,能够完美的解决IP地址不足问题,并且还能有效避免来自外部网络的攻击,隐藏并保护网络内部的计算机。html
NAT的功能一般被集成到路由器、防火墙、ISDN路由器或者单独的NAT设备中。后端
1、NAT有三种实现方式:安全
1. 静态转换:即1对1。好处是外部能够访问内部网络;服务器
2. 动态转换:多内部IP对几个外部IP,动态适配。没法实现对网络内部主机的访问;网络
3. 端口多路复用:即PAT,在NAT中保留NAT内部端口的映射,并向NAT外部端口转换,能够实现多对1,也是最经常使用的;多线程
4. 几种方法的组合。好比 动态地址+端口复用:一些FTP网站考虑到服务器性能和Internet链接带宽占用问题,会限制同一个IP地址的多线程访问,此时若是只采用端口复用,形成同一外部IP的多个内部主机同时访问Internet,目的网站有可能禁掉该IP。因此最好采用与动态地址相结合的方案(若是有多个公共IP的话)。socket
2、NAT端口转换的几种方法:性能
1. Full cone NAT:即一对一NAT,一旦一个内部地址(iADDr:port1)映射到外部地址(eAddr:port2),全部发自iADDr:port1的包都通过eAddr:port2向外发送。同时,任意的外部主机都能经过eAddr:port2发包到(即访问)iADDr:port1。网站
2. Address-Restricted cone NAT:一旦一个内部地址(iADDr:port1)映射到外部地址(eAddr:port2),全部发自iADDr:port1的包都通过eAddr:port2向外发送。同时,任意的外部主机都能经过eAddr:port2发包到(即访问)iADDr:port1,但有个前提,即,iAddr:port1以前向该外部主机发过包(外部主机的端口不受限制,即以前发送到的外部主机端口和当下访问内部网络的外部主机端口能够不一样)。ui
3. Port-Restricted cone NAT:与2相似,可是要求外部主机的端口保持一致。
4. Symmetric NAT:内网主机创建一个socket(iAddr:prot0),当用这个socket第一次发送数据给外部主机1时,NAT为其映射一个(eAddr1:port1),若是内网主机同时用这个socket向主机2发送数据,NAT为其分配一个(eAddr2:port2),之后发往主机1和主机2的数据分别使用这两个socket。若是NAT有多于一个公网IP,则eAddr1和eAddr2可能不一样,若是NAT只有一个公网IP,则port1和port2确定不一样,也就是说,必定不能是eAddr1等于eAddr2且port1等于port2。同时,若是任何外部主机向要发送数据给这个内网主机,那它首先应该收到内网主机发送给他的数据,而后才能往回发送,不然即便知道内网主机的一个映射socket也不能发送数据给内网主机。这种NAT没法实现P2P通讯。可是若是另外一方是Full cone NAT的话,仍是能够穿透的。
3、NAT打洞
NAT打洞发生在当两个主机位于不一样的局域网中时,假设分别为A和B,根据几种端口转换方法的特色(除了Full cone NAT),若是没有中间设备(位于外网)辅助的话,A和B永远没法通讯。所以,假设有位于公网的中间服务器S,A和B首先会链接到S,S分别记录A和B通过NAT后的IP和端口,当A想要链接到B时,首先向S发出请求,S把B通过NAT后的IP和端口告诉A,同时向B发送A通过NAT后的IP和端口,并要求B发送数据给A,B发送给A的数据会被A的NAT抛弃,可是B的NAT会有B发送数据到A的记录,此时A再向B发送数据时就会被B的NAT放行。也就是说当A向B发送数据时,惟一的阻碍是NAT_B,要想发送成功,必须先把NAT_B打一个洞,这样NAT_B就会误觉得A发送的数据是上次会话的一部分而不予阻拦。
关于打洞的分析:
1. 以上的分析是针对双方都是2,3,4的情形。只要A或B有一方为Full cone NAT,那么便可实现双向通讯,不须要打洞。
2. 只要两侧NAT都不属于Symmetric NAT,能够打通,也就是说,只要两侧NAT都属于cone NAT,便可双向通讯。
3. 一侧属于Symmetric NAT,而另外一侧属于Restricted cone,能够打通;
4. 一侧属于Symmetric NAT,而另外一侧属于Port-Restricted cone,打不通;(因为Symmetric NAT会使到不一样目的主机的端口不一样,此时C告知B的A的端口不是A真正发往B的端口,同时Port-Restricted cone要求先后端口一致,而其实是不一致的,所以打不通)
5. 两侧都属于Symmetric NAT,打不通。
一般来讲,只有比较注重安全的大公司会使用Symmetric NAT,禁止使用P2P类型的通讯,不少地方使用的都是cone NAT,所以基本都能穿透。
出处:http://blog.csdn.net/woshishuizzz/article/details/8447920
参考:http://wenku.baidu.com/view/6a7892daad51f01dc281f127.html