我的 ISP 为我提供了一个本地静态 IP 地址。如何在没有公共 IP 地址的情况下与互联网上的另一台计算机建立连接?我只想制作一个简单的应用程序,它可以将数据来回发送到本地网络之外的另一台计算机。我对端口转发略知一二,但不幸的是我的 ISP 无法为我进行端口转发。没有端口转发真的可以吗?怎么做?谢谢。
答案1
如果对方可以设置端口转发(或不使用 NAT),那么一切就大功告成了。TCP 连接始终具有双工功能。
如果这不可能的话,你可以求助于“打孔“,这是一种在普遍可达的第三方的帮助下欺骗 NAT 设备允许“传入”连接的技术。
取自链接文章,基本原则如下:
- 对等体 A 向对等体 B 发送 SYN
- 对等体 B 向对等体 A 发送 SYN
- 当 NAT-a 收到来自对等体 A 的传出 SYN 时,它会在其状态机中创建一个映射。
- 当 NAT-b 收到来自对等体 B 的传出 SYN 时,它会在其状态机中创建一个映射。
两个 SYN 在网络路径上的某个地方交叉,然后:
- 来自对等体 A 的 SYN 到达 NAT-b,来自对等体 B 的 SYN 到达 NAT-a
- 根据这些事件发生的时间(SYN 在网络中的哪个位置经过),至少一个 NAT 将允许传入的 SYN 通过,并将其映射到内部目标对等体
收到 SYN 后,对等方发送回 SYN+ACK,连接即建立。