说到P2P(点对点)的分布式网络通信自然逃不开NAT网络穿透,由于NAT外部的主机无法主动与内部的主机通信,因此内部主机若想要和外部主机通信就必须要主动和外部主机的公网IP通信。路由器会创建外部IP端口到内部IP端口的映射, 并转发数据,这就是NAT的基本工作原理。
因路由器不同的安全策略、不同的限制,也就是说会存在不同的NAT类型。
NAT 类型
NAT一般可以分为两大类:
- 锥形(Cone)
- 对称型(Symmetric)
而锥形根据不同限制又分为:
- 全锥形(Full Cone)
- 受限锥形(Restricted Cone)
- 端口受限锥形(Port Restricted Cone)
所以目前常见的NAT类型共有4种。
锥形nat有一个共同点:只要内网中的(IP,端口)相同的请求会被NAT映射到同一个外网(IP,port)。
对称型NAT的特点: 根据四元组([SIP,DIP,SPORT,DPORT])创建NAT映射,四元组中的任何一项发生变化均导致NAT映射的更换。此形状双方一对一映射,因此被称之为对称NAT
当点对点通信的时候,因存在不同的NAT组合方式,有些组合可以实现NAT穿透,而有些组合不能穿透。
完全锥型 (Full cone NAT)
所有从同一个内网的(IP,端口)发送出来的请求都会被映射到同一个外网(IP,端口),且任何一个外网主机都可以通过访问映射后的公网地址,实现访问位于内网的主机设备功能。
外网主机可以主动连接内网主机。
地址受限锥形NAT (Restricted Cone NAT)
所有从同一个内网的(IP,端口)发送出来的请求都会被映射到通过一个外网(IP,端口),但与全锥形不同点在于:生成的映射表项与目的IP有关,只有符合要求的目的IP(要访问的公网服务器IP)才可以通讯。不能主动连接内网中的主机地址,连接必须由内网主机主动发起连接的公网主机才可与之进行通讯,而不用担心端口号是否与请求的端口相同。
限制比全锥形NAT多了:IP地址限制。
端口受限锥形NAT (Port Restricted Cone NAT)
所有从同一个内网的(IP,端口)发送出来的请求都会被映射到通过一个外网(IP,端口),但是在地址受限锥形NAT(IP限制)基础上增加了端口的限制:除了之前主动连接主机的(IP,端口)可以通讯,其他的(IP2,端口)、(IP, 端口2) 等都不可以与之通讯。此NAT映射与报文的三元组绑定。
对称NAT
所有从同一个内网(IP,端口)发送到同一个目的IP和端口的请求都会被映射到同一个IP和端口。换句话说(SIP,Sport, DIP, Dport)只要有一个发生变化都会使用不同的映射条目,即此NAT映射与报文四元组绑定。
综上
NAT类型 | 说明 |
---|---|
全锥形NAT | 任何公网主机都可与之通讯。双方都可以主动发起 |
地址受限锥形NAT | 只有内网主动连接的公网主机可与之通讯,必须内网主机发起。且此公网主机可通过任意端口与内网主机通讯。 |
端口受限锥形NAT | 只有内网主动连接的公网主机的连接可与之通讯,必须内网主机发起。且此公网只能通过固定的端口与之进行通讯。 |
对称型NAT | 四元组[SIP,DIP,SPORT,DPORT]中的任何一项发生变化均导致NAT映射的更换。 |
NAT组合
NAT是否可以穿透,不能只看一方NAT的类型,要看通信双方NAT的组合类型。
NAT共有10种组合类型,其中只有对称型-端口受限型、对称型-对称型的组合不能穿透:
类型1 | 类型2 | 是否可以穿透 |
---|---|---|
全锥型 | 全锥型 | √ |
全锥型 | 受限型 | √ |
全锥型 | 端口受限型 | √ |
全锥型 | 对称型 | √ |
受限型 | 受限型 | √ |
受限型 | 端口受限型 | √ |
受限型 | 对称型 | √ |
端口受限型 | 端口受限型 | √ |
端口受限型 | 对称型 | x |
对称型 | 对称型 | x |