我正在研究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。只有当它是对等通信并且双方都相互连接时(例如,2x CONNECT()、没有 LISTEN()、ACCEPT() 等),才需要 TCP 打孔技术吗?
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有什么问题吗?