外贸出口公司网站建设方案,wordpress wdpx,成都网站制作沈阳,wordpress php文件上传NAT简介
我们知道#xff0c;WebRTC会按照内网、P2P、中转的顺序来尝试连接。在大部分的情况下#xff0c;实际是使用P2P或者中转的。这里P2P的场景主要使用的技术就是NAT穿透。
我们先简单了解下NAT。NAT在真实网络中是常见的#xff0c;它的出现一是为了解决ipv4地址不够…NAT简介
我们知道WebRTC会按照内网、P2P、中转的顺序来尝试连接。在大部分的情况下实际是使用P2P或者中转的。这里P2P的场景主要使用的技术就是NAT穿透。
我们先简单了解下NAT。NAT在真实网络中是常见的它的出现一是为了解决ipv4地址不够用的问题二是为了网络安全考虑的。 首先让同一个内网中的多台主机共用一个公网ip可以大大缓解ipv4向ipv6过度期间ipv4地址不够用的问题。 另外NAT将主机隐藏在内网中也就使得黑客想访问起来并没有那么容易了。
NAT的规范在RFC 3022中定义其主要作用就是做网络地址转换。NAT设备路由器会在内网地址和外网地址之间建立起映射关系。当内网主机向外网主机发送信息时NAT会将内网地址替换为映射的外网地址。相对应的当外网主机向内网主机发生信息时NAT会将外网地址替换为映射的内网地址。
因为NAT设备的存在外网主机通常无法直接与内网主机通信。所以在建立P2P连接之前需要做的就是NAT穿透也就是俗称的“打洞”。
NAT类型
RFC3489和RFC5389是关于NAT穿透的协议其中RFC3489中把NAT分成了4个类型。它们对NAT穿透的限制呈递进趋势。
完全锥型
完全锥型NAT的规范是只要内网主机A通过端口p1发出数据包在NAT上生成了相应的映射表这个表就是所谓的“洞”。接收数据包的外网主机能从这个数据包的报文中得到这个映射关系。它可以将这个映射关系告诉其他外网主机这样任意外网主机发送到这个NAT上端口p1的数据包就都会被转发到内网主机A上。完全锥型NAT的特点就是只要“打洞”成功所有知道这个“洞”的主机都能通过它和内网主机进行通信。
IP限制锥型
IP限制锥型NAT的规范相比于完全锥型NAT限制了外网来的IP。也就是说只有从内网主机发送数据包的目的IP发送到这个NAT上端口p1的数据包才会被转发到内网主机A上。IP限制锥型NAT的特点就是“打洞成功”后只有成功“打洞”的外网主机才能通过这个“洞”和内网主机进行通信。其他外网主机即使知道这个“洞”发来的数据包也回被NAT丢弃。
端口限制锥型
端口限制锥型NAT的规范相比于IP限制锥型NAT除了限制外网来的IP还要限制端口。也就是说只有从内网主机发送数据包的目的IP和端口发送到这个NAT上端口p1的数据包才会被转发到内网主机A上。端口限制锥型NAT的特点就是除了限制了“洞”的外网ip还限制了“洞”的外网端口。
对称型
对称型NAT的规范相比于端口限制锥型NAT还增加了一条规则。从内网主机A上发到不同的外网主机的数据包经过NAT时NAT都会为之分配不同的外网端口。对称型NAT的特点就是内网主机每次发送数据包给不同的外网主机时都会产生一个新的“洞”。
NAT类型检测
要进行NAT穿透内网主机首先要知道自己连接的NAT的类型。在RFC3489中给出了标准的检测流程。这个过程需要2台拥有2个网卡的STUN服务器。具体流程如下图所示。 主机向1号服务器的某个IP和端口发送一条请求如果超过超时时间没有收到响应则说明主机与服务器之间UDP不通。如果收到服务端的响应则对比本地IP和接收到的响应包中的主机的公网IP。如果这两个IP一致则说明主机在公网上没有NAT防护。如果不一致则需要进一步的NAT类型检测稍后详述。接下来主机再次向1号服务器相同的IP和端口发送一条请求1号服务器在收到请求后会使用第二个网卡返回响应。如果主机收到了这个响应则说明它在一个开放的网络上是一台公网主机。如果主机没有收到这个响应则说明它在对称型防火墙可以认为与对称型NAT类似后面。回到上面进一步的NAT类型检测流程。主机也是向1号服务器相同的IP和端口发送一条请求1号服务器也会使用第二个网卡返回响应。如果主机收到了这个响应则说明它在完全锥型NAT后面。如果主机没有收到这个响应则向2号服务器发送一条请求。主机收到2号服务器的响应后对比1号服务器返回的响应包中的主机的公网IP和2号服务器返回的响应包中的主机的公网IP如果不一致则说明它在一个对称型NAT的后面。如果一致则需要进一步的检测。主机再次向1号服务器发送一条请求1号服务器使用相同的IP即接收请求的IP和不同的端口返回响应。如果主机收到了这个响应则说明它在IP限制型NAT后面如果主机没有收到这个响应则说明它在端口限制型NAT后面。
NAT穿透流程
在确认完主机所在网络中的NAT类型后就可以判断是否能进行NAT穿透以及确认NAT穿透的方法。
一般而言完全锥型NAT以及IP限制型NAT可以与任何其他类型的NAT互通两边都是端口限制型NAT的也可以互通一边是端口限制型NAT另一边是对称型NAT或者两边都是对称型NAT的情况下想完成穿透很难所以这种情况一般会通过TRUN协议进行数据中转。
在WebRTC中通信的双方通过ICE交换了上面获取到的一些网络信息之后就可以尝试NAT穿透建立P2P连接了。
假设需要建立P2P通信的双方为主机A和主机B。
如果主机A在完全锥型NAT或者IP限制型NAT后只要主机先往主机B发送一个数据就会在该NAT上留下“洞”即使发送的数据被对方的NAT丢弃。后续主机B发往主机A的数据也能通过主机A这边的NAT上的“洞”实现穿透了。总的来说这种情况下只要双方不停的发送数据包且没有某一方的数据包被全部丢弃就能成功穿透。如果主机A在端口限制型NAT后而主机B也在端口限制型NAT后只要双方互相发送数据包则和前面情况一样可以利用NAT上的“洞”来穿透。主机A在端口限制型NAT后主机B在对称型NAT后或者两边都在对称型NAT后就只能通过服务器中转来通信了。服务器中转的TURN协议在RFC5766中进行了详细的规范。