QQ数据包到达局域网代理服务器时是如何转发到网内的机子的呢?欢迎讨论!(200大洋,绝不手软!)(200分)

  • 主题发起人 主题发起人 I will be back!
  • 开始时间 开始时间
I

I will be back!

Unregistered / Unconfirmed
GUEST, unregistred user!
当一个处在局域网内,没有真正IP的机子通过网关上QQ时,在internet上与它通讯的另一
个QQ发送数据包给它时,数据包是如何通过网关到达该没有真正IP的机子的阿?[:(]
代码:
 
不好意思,我没用过QQ,但我想代理上应该开放了这个端口,并支持这个服务吧。要知道并
不是所有的代理都能支持QQ的。
 
我试验过一下,就是做了个用UDP通讯的小东西,一方是在一个局域网内只有通过
网关的真正IP出去的机子,另一方是在教育网内有真正IP的机子,局域网的机子发数据包,
另一边可以收得到,但是在教育网的机子发数据包给局域网内的机子,局域网内的机子收不
到!就是这个转发的功能是如何实现的,各位大侠能否指点一下阿
 
这是理设置的问题,如果你的代理服务器设置中包括了QQ要求的端口号(好像是8080),所有数据包外送内传的工作都是由代理服务器来做了。
就好像你问题你的IE是如何通过代理获得网页一样。
 
我用netxyray分析过QQ的数据包,如果是局域网内的机器,先发送到对方的IP,发送应该没
问题,当对方发过来的时候,内网的机器不可能直接收到信息,而如果信息没有收到,则会发
往QQ服务器,这样的话,内网的机器只有通过读取服务器,才可能获得对方的信息,其实这
个问题已经在大富翁里谈论了很久,不过没什么令人信服的结果。
 
to 疾风之猫:
如果像你所说那样的话,那好像又回到问题的源头了,局域网的机子需要不断轮询QQ
服务器,如有属于自己的数据包,则读取之,但其读取的数据包又是怎样来到局域网
内的机子的呢,它们的处境应该是跟原来直接发送到代理服务器的数据包一样的阿,也
是找不着北。如果是我理解错误,请原谅!请再赐教![?]
 
to kifo:
恕我愚钝,能否从底层一点的角度来解释一下代理服务器实现转发的机理?
 
我同意kifo的说法。就想有的局域网没有打开QQ要求的端口,QQ就联不上服务器。以此为依据可得出数据包是在到达局域网服务器后,由局域网服务器在通过8080端口再发送给子机的!
 
那如果我想要通过UDP协议向局域网内的机子发送数据包的话,我要在数据包里怎样加信息,
代理服务器才能根据这些信息转发给局域网里的机子啊?[V]
 
是啊,我看来看去,好像没有人能正确的理解JUSTCOOL的问题啊!
我现在也在等答案!
 
我们暂且不讨论代理的问题,只说用网关的好不好。
 
NAT
局域网内的机器在外面看来都有相同的IP,但使用不同的端口。
网关把发往各个端口的数据转发到对应的内网IP。
TCP/IP通讯要靠IP和端口。
这个问题已经讨论过很多次了。
 
问题很好解决,用Nmudp,我做icq的时候,这样实现的:
DataReceived(Sender: TComponent; NumberBytes: Integer; FromIP: String; Port: Integer);
var ……
begin
……
Stream:=TMemoryStream.Create;
Nmudp.ReadStream(MyStream);
……
ip:=FromIP;
然后发回获取的IP和Port
Port是随时变化的
你可以测试一下,没问题的
给分吧
 
我来说说看:
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信息而进行通讯。当然处
于局域网时这些操作又都是通过网吧服务器中的代理完成的。
以上是我个人的一些见解,如有不对之处,还望各位行家里手多多指点、共同研究进步。
 
想想看也是这么个道理,但是谁已经写出了这样的东西呢,能不能放上来让大家一起学习?
 
哇,最近这话题可真热门呀。关注。。。。
 
老张,你自己马上就写一个啊,明白了原理还不动手啊?又不是叫你写个QQ出来[}:)]
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部