NAT网络类型 打洞

2020-07-06  本文已影响0人  再凌

1. 对称型NAT

对称型NAT 将内网和外网的IP一一对应, 常用于电信系网关.

特征: 即使同一个设备的同一个进程向外网访问, 也会得到不同的IP和端口

2. 锥形NAT

2.1 完全锥形NAT

常见于家用路由器.

内网某{IP, 端口}会被映射成一个固定的{IP, 端口}地址. 即使是第三方外网程序访问之, 也可以成功.

2.2 限制锥形NAT

2.2.1 限制IP型NAT

相比于2.1的完全锥形NAT, 这里路由器会查询NAT表, 如果外网访问进来的数据包在自己的NAT表中没有记录, 则不能访问.

2.2.2 端口限制NAT

相比于IP限制型NAT, 端口限制NAT额外又限制了端口, 即, 对方的端口也要和我NAT表中记录的一样才能访问内网.


NAT 穿越技术

这里主要讨论的是完全锥形NAT

UDP最适合打洞, 只要服务器提前给路由器打出洞后, 其他设备/程序就可以直接利用这个"洞"

更高级的处理方式是利用UPnP技术, 提前向路由器告知要使用的映射端口. 即, 外网对这个{地址, 端口}的访问要交付给某个{地址 端口}.
不过当前应用前景不是很明亮, 因为其十分依赖于路由器是否支持UPnP

TCP也能够打洞, 不过过程比较繁琐.

假设两个节点A,B 分别位于自己的NAT_A和NAT_B之后,两者想直接建立关系, 都需要先访问中间服务器.

  1. 服务器收集NAT_A和NAT_B的{地址, 端口}信息,并告知节点A
  2. 节点A构造一个TTL很小的TCP数据包, 目的地址为NAT_B. 这个TTL使得数据包能够穿越NAT_A却到达不了NAT_B, 因此中间被丢弃(但是已经在NAT_A建立了NAT表项). 节点A还要记录这个TCP数据包的seq_num值, 通过中间服务器或者UDP打洞告诉节点B
  3. 节点B伪造一个TCP的SYN数据包 , 该包源地址为{NAT_A}, 目的地址为{节点B}
  4. 当自己收到这个SYN的时候, 会生成一个ACK返回
  5. NAT_B为这个ACK建立了NAT表, 成功打洞
上一篇 下一篇

猜你喜欢

热点阅读