注:以下图片来自慕课网,侵权可删
NAT (Network Address Translator)
我们生活中大部分主机都在网关之后,他有自己的内网IP地址,并不知道自己的外网IP
在网关上有个NAT功能,可以将内网地址映射成外网地址
他就是一个四元组,经过映射后,将内网IP和端口映射成外网IP和端口,其他主机就可以通过公网IP地址通信了
STUN(Simple Traversal of UDP Through NAT)
两台外网主机之间也不能直接通信,它需要第三方服务做介绍,即STUN服务
将各自公网信息进行交换,使他们彼此认识
TURN (Traversal Using Relays around NAT)
p2p连接不成功的情况下,要想保证音视频连接成功,就要引入TURN服务
TURN服务就是在云端架设一个服务器,负责双方之间流媒体数据的转发
当它们进入同一房间时,A发送到TURN的数据,在这个房间里,TURN服务就会给房间内所有人进行转发
ICE (Interactive Connectivity Establishment)
将NAT TURN打包在一起,做一个最优选择
首先尝试p2p,如有两台服务通过,也会选择一个最优服务
不通则选择TURN,如有多个节点,上海TURN不通,则选择北京的TURN
总之,将所有可能性罗列好,在其中找到一条最优路径,将数据发送
NAT产生原因
- 由于IPV4的地址不够
一个内网中可能有上千台主机,但映射到外网时只有一个或几个IP地址,通过端口号来区分每台主机
这样就形成了一对几百,一对几千,大大减少了公网IP地址的使用 - 出于网络安全的原因
所有办公内的主机都在内部,他有自己的内网IP地址,但是没有外网IP地址,外面的主机就很难攻击到内网的某一台主机,必须要经过防火墙,经过NAT转换,才能找到内网中的主机
NAT种类以及穿越原理
-
完全锥型NAT (Full Cone NAT)
【四元组,内网IP地址和端口对IP(X,y),公网IP地址和端口(A,b)】当内网的某台主机经过NAT的映射,形成外网的IP地址和端口之后,外网所有主机只要知道这个地址,都可以向这个地址发送数据,基本上没有什么限制,安全性比较低
-
地址限制锥型NAT (Address Restricted Cone NAT)
【五元组,内网IP地址和端口对IP(X,y),公网IP地址和端口(A,b),请求主机的IP地址(P)】对IP地址做限制,做判断,出去请求时,记录出去的IP地址,当回来的时候,只有这台IP地址的主机才能回消息,对其他IP直接pass掉
-
端口限制锥型 (Port Restricted Cone NAT)
【六元组,内网IP地址和端口对IP(X,y),公网IP地址和端口(A,b),请求主机的IP地址和端口(P,q)】地址限制的基础上,对端口也进行限制
-
对称型NAT(Symmetric NAT)
当经过NAT转换时,内网的主机出外网的时候形成的映射,并不是一个IP地址和端口,他会形成多个
和不同的主机连接时形成的地址是不同的
NAT穿越步骤
- C1, C2向STUN发消息
- 交换公网IP以及端口
- C1 -> C2, C2 -> C1, 甚至是端口猜测(对称型)
NAT穿越组合
全锥型 | 全锥型 | ✔ |
---|---|---|
全锥型 | 受限锥型 | ✔ |
全锥型 | 端口受限锥型 | ✔ |
全锥型 | 对称型 | ✔ |
受限锥型 | 受限锥型 | ✔ |
受限锥型 | 端口受限锥型 | ✔ |
受限锥型 | 对称型 | ✔ |
端口受限锥型 | 端口受限锥型 | ✔ |
端口受限锥型 | 对称型 | ✘,无法打通 |
对称型 | 对称型 | ✘,无法打通 |
NAT类型检测
跟不上老师讲的,直接贴图吧