我需要与另一台计算机(不在同一网络中)建立 TCP 连接,但不知道它们的 IP 地址。两台计算机都运行相同的 TCP 服务器软件,但是由于它们的 IP 地址不是静态的,因此我不知道它们的 IP 地址,但是我会知道它们计算机上的任何其他静态网络信息(MAC 地址等)。
有没有什么方法可以仅使用静态网络信息来查找 IP 地址或建立 TCP 连接?
答案1
按照标准轨道执行此操作需要设置域的 DNS 服务器以支持 IETF 标准轨道DNS 动态更新,然后在您的设备上运行一个进程,当其 IP 地址发生变化时更新其 DNS 记录。
这种非标准但广泛使用的方法(我想这使得它成为一种事实上标准)是使用动态 DNS (DDNS) 服务,其中最著名的可能是dyn.com。它与上面的想法相同;您需要在设备上运行一个进程,当设备的 IP 地址发生变化时更新设备的 DNS 记录。
如果一台或两台设备都位于 NAT 网关后面,它们可能甚至不知道自己的公共 IP 地址,甚至可能没有可从公共互联网访问的端口。这个问题被称为“NAT 穿越”,是冰,眩晕, 和转动寻求解决。
您的服务器进程必须首先发现其可以访问的公共 IP 地址和端口元组(注意:如果它位于 NAT 网关后面,这可能不是它自己的本地 IP 地址和端口),然后它必须以某种方式将该元组传达给客户端。这涉及“对等发现”和“交互式连接建立”以及“NAT 遍历”的问题。这组问题的大多数解决方案都需要某种具有稳定主机名的公共可访问服务器,作为接受连接的设备可以发布其元组的地方。或者,该公共可访问服务器可以充当流量中继/代理,其中您的“服务器”进程与公共主机建立传出连接,然后您的“客户端”进程自己与公共主机建立传出连接,公共主机在两个连接之间转发流量。
简而言之,这不太容易做到。有点麻烦。毕竟,在 NAT 中设置静态 IP 地址和静态端口映射可能更容易。