一个内网的UDP套接字ASOCKET,每间隔10秒向外网服务器监听端口A(5555)发个保持活跃的包,每间隔15秒向外网服务器监听端口B(5556)发个保持活跃的包,我的目的是服务器分别对应A、B端口的SOCKET能随时主动向那个客户端的的UDP套接字ASOCKET发送消息,请问这样的话ASOCKET所在网络的NAT是否会阻止一个。
有点罗嗦啊,也就是ASOCKET所在网络的NAT只维持一个ASOCKET发送出的目标PORT,而把另外一个发来的包当作不请自来的消息。(NAT是端口受限的Cone NAT)

解决方案 »

  1.   

    可能没说清楚:
        ASOCKET在2010-1-20 10:30:00向端口A(5555)发了个数据包,然后ASOCKET在2010-1-20 10:30:01向端口B(5556)发了个数据包,那么外网的端口A发来的包能不能收到(是不是ASOCKET所在的NAT把此包当不请自来的包,而把端口B发来的包当合法的包;也就是NAT只会把最近发出去包中的地址当合法的地址,以此来判断返回给ASOCKET的包是不是合法)。(NAT是端口受限的Cone NAT)想象一下NAT中的判断代码:
    RecvFrom(ASOCKET,BUF,BUFSIZE,0,Addr,AddrLen);
    if Addr.sin_port=B then //只认最近的外发包的地址
    begin
      //放行
    end
    else
      //丢弃
    还是这样:
    if Addr.sin_port in[A,B] then //ASOCKET所有的外发包的地址
    begin
      //放行
    end
    else
      //丢弃这样描述大家应该知道我的意思了吧。我这没这种网络环境,也没办法测试。我知道一般网络的NAT只限制IP地址,对同一IP的不同PORT发来的包都会放行。但有一些会检查所接收到的包的端口是否合法。
      

  2.   

    不会有问题的
    NAT 要么把源端口映射为一个端口
    要么映射为两个端口
    即使是第二种情况,也没理由掐掉其中一个,否则绝大部分正常通信将得不到保证