什么时候使用TCP打孔技术?

时间:2013-02-23 01:15:42

标签: linux networking tcp nat hole-punching

我正在研究 TCP打孔技术,并从本文中获得了一些知识:TCP_hole_punching。但我不明白以下部分:

      Network Drawing
      Peer A ←→ Gateway A ← .. Network .. → Gateway B ←→ Peer B  

      Types of NAT
      The availability of the TCP-hole-punching technique depends 
      on the type ofcomputer port allocation used by the NAT. When 
      two peers, A and B, instantiate TCP   connections by binding 
      to local ports Pa and Pb, respectively, **they need to know 
      the remote  endpoint NAT port in order to make the connection**.

以下是一些问题,有人可以帮忙解释一下吗?任何帮助或建议将不胜感激!!

Q1。假设我们有一个在NAT1后面运行的客户端应用程序和一个服务器应用程序     在NAT2后面跑。他们将进行消息传递和文件传输通信。     该模式将是服务器侦听并接受连接     来自客户。 他们是否需要使用TCP打孔来保持tcp     连接工作?

Q2。 只有在点对点时才需要TCP打孔技术     沟通和双方相互联系(例如,2x CONNECT(),没有LISTEN(),ACCEPT()等)?

Q3。在上面的文字中,“他们需要知道远程端点NAT端口才能建立连接”是什么意思? 为什么他们需要知道远程端点NAT端口?他们只需要知道其他机器的本地端口吗?

例如,假设该对是(ClientA,publicIPA,LocalPortA),(ClientB,publicIPB,LocalPortB)。如果ClientA想通过TCP与ClientB通信,它可能会执行以下操作:

         clientBAddr.port = LocalPortB;
         clientBAddr.ip = inet_addr(publicIPB);
         connect(fdA, clientBAddr,...);

为什么需要知道NATPortA和NATPortB等信息?如果clientA和clientB不关心NATA和NATB,有什么问题吗?

1 个答案:

答案 0 :(得分:1)

由于这篇文章重新开放,直到现在还没有人留下答案,我想根据这篇文章自己回答:Peer-to-Peer Communication Across Network Address Translators

关于Q1,是的。如果没有像打孔一样的机制,一方用来与另一方同步的数据包将被路由器丢弃。

关于Q2,没有确切的。听力套接字无法直接使用。你需要其他技巧。