题主悬赏了40铜    |    已采纳 xmoon76 的答案

psn 的nat检查 到底和网络响应有没有关系?

微博   微信 2018-06-10 22:42     5个回答 PSN
因为之前看过一片帖子说丢包率太高可能也会变nat3和nat失败

nat类型的原理已经百度了解过了,我只是想知道上面这个观点对不对。
回答
  • 去认真查了一下
    1. Full Cone NAT:所有来自同一 个内部Tuple X的请求均被NAT转换至同一个外部Tuple Y,而不管这些请求是不是属于同一个应用或者是多个应用的。除此之外,当X-Y的转换关系建立之后,任意外部主机均可随时将Y中的地址和端口作为目标地址 和目标端口,向内部主机发送UDP报文,由于对外部请求的来源无任何限制,因此这种方式虽然足够简单,但却不那么安全

    2. Restricted Cone NAT: 它是Full Cone的受限版本:所有来自同一个内部Tuple X的请求均被NAT转换至同一个外部Tuple Y,这与Full Cone相同,但不同的是,只有当内部主机曾经发送过报文给外部主机(假设其IP地址为Z)后,外部主机才能以Y中的信息作为目标地址和目标端口,向内部 主机发送UDP请求报文,这意味着,NAT设备只向内转发(目标地址/端口转换)那些来自于当前已知的外部主机的UDP报文,从而保障了外部请求来源的安 全性

    3. Port Restricted Cone NAT:它是Restricted Cone NAT的进一步受限版。只有当内部主机曾经发送过报文给外部主机(假设其IP地址为Z且端口为P)之后,外部主机才能以Y中的信息作为目标地址和目标端 口,向内部主机发送UDP报文,同时,其请求报文的源端口必须为P,这一要求进一步强化了对外部报文请求来源的限制,从而较Restrictd Cone更具安全性

    第二部:NAT类型检测

    前提条件:有一个公网的Server并且绑定了两个公网IP(IP-1,IP-2)。这个Server做UDP监听(IP-1,Port-1),(IP-2,Port-2)并根据客户端的要求进行应答。

    第一步:检测客户端是否有能力进行UDP通信以及客户端是否位于NAT后?

    客户端建立UDP socket然后用这个socket向服务器的(IP-1,Port-1)发送数据包要求服务器返回客户端的IP和Port, 客户端发送请求后立即开始接受数据包,要设定socket Timeout(300ms),防止无限堵塞. 重复这个过程若干次。如果每次都超时,无法接受到服务器的回应,则说明客户端无法进行UDP通信,可能是防火墙或NAT阻止UDP通信,这样的客户端也就 不能P2P了(检测停止)。
    当客户端能够接收到服务器的回应时,需要把服务器返回的客户端(IP,Port)和这个客户端socket的 (LocalIP,LocalPort)比较。如果完全相同则客户端不在NAT后,这样的客户端具有公网IP可以直接监听UDP端口接收数据进行通信(检 测停止)。否则客户端在NAT后要做进一步的NAT类型检测(继续)。

    第二步:检测客户端NAT是否是Full Cone NAT?

    客户端建立UDP socket然后用这个socket向服务器的(IP-1,Port-1)发送数据包要求服务器用另一对(IP-2,Port-2)响应客户端的请求往回 发一个数据包,客户端发送请求后立即开始接受数据包,要设定socket Timeout(300ms),防止无限堵塞. 重复这个过程若干次。如果每次都超时,无法接受到服务器的回应,则说明客户端的NAT不是一个Full Cone NAT,具体类型有待下一步检测(继续)。如果能够接受到服务器从(IP-2,Port-2)返回的应答UDP包,则说明客户端是一个Full Cone NAT,这样的客户端能够进行UDP-P2P通信(检测停止)。

    第三步:检测客户端NAT是否是Symmetric NAT?

    客户端建立UDP socket然后用这个socket向服务器的(IP-1,Port-1)发送数据包要求服务器返回客户端的IP和Port, 客户端发送请求后立即开始接受数据包,要设定socket Timeout(300ms),防止无限堵塞. 重复这个过程直到收到回应(一定能够收到,因为第一步保证了这个客户端可以进行UDP通信)。
    用同样的方法用一个socket向服务器的(IP-2,Port-2)发送数据包要求服务器返回客户端的IP和Port。
    比 较上面两个过程从服务器返回的客户端(IP,Port),如果两个过程返回的(IP,Port)有一对不同则说明客户端为Symmetric NAT,这样的客户端无法进行UDP-P2P通信(检测停止)。否则是Restricted Cone NAT,是否为Port Restricted Cone NAT有待检测(继续)。

    第四步:检测客户端NAT是否是Restricted Cone NAT还是Port Restricted Cone NAT?

    客户端建立UDP socket然后用这个socket向服务器的(IP-1,Port-1)发送数据包要求服务器用IP-1和一个不同于Port-1的端口发送一个UDP 数据包响应客户端, 客户端发送请求后立即开始接受数据包,要设定socket Timeout(300ms),防止无限堵塞. 重复这个过程若干次。如果每次都超时,无法接受到服务器的回应,则说明客户端是一个Port Restricted Cone NAT,如果能够收到服务器的响应则说明客户端是一个Restricted Cone NAT。以上两种NAT都可以进行UDP-P2P通信。

    结论:丢包是会导致nat检测出问题的,因为检测的原理就是看收不收得到包
    2018-06-12 08:27修改
  • 没任何联系。假如运营商给你分配的是公网ip,网线直连是nat1,映射一次nat2,两次nat3。内网ip的话,直连是nat2,映射一次nat3。
    2018-06-11 01:09
  • 我的意思可能没有理解 因为索尼服务是在国外,走的肯定是国际的带宽,这个检测如果是线上的,会不会因为传输时丢包而导致数据不完整才会检测出失败和nat3
    2018-06-11 01:35
  • 本条答案已被采纳 xmoon76
    会,网络不好的情况下会变成nat3。
    所谓nat测试就是通过向远端测试服务器发包,然后远端服务器向你发包的这个过程来检测nat连通性。
    如果能收到远端服务器的发包那就是nat1或nat2了,这取决与你接收到的端口。
    如果只能通过你当初发给测试服务器的包的端口来接受数据那就是nat2。
    如果能够在不止当初发给测试服务器的包的端口接受数据,也能在其他端口接收,那就是nat1。
    如果接收不到任何远端发来的数据,那就是nat3。所以丢包也会导致检测为nat3。
    这就是改dns能解决nat3的原因,改dns并不能将你从原本实际上就是nat3的情况中解救出来,但是能帮你换个链接好一点的服务器。
    2018-06-12 03:41修改
发表评论,请先 登录
T