p2p打洞问题(50分)

  • 主题发起人 主题发起人 happygb
  • 开始时间 开始时间
H

happygb

Unregistered / Unconfirmed
GUEST, unregistred user!
内网A通过服务器X连接内网B,在服务器发送给A主动打洞消息同时发送给B被动打洞消息后,如何才能够保证A和B打洞连接成功,我见过一种方法是定时让AB给对方发送打洞消息,这样可能会影响他们之间的传输效率,还有没有好的方法?
 
-> : 表示 发送信息,如握手包.
A->S的同时: A->B(此时B拒收A信息)
S->B, B->A(A此时会接收B信息, 可以在这里设置一个超时时间,如果过了超时时间没接收到B的信息,则重新向S发送与B的握手包.), A 发送任何信息到B都可以了.当A->B后.B也可以向A发送信息了.

NAT不同的.要定时刷新NAT连接池.
 
to fghyxxe:
“S->B, B->A(A此时会接收B信息, 可以在这里设置一个超时时间,如果过了超时时间没接收到B的信息,则重新向S发送与B的握手包.)”
我觉得这里有问题,因为虽然S->B,但是B->A的消息A同样是会拒绝的,因为A也在内网,NAT是不会接受外部来的消息包,除非A在内部也同时发起一个向B的连接,这样,才能建立A和B的会话。
你说的“NAT不同的.要定时刷新NAT连接池. ”是什么意思能具体一点吗?
 
fghyxxe还在吗?上来讨论一下
 
A->S的同时: A->B(此时B拒收A信息) 说明:A与Server连接,Server要求A向B打洞.此时,B虽拒收A信息,但Nat上却产生了有关A的Session(即: 记录了有关IP和port)
S->B, B->A 说明:Server通知B,告诉B A已向B打洞,可以建立连接. 于是,B向A发送信息.因为Nat上已记录了A的信息,连接成功!

不知道我有没有误解fghyxxe的地方?

我觉得过程是这样的:
A-->S,B-->S: A,B登录服务器S,S记录了A,B的公网IP和对应端口Port.
此时,B希望和A通讯.
B-->S,S-->A,A-->B :B告诉S"希望与A通信",S命令A向B打洞,A向B发送打洞信息.
S-->B,B-->A :S告之B"A已打洞",B连接A,成功!
我是这样想的.但似乎S在中间做了很多次中介,是不是有些浪费?没有仔细考虑~~
 
你的理解大概是正确的,但是问题就出来了,如果A打洞向B发消息,如果这个时候S还没有给B发送指令让B发消息到A,这时,B的NAT是不接收A的打洞消息的,那么也就说会话是不成功的,如何才能够保证A和B打洞连接成功?
 
后退
顶部