http://www.vckbase.com/document/viewdoc/?id=1773当到第8步,
1.B向A发起connect 的是,他要去连A的哪个端口? 
2.B在连接这个端口连不通的时候,他是怎么知道自己在外网的端口的,并把这个端口通过S告诉A?  

解决方案 »

  1.   

    能穿透防火墙的UDP,不是TCP。B向A发送一个UDP包,目的是为了通知B的防火墙要信任之后从A发到B在外网端口的UDP数据包,不要丢弃它们。这个UDP包可以发送到A的任何一个UDP端口,而且都将被A丢弃。B在外网的端口,S是知道的(端口信息包含在由B发给S的UDP包中),由S转告A。
      

  2.   

    UDP 穿透是没有问题的 ,我已经实现过了,只要互相 告诉 对方在外网的 IP,端口号,就是了 。
    S 告诉 A ,B 的外网的 IP_B 和 Port_B.
      告诉 B ,A 的外网的 IP_A 和 Port_A.A直接往IP_B,Port_B发数据。
    B直接往IP_A,Port_A发数据。但是 TCP 没有实现过。人家也说可以的呀 !http://blog.csdn.net/maotai/archive/2008/07/26/2713350.aspx
    这个上面说可以实现的。
      

  3.   

    认真学习了http://www.vckbase.com/document/viewdoc/?id=1773 当到第8步, 
    1.B向A发起connect 的是,他要去连A的哪个端口?   
    是A连接S的【协助打洞】时在NAT-A上的外网端口,在第4步中S告诉了B的。2.B在连接这个端口连不通的时候,他是怎么知道自己在外网的端口的,并把这个端口通过S告诉A?  
    第6步中B连接A时用的本地端口就是第5步中B连接S的【协助打洞】时用的本地端口,也是第7步中进入侦听状态的本地端口。这个端口,S在第7步时告诉了A。
      

  4.   

    谢谢你的回复,
    1.已经理解了。
    2.本地端口,这个端口是B本地端口,不是B在 Nat_B的外网端口,是吗,那A过的来吗?
      

  5.   


    我的理解是:当B本地端口不变时,B向外连接不同的外网地址时NAT-B不会重新创建新的端口,会重复使用B首次向外连接时NAT-B所创建的那个端口,这个端口,S在第5步时知道了,告诉A的应该是这个NAT-B上的端口号。