打洞穿透NAT我已经明白了,但是碰到了新的问题
假设:
客户端A在NAT1后面,客户端B在NAT2后面,A要和B通讯,A向服务器索取B的外网地址(NAT转换后的),
且A告诉服务器,要和B通讯,然后服务器把A的外网地址发给B,通知B打一个洞,于是,B向A的外网地址
发了一个数据包(打洞包,当然这个包A是收不到的),但是B在NAT2这里建立了一个会话,即打洞,之后
A发给B的数据包就可以穿透B那边的NAT了,问题是:除了NAT还有防火墙,而防火墙屏蔽了很多端口,这样,当B发一个打洞包时,因为目的端口是
A的NAT之后的端口,而我们又不能控制NAT转换后的端口,所以,这个打洞包,会被防火墙过滤掉,根本出
不去,大不了洞啊??我还看了一种http隧道技术,但是http隧道技术好像要一个中转的,这就不是p2p了

解决方案 »

  1.   

    现在到底有没有人实现了p2p,qq根本不是p2p,他发送的消息要进过服务器中转(抓包发现的),所以qq并没有实现直接的端到端通讯,bt也没有实现p2p,他不能实现2个不同内网之间的用户的通讯,他是把其他拥有公网ip的主机当做服务器,然后从他那里下载资源,头痛啊
      

  2.   

    你对p2p 的理解有误,指的不是穿透防火墙,是指点对点传输,而无需经过服务器中转.
    穿透防火墙是一种p2p的传输方式,并不是唯一,
    正如果所说 bt 是需要公网IP支持的,但这个公网IP 可以是真IP或NAT映射
      

  3.   

    打洞只是解决p2p中出现的终端不在公网上的问题,跟p2p本身没关系.
      

  4.   

    to 7楼的:
    p2p指的不是穿透防火墙,是指点对点传输,而无需经过服务器中转. 没错这点我认同.但是如果A在一个内网内,而B在另外一个内网内,2个内网都有设防火墙,都有经过NAT,那么A要和B通讯不仅要穿透NAT,还要穿透防火墙.否则要怎么通讯,而要穿透NAT就要打洞,而打洞的端口基本上会被防火墙过滤,如何是好
      

  5.   

    NAT打洞,和防火墙是两回事
    这个不在p2p解决方案之内,某种技术是建立在某个环境之下的!所以你的问题是,已经不是p2p可以解决的了
     
      

  6.   

    bt 是需要公网IP支持的,那么这个公网ipb算不算是临时的服务器
      

  7.   

    你不应该只看是谁发起的连接(FTP 有两种方式,一种是主动,一种是被动).
    如在某一时刻 A 向 B 出请求B回应被返回应答,那么在这一时刻 A 是 B 的客户端,反之 B 是 A的客户端.BT 上的任何两点即是服务器也是客户端.
    或者一个BT已经下载完成,只作种,那它就是一台数据服务器
    总结之服务器定义在于你所处的位置,与从何角度去看p2p 没有定义,连接两点是什么样的机器,是否是服务器,是否在内网..........
    它的定义是 ,两点传输,这个定义很大,
    从p2p 角度去看,任何两点都是客户端
      

  8.   

    我在想一个问题:如果客户端A能上网,说明客户端A通过NAT-A能分配一个端口出去,说明这个端口没有被防火墙禁用,那么从外网回来的包怎么会被防火墙丢弃呢?
      

  9.   

    如果a出的去,从外网来的包当然不会被丢弃,但是你要打洞,A就的给B发,那么B也是NAT随即分配的端口,
    那么a要出去连接b,而防火墙会根据目的端口来过滤,所以你不能保证a一定能出的去.
      

  10.   

    最近在了解P2P大洞技术,这篇blog还不错:http://www.cnblogs.com/yrh2847189/archive/2007/06/20/790013.html,大家可以看一下