一个内网的UDP套接字ASOCKET,每间隔10秒向外网服务器监听端口A(5555)发个保持活跃的包,每间隔15秒向外网服务器监听端口B(5556)发个保持活跃的包,我的目的是服务器分别对应A、B端口的SOCKET能随时主动向那个客户端的的UDP套接字ASOCKET发送消息,请问这样的话ASOCKET所在网络的NAT是否会阻止一个。
有点罗嗦啊,也就是ASOCKET所在网络的NAT只维持一个ASOCKET发送出的目标PORT,而把另外一个发来的包当作不请自来的消息。(NAT是端口受限的Cone NAT)
有点罗嗦啊,也就是ASOCKET所在网络的NAT只维持一个ASOCKET发送出的目标PORT,而把另外一个发来的包当作不请自来的消息。(NAT是端口受限的Cone NAT)
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发来的包都会放行。但有一些会检查所接收到的包的端口是否合法。
NAT 要么把源端口映射为一个端口
要么映射为两个端口
即使是第二种情况,也没理由掐掉其中一个,否则绝大部分正常通信将得不到保证