同一NAT下客户端的问题。(200分)

  • 主题发起人 主题发起人 liaoliao
  • 开始时间 开始时间
L

liaoliao

Unregistered / Unconfirmed
GUEST, unregistred user!
我看了网上关于iptables与stun的文章。现在我的测试出现了问题。
现在我的情况是这样的。
s1(218.0.0.1:2000)(218.0.0.1:1000)
|
|

nata(218.0.0.2)
|
|
|------------------------|
ca1 ca2
192.168.0.1:1000 192.168.0.2:1000
1、ca1-->nata->s1(218.0.0.1:2000)向s1报告自己的公网IP及PORT(218.0.0.1:2000)这符合
iptables的第1条规则。
2、ca2-->nata->s1(218.0.0.1:2000)向s1报告自己的公网IP及PORT(218.0.0.1:2001)这符合
iptables第2条的规则(因为socket一致,产生冲突)
3、在cb1,cb2连接s1(218.0.0.1:2000)与ca1,ca2连接s1(218.0.0.1:2000)时,状况一下。

4、ca1,ca2,cb1,cb2连接s1(218.0.0.1:1000),问题却出现了。
ca1-->nata->s1(218.0.0.1:1000)向s1报告自己的公网IP及PORT(218.0.0.1:2000)这符合
iptables的第1条规则。
ca2-->nata->s1(218.0.0.1:1000)向s1报告自己的公网IP及PORT(218.0.0.1:2002)这符合
iptables第2条的规则(因为socket一致,产生冲突)
这样的话,估计,再有个S2的话,那ca2与它的连接的PORT又将与其它两个不一样了。可能是2003了。
不知道大家遇到这种情况是怎么解决的。
 
www.source520.com 再次更新近3万代码,全部免费免注册狂下载
 
我在开发的时候,也碰到了和你一样的问题
我现在也想知道
哪位朋友能告诉一样?!
 
我看得好乱的.你的C1,C2在同一个局域网内的?那么S1是放在那里的?也是局域网中吗?
C3呢?
"然后再在别外服务器中开一个客户端"是什么意思?
建议你写清楚点.
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3398131
看下我这帖子的解答对你有没有用.
 
这个跟qq的原理一样的,你去看看
 
经过 S 中转应该可以
 
这个和NAT的算法有关。
 
(*
OICQ之间的通迅应该是这样的,当你登录时,会QQ服务器提供你当前所在的IP地址各端口
号,然后当你的好友上线时,就会从QQ服务得到这个IP和Port,以后的通迅才能继续!
上面可能没说得太清楚,下面举个例子来解释,
比如说,你在一家网吧里上网,这个网吧的服器有一个真正的IP地址(可能是临时的--对于
拨号上网;或者是固定的--对于专线上网)比如是61.168.45.120,同时有一个网吧局域网
的IP地址,比如192.168.0.1。而你在该网吧内IP地址为192.168.0.3的机器上用OICQ,当你
上线时,QQ会按你设定的路由发送数据(对于网吧,一般是设IP为192.168.0.3的机器的默
认网关为网吧的服务器,即192.168.0.1的机器)把你所在机器的IP(192.168.0.3)和Port
(一般第一个QQ为4000,二个为4001,依次类推,这时设为4000)通知网吧服器,由于网吧
的服务器(也可说是一个网关)要同时满足多台机器上网的需要,会在它的局域网地址(
即192.168.0.1上)动态的分配一个Port(如 4782)与你通迅,同时再在真正的IP(
即61.168.45.120)上分配一个Port(比如 5472)将你的数据发送到互联网上,这里即为向
QQ服务器发出它的IP和Port(这些都是在网吧服务器上运行的一个代理软件 如WinGate、
SyGate等 所做操作)。
{注意:这个发出的IP是网吧服务器的那个真正IP,Port为相对于这个IP的一个端口(5472)}
现在QQ服务器就把你的QQ当着是在IP为61.168.45.120的机器的Port 5472上运行了,当你的
好友上线时,它就会得到这个IP和Port,然后和你通迅,即把所有发给你的数据都发到
IP为61.168.45.120的机器的5472 Port上,然后网吧服务器上所装的代理软件(比如
WinGate、SyGate等)就会把这些数据通过局域网地址(IP:192.168.0.1,Port:4782)转发到
你所在的机器(192.168.0.3)的相应Port(4000)上,即完成通迅。
其实这中间主要有两个方面 一、就是网吧服务器中的代理,它负则对局域到互联网、互联
网到局域网的数据进行转发。第二,也是关键的一点就是QQ每次上线时会向QQ服务器注册自
己所在的IP和Port,并从QQ服务器中读出在线好友所在的IP和Port信息而进行通讯。当然处
于局域网时这些操作又都是通过网吧服务器中的代理完成的。

具体怎么和代理通讯,数据包的格式你要找socks5的规范手册查查。
NAT就容易的多了。也是通过一个地址映射,比如你想要外面的机器访问你的本机的90端口,
你首先建一个UDPserver开始监听本机的90端口,然后通过本机的UDPserver向外网机器发数据包,
外网机器收到包时会取得来源的IP和PORT,这就是经过地址映射后你的器的IP和90端口在NAT盒的地址映射,
外网的机器通过身这个收到的IP和PORT发数据你的本地机器就可以收到了。注意的是,NAT映射有超时限制,
如果一定时间你没有数据活动的话就会被取消映射,所以QQ要一定时间就发几个包发出去来维持个有映射的活动,
可以看看NAT的RFC规范。
解说完毕

*)
 
后退
顶部