呵呵,现在该轮到我们的正题P2P了。有了上面的理论,实现两个内网的主机通讯就差最后一步了:两边都无法主动发出连接请求,谁也不知道谁的公网地址,那我们如何来打这个洞呢?我们需要一个中间人来联系这两个内网主机。??
?????? 现在我们来看看一个P2P软件的流程,以下图为例:??
???????????????????????????????????????????? Server S (219.237.60.1)??
?????????????????????????????????????????????????????????????????? |??
?????????????????????????????????????????????????????????????????? |??
???? +-----------------------+----------------------+??
???? |???????????????????????????????????????????????????????????????????????????????????????? |??
NAT A (外网IP:202.187.45.3)???????????????????????????????? NAT B (外网IP:187.34.1.56)??
???? |???? (内网IP:192.168.0.1)?????????????????????????????????????????? | (内网IP:192.168.0.1)??
???? |???????????????????????????????????????????????????????????????????????????????????????? |??
Client A?? (192.168.0.20:60000)???????????????????????? Client B (192.168.0.10:40000)??
?????? 首先,Client A登录服务器,NAT A为这次的Session分配了一个端口60000,那么ServerS收到的Client A的地址是202.187.45.3:60000,这就是Client A的外网地址了。同样,ClientB登录Server S,NAT B给此次Session分配的端口是40000,那么ServerS收到的B的地址是187.34.1.56:40000。??
?????? 此时,Client A与Client B都可以与ServerS通信了。如果Client A此时想直接发送信息给Client B,那么他可以从ServerS那儿获得B的公网地址187.34.1.56:40000,是不是Client A向这个地址发送信息ClientB就能收到了呢?答案是不行,因为如果这样发送信息,NATB会将这个信息丢弃(因为这样的信息是不请自来的,为了安全,大多数NAT都会执行丢弃动作)。那该怎么办呢????? 首先我们假设Server S是219.237.60.1:7000,当Clinet A(202.187.45.3:60000)向Server S(219.237.60.1:7000)发送数据包,Server S是可以正常接收到数据,因为它是属于外型开放的服务器端口。局域网ip地址怎么查当Server S收到数据包后可以获知Clinet A(202.187.45.3:60000)对外通信的临时session信息(这个叫临时的端口,假设是60000会过期,具体时间不同,一般是每30S发送一个keep住连接以保证端口维持通信连接不断)Server S此时应将次信息保存起来。而同时,Client B (192.168.0.10:40000)也在时刻向??
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-67188-5.html
我就笑笑啦明显是针对新出的6s6sp来更新的那些以前的更新难免会出一些毛病喽
欢迎美国军舰南海一日游
北洋水师出击必须采取一字横阵向前冲