NAT类型与穿透
NAT类型
此处的NAT是指NAPT这种类型,首先简单说明一下NAT的流程
NAT流程
A: 局域网内的主机,没有公网地址
R: 局域网的路由
B: 有公网地址的主机
以下为A主动和B建立TCP连接的流程
A访问B,通过路由表获得下一跳需要发到R
(A_ip, A_port, B_ip, B_port): A->R
R将根据A_ip和A_port一一映射到R的一个端口
(R_ip, R_port(A_ip, A_port), B_ip, B_port): R->B
B返回数据给R
(B_ip, B_port, R_ip, R_port): B->R
R通过返回包的端口发回给A
(B_ip, B_port, A_ip, A_port): R->A
NAT类型
通过上面的流程可以知道当A的A_port访问B的B_port时会在R中留下一个映射关系,之后可以通过R_port可以找到内网对应的A_ip和A_port,完成转发.
NAT的分类均是在A访问B之后R_port存在的情况
全锥形(Full Cone)
如果主机C访问R_port,路由依然将数据发给R_port对应的主机,此时NAT为全锥形NAT,可以将R_port看作锥体的顶点,网络拓扑就像一个锥子一样
限制锥型(Restricted Cone)
C访问R_port路由不转发数据到对应的主机,但是B主机的B_port2(B_port2与B_port不同)访问R_port时转发,此时为限制锥型NAT.在A主机的A_port在向C主机发过数据后,B,C都可以通过访问R_port到A的相应端口,因为R_port只与A_ip和A_port有关,所以R_port不会变
端口限制锥型(Port Restricted Cone)
与限制锥型类似,只是B主机的B_port2直接访问R_port也不能转发,只有A主机向B_port2发过数据后才可以通过R_port访问
对称型(Symmetric)
对称型与前面的最大的区别是在于R_port(A_ip, A_port)的映射规则,三种锥型的R_port只与A_ip和A_port有关,而对称型的R_port(A_ip, A_port, B_ip, B_port)与出口地址也有关,其中任何一个变化对应的R_port也会变化
NAT穿透
4种NAT总共有类型,除了(对称型,对称型)和(对称型,端口限制锥型)以外都可以通过STUN协议进行穿透