P2P如何让TCP穿透NAT,100分等着各位老鸟(100分)

  • 主题发起人 主题发起人 bifei
  • 开始时间 开始时间
B

bifei

Unregistered / Unconfirmed
GUEST, unregistred user!
给点思路也可以啊,貌似网上有很多讲UDP的,很少有TCP穿透的。
 
tcp不能穿透NAT
 
tcp只能通过服务器中转的
 
听课,UDP的我试过可以,这个问题,我近来比较感兴趣,顶
 
TCP肯定不可以吗,为什么我在网上搜资料的时候,看到有人说可以,就是很麻烦。还有两个QQ在不同局域网里传大文件是怎么做的,难道QQ传文件也是用udp协议吗。
 
只是说很麻烦,而且机率很低.

-----------------------------------------------------------------------
http://community.csdn.net/Expert/topic/5173/5173662.xml?temp=.7579004

ProgrameMan(我要学汇编) ( ) 信誉:89 Blog 2006-11-22 0:01:04 得分: 100
不好意思,对你第二个问题还是不明白
假设:
局域网X内
A主机:192.168.0.1 局域网的外网IP:221.231.139.170

外网服务器
B:221.231.139.171

如上情景:假如A主机上开了个服务,B如何联接上它的呢?
好比A主机侦听于端口9988(就是listen于9988端口),此时A又没有外网221.231.139.170相应的端口映射,那外网B又是如何联上A的呢?或者是用别的什么方式?谢谢谢谢

**********************************************************************

3种情况可B可以连接到A主机,

1. 一种是在A的网关上做端口映射。
2. B不再内网中,此时B让服务器告诉A反向连接到自己这里。
3. A与B都在内网,有一种建立直接P2P TCP连接的方法有时候会被使用。大多数TCP连接都是从一个终端发从一个SYN包到另一个终端,另一个中断同步响应一个SYN-ACK包。无论怎样,对于两个终端来说,同时通过发送同步包到对方然后用一个ACK包应答来建立一个TCP连接是可行的。这种过程就被称为"simultaneous open"(同时打开)

如果一个网关从尝试建立一个TCP连接的私有网络的外面接受一个TCP SYN包,网关通常以丢弃这个SYN包或者发送一个TCP RST(连接复位)包的方式来拒绝这个连接尝试。但是,如果同步包与源和目的地址端口一起到达,那么会让网关相信一个TCP连接已经建立起来,然后网关将会允许数据包通过。特别是如果网关刚刚得到并转换了一个从同样地址和端口来的SYN包,它将认为连接是成立的并允许进来的SYN通过。如果客户端A和B能彼此预测公共端口,它们各自的网关将分配的下一个TCP连接端口,如果其中一个客户端和另一个客户端建立一个外部的TCP连接,可以在对方SYN到达本地网关之前就发送SYN包通过它本地自己的网关,那么P2P TCP连接就可以工作了。 (不过这种方式在实际中成功率太低了)
 
第三种情况不考虑先,除了第二种情况外,最好的做法是第一种.也就是UPNP,LZ去找这方面的资料,慢慢研究吧,应该不难的.不然去请教一下Bitcomet的作者.
 
去下一个P2P源代码分析一下不就清楚了!
 
接受答案了.
 
后退
顶部