WebRTC网络基础 九、第三节 NAT类型检测

今天我们讲一下NAT类型的检测,看看我们自己是属于哪种NAT类型,是否可以打洞 成功,下面我就看一下这个整体的判断逻辑,当然在这之前我要有一个限定条件,就是在我们的云端一定要部署一个STUN服务。这个STUN服务要有两个IP地址和端口,这两个IP地址的作用稍后我们会在逻辑判断的过程中给大家介绍。

首先客户端要发送一个ECHO请求给服务端,服务端收到请求之后会通过同样的IP地址和端口在给我们返回一个信息回来。

那在客户端就要等这个消息回复,那么设置一个超时器,看每个消息是否可以按时回来,那如果我们发送的数据没有回来,则说明这个UDP是不通的,我们就不要再进行判断了。

如果我们收到了服务端的响应,那么就能拿到我们这个客户端出口的公网的IP地址和端口,这个时候要判断一下公网的IP地址和本机的IP地址是否是一致的,如果是一致的,说明我就没有在NAT之后而是一个公网地址;

接下来要做进一步判断,就是判断我们的公网地址是不是一个完全的公网地址,这时我们再发送一个信息到第一个IP地址和端口,那服务端收到这个请求之后呢,它使用第二个IP地址和端口给我们回消息,如果我们真是一个完全的公网IP地址和端口提供一个服务的话,那其他任何公网上的主机都可以向我发送请求和回数据,这时候我都是能收到的,那如果我能收到,那就说明就是一个公网的地址,所以我们就没有在NAT之后就完全可以接收数据了。

那如果我们收不到,那说明我是在一个防火墙之后,而且一个对称的防火墙。如果我收到的公网的IP与我本地的IP不一致,那就说明我们确实是在NAT之后,那既然是在NAT之后我们就要对各种类型作判断了。

这时我们再发送一个请求到第一个IP地址和端口,那它是通过第二个IP地址和端口给我们回消息,那这时候我们要判断我们的类型是不是完全锥型,如果我们出去一个请求,在我们的NAT服务和网关上建立了一个内网地址和外网地址的映射表之后,那其他公网 上 的主机都可以向我这个公网IP地址发送消息,并且我可以接收到,那么这个时候可以收到的话,我们就是一个完全锥型NAT

那么如果收不到的话,需要做进一步的判断,这时候需要向服务端的第二个IP地址和端口发送数据,那么此时服务端回用同样的IP地址和端口给我们回数据,那么这时候它也会带回一个公网的IP地址来,但是如果我们的出口,就是向第二个IP地址发送了请求带的出口的IP地址与我们第一发送的请求带回的IP地址如果是不一样的,那就说明是对称型NAT;对称型NAT每次出去都会形成 不同的IP地址和端口。

如果一样就说明是限制型的,限制型分为两种一种是IP限制型一种是端口限制型,所以还需要做进一步的检测,所这个时候我们再向第一个IP地址和端口发送一个请求,那么回信息的时候是同一个IP地址和不同的端口号,那么这时候我们就可以判断是否可以接收到,如果不能接收到,说明是对端口做了限制,所以是端口限制型的NAT,如果可以收到就说明是一个IP地址限制型的NAT。

经过这样一个逻辑判断之后 ,我就可以知道我们自己这台在内网的主机是什么NAT类型了。

了解了逻辑之后,我们再来看一下检测过程:

首先是我们的客户端,通过第一IP地址和端口,发送一个请求过去回来一个响应,如果回来这个地址和 我们之前发送的地址是一致的,那就是公网的。如果不一致说明我们是在NAT之后,这是第一次检测。

再接下来就是向第一个IP地址发送了一个请求 ,然后它通过第二个IP地址给我回一个请求,如果这次回来的IP地址与上次回来的IP是不一样的,它就是对称型NAT;如果一样还需要进一步判断,

紧接着再发送一个请求到第一个这个地址,那么它用这个 地址的第二个端口向我回消息,如果这时候我是能收到的,说明是IP地址限制锥型NAT,如果不能收到说明是端口限制锥型。

以上就是我们NAT检测基本的一个过程。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值