关于 TCP Nat 穿透问题?(100分)

  • 主题发起人 主题发起人 fanronghua
  • 开始时间 开始时间
F

fanronghua

Unregistered / Unconfirmed
GUEST, unregistred user!
http://www.vckbase.com/document/viewdoc/?id=1773
当到第8步,
1.B向A发起connect 的是,他要去连A的哪个端口?
2.B在连接这个端口连不通的时候,他是怎么知道自己在外网的端口的,并把这个端口通过S告诉A?
 
当A需要和B建立直接的TCP连接时,首先连接S的【协助打洞】端口
---------------------------------------------------------
1.发起监听的端口, 是客户端, 这个地方可以设置端口, 然后服务器会拿到这个端口的路由器映射端口.A同时监听这个端口, 那么外网发来的数据可以通过刚才映射的端口传进来
上面写得很清楚.
2.B首先要通过本地的固定端口向服务器发送数据, 服务器会告诉A外网的端口和地址的, 然后B通过同样的端口去连接A.
你没注意到服务器的存在吗?
 
非常感谢来自:不能没有你, 你的回复!
我知道有服务器的.
1.发起监听的端口, 是客户端, 这个地方可以设置端口, 然后服务器会拿到这个端口的路由器映射端口.A同时监听这个端口, 那么外网发来的数据可以通过刚才映射的端口传进来
------------------------------------------------------------------------------
假如 A 发起监听的端口是 5000 端口, 同时这个 5000端口也是连接S的客户端 端口.那么现在他处于 Listen 状态,同时也处于 与S 的连接状态,对吗?
A在外网的端口假如是6000 端口,那么S就知道A的端口是6000,对吗?
同样 B也是.
A在外网的端口假如是6001 端口,那么S就知道B的端口是6001,对吗?
那么 这个时候 B 向 A 发起连接 是哪个端口 ,6000 吗?

2.B首先要通过本地的固定端口向服务器发送数据, 服务器会告诉A外网的端口和地址的, 然后B通过同样的端口去连接A.
---------------------------------------------这个和上面的几乎是一个问题.
 
是的
你的理解没错
但是这只是理论, UDP相对实现容易些
但是tcp就难多了.
 
非常感谢你的再次回复.
但是人家确实已经实现了,我这个写了个Demo UDP是没有问题的,TCP 好象不成功.
就是B 去 Connect A 的时候 是抛错 一个 10061 的错误.
不知道你有没有实现过.
我的QQ,MSN,skype,Emil : fanronghua@126.com
如果你有时间可以联系我
 
收到10061是很正常的事,因为A的NAT已经把你的包给抛弃了...反过来B也会这样
TCP在打洞上面麻烦也正因为这个.....你可以多发生几个连接..分开请求..另一方也是..
连通了别忘了把没用的资源释放
 
当到第8步,
1.B向A发起connect 的是,他要去连A的哪个端口?
2.B在连接这个端口连不通的时候,他是怎么知道自己在外网的端口的,并把这个端口通过S告诉A?
1.客户端 应当有三个端口,一个是与server的主连接端口,一个是协助打洞端口,还有一个应当是A-B传输数据的数据端口,而B向A发起连接的端口是数据端口
2.由于B是NAT的主机,向任何外网发送数据时,Tcp数据包都包含这个私网的公网地址,所以不需要知道自身的公网地址,只需要知道对方的公网地址
 

Similar threads

后退
顶部