WebRTC学习(1)-NAT

NAT

NAT(Network Address Translation,网络地址转换),主要用户将内网中(ip+端口)二元组在网关上映射成成合法的公网(ip+端口)二元组。

此时其它主机就可以通过映射成的公网地址和内网的主机通信了。

NAT 作用

  • 为了解决IPv4地址不足的问题,内网可以很多台主机,在内网中有自己的ip地址,但映射到外网可能只有少部分地址,通过端口号区分每一台主机,这就减少了公网ip地址的使用。
  • 安全原因,对于内部的主机没有外网的ip地址,则外部的主机很难攻击到内网的主机。

NAT分类

  • 完全锥型NAT(Full Cone NAT)
  • 地址限制锥型(Address Restricted Cone NAT)
  • 端口限制锥型(Port Restricted Cone NAT)
  • 对称型NAT(Symmetric NAT)

完全锥型

内网中某台主机,经过NAT映射,形成了外网的(IP+port)。此时,所有外网的主机只要知道了该外网的(IP+port)就可以向这个地址发送数据,无限制,安全性低。

i1+p1
i2+p2
私网
NAT
主机A
主机b
主机C

地址限制锥型

针对完全锥型的安全性低下问题,有了一个对IP进行限制的NAT类型。
当内网中发送消息出去时,会记录目标主机的IP地址,当有数据包接受到时,来源必须是原来发送数据的目标地址,才能放行,否则直接丢掉。

i1+p1
i2+p2
i3+p3
i4+p4
不通
不通
私网
NAT
主机A
主机b
主机C

端口限制锥型

在地址限制的前提下,对端口进行了限制,发送数据时,除了记录目标IP外,还要记录目标端口号。
当接受到的数据包的源IP和源端口和之前的目标主机的信息一致时,才能放行。

i1+p1
i2+p2
i3+p3
i4+p4-不通
i3+p3
不通
不通
私网
NAT
主机A
主机b
主机C

对称型NAT

经过NAT转换的时候,内网主机出内网时,会形成多个(ip+port)的二元组。
这就更加严格了。

i1+p1
i2+p2
i3+p3
不通
私网
NAT
D
E
主机C

NAT类型检测

前提:需要准备一个公网服务器且绑定了两个公网(i1, i2),并且该服务器监听了UDP(i1, p1)(i2, p2)

  1. 客户端发送一个UDP(i3,p3)请求到服务端(i1,p1),等待服务端发送同样的ip地址和端口的响应
  2. 如果接收不到数据,则表示UDP是不通的,没意义了,结束
  3. 收到以后,可以拿到客户端出口的公网IP和端口(i4, p4)
  4. 如果(i4, p4) == (i3, p3)则表示客户端不在nat后
  5. 接下来再发送一个UDP(i3,p3)请求到服务器(i1,p1),让服务器通过(i2,p2)返回数据报
  6. 如果能收到,则肯定为完全的公网地址 结束
  7. 如果不能收到,则说明在对称防火墙之后 结束
  8. 承接3,如果(i4, p4) != (i3, p3)则说明客户端是在NAT之后,接着开始判断类型
  9. 发送UDP(i3,p3)请求到服务端(i1,p1),接着服务端使用(i2,p2)返回一个报文
  10. 如果客户端能接受到报文,则说明客户端是完全锥型 结束
  11. 否则继续判断,客户端向服务端的(i2,p2)发送UDP报文,然后接收到报文,拿到客户端出口的公网IP和端口(i5,p5)
  12. 如果(i5,p5) != (i4,p4)则说明客户端是对称型 结束
  13. 如果一致,则肯定是限制型的,但需要继续区分IP限制还是端口限制
  14. 客户端继续向服务端(i1, p1)发送报文,但服务端回复的时候使用(i1,p2)这样相同的IP不同端口
  15. 如果不能接受到,则是端口限制型 结束
  16. 如果能收到,则是IP限制型 结束

NAT穿越

步骤

A,B进行穿越

  1. A,B向STUN服务发送消息
  2. 此时STUN可以获取到双方的公网IP和port以及nat类型,然后就可以进行公网IP+port交换了
  3. 交换完以后,就可以根据NAT类型进行穿越
    • 如果有一方是完全锥型,那么另外一方可直接和完全锥型一方的公网(IP+port)通信即可
    • 如果有一方是IP受限型,此时另一方必须请求IP受限方,让自己映射的公网IP地址在受限所在的网关上,这样就可以实现p2p了。
    • 端口受限型和IP受限型相似,但不能和对称型打通
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值