看别的帖子说
严格nat <----> 非严格nat 之间可以通过服务器通讯我这边有2个局域网测试环境,一个局域网是非严格的nat,同一个socket 给不同的Ip发送包,在nat上的映射端口是相同的,其他ip可以利用这个端口通讯,前提就是他先向某个IP端口"打洞"(假设为A方)
一个是严格的,同一个socket 给不同的Ip发送包,在nat上的映射端口是不同的。(假设为B方)
因为一方是严格的nat ,所以A 不可能获取 B的通讯端口。
B可以通过服务器获取A的通讯端口,然后向A发送数据,但是A不知道B的端口,所以在防火墙上没有对B的端口的映射,所有B发给A所有的包都被防火墙丢掉。
有谁知道解决方法吗?

解决方案 »

  1.   

    严格NAT是指Symmetric NAT吗?
    非严格NAT是指Cone NAT?即使是Cone NAT也分为Restricted Cone NAT和Port-Restricted Cone NAT,我想只有当你的NAT A是后者时才会出现你所说的问题。如果是Port-Restricted Cone NAT我想可能只有通过猜测端口的方式来连接。
      

  2.   

    我的A是 Port-Restricted Cone NAT 的,就是那种会丢弃不请自来的数据包猜测端口,好像不稳定,我测试一下,我的B在Nat上的端口不是按顺序的 
    我从B 
    sendto server port 9000   --  >收到B的端口是23025
    sendto server port 9001   ---- 收到B的端口是62847如果我要猜测端口,就要向所有端口发送测试数据,是这样吗?
      

  3.   

    学习什么是严格nat 什么是非严格nat
      

  4.   

    严格NAT是指Symmetric NAT
    非严格NAT是指Cone NAT
      

  5.   

    呵呵,如果NAT A是Port-Restricted Cone NAT , NAT B是Symmetric NAT,并且NAT B的端口还是随机分配的。。那么,还是通过服务器中转通信吧我想现在的P2P软件应该还没有哪个可以做到在任何情况下直接通信。
      

  6.   

    一个 Symmetric NAT,另一个Cone NAT 是不太可能 打洞的,只能采用利用另一个无防火墙的主机来转发,Gnutella网络 就是采用这种方法