如何发送一个UDP数据包到特定的计算机时,所有网络上的计算机具有相同的公网IP地址? [关闭](

2019-07-29 03:00发布

这里的问题,这是非常简单(明白。):

我有2台电脑在家里,它们都具有相同的公共IP地址(如1.2.3.4)。

我曾在某咖啡的地方(不同的网络)1台计算机,以便它有不同的公网IP地址。

我想在咖啡的地方发送来自计算机的消息(例如“你好”)连接到计算机我在家里之一。

我使用Java,认为发件人以下非常简单的程序(我脱下了简单异常处理):

在主要我做的:

sendPacket("hi");

我有

void sendPacket(String message){
    DatagramSocket myServerSocket = new DatagramSocket(9000);    // server socket
    byte[] sendData = new byte[message.length()];    // build msg
    sendData = message.getBytes();
    InetSocketAddress destSocketAddr = new InetSocketAddress("1.2.3.4", 9000);    // destination socket addr
    DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, destSocketAddr);     // make packet 
    myServerSocket.send(sendPacket);    // send packet
}

如果我有我的听众(接收机)在家里(两者使用相同的公网IP地址1.2.3.4),我怎么可以指定我打算将此邮件发送给其中一两台电脑上运行?

Answer 1:

如果两个家庭计算机具有相同的公网IP地址,这意味着这些计算机使用NAT或网络地址转换 (严格来说,它的端口地址转换或NAT过载,但通常被称为只是NAT)。

这意味着,为了启动从外到任何内部NAT你的机器的连接, 端口转发 ,必须在你的路由器(通常是调制解调器)设置,让你映射你的公共本地IP地址的特定端口你家里面一个特定的私有IP地址。

比方说,你有计算机A和B在你家是这样的:

             Router / Modem
              192.168.0.1 
                  ||
       ++=========++========++
       ||                   ||
  Computer A           Computer B
  192.168.0.2          192.168.0.3

现在,让我们假设你需要计算机A的TCP端口上侦听9000 (港口主要可以TCP或UDP),你可以公开端口转发9000直接到计算机A的9000端口:

Forward TCP/UDP on public port 9000 to private port 9000 on 192.168.0.2

若要将消息发送到计算机A,只是把它发送到1.2.3.4:9000 。 但是,如果其他PC仅侦听端口9000吗? 您也无法分配公共端口9000 ,因为它采取的是计算机答:你可以这样做:

Forward TCP/UDP on public port 9001 to private port 9000 on 192.168.0.3

这样一来,B计算机仍然接收端口的消息9000 ,但他们需要通过互联网发送到1.2.3.4:9001 。 作为数据包进入(离开!)您的家庭网络路由器的NAT自动转换的端口。

最后,发送者将需要以调整的目的端口为“谈话”到NAT后面不同的机器。

希望这是有道理的。



Answer 2:

通常,这些NAT防火墙将端口的流量转发回始发计算机为您服务。

所以,如果你有一台机器发送流量到你的咖啡店计算机上的端口5000 ,另一个将流量发送到咖啡店计算机上的端口5001 ,路由器将跟踪哪些端口是为哪些客户。 因此,当你发送的数据包港口回来5000 ,它会去头机,当你发送的数据包港口回来5001 ,它会去到第二台机器。

不幸的是,你的机器在咖啡店大概也是一个NAT防火墙后面,和你家的机器可能无法直接解决这个问题,无论是。

如果你能良好的网络上的主机服务器,那么这两个同龄人可以联系服务器和中继所有流量通过 。 这不是一个坏的选择,但它不能很好地扩展。 (对于三台机器,这没什么大不了的。三年万台,这是相当重要的。)

您可以探讨其他的选择,试图穿越NAT防火墙,如UPnP的 ,但这些机制通常需要某种方式为客户前来洽谈会议,他们将工作之前。



文章来源: How to send a UDP packet to a specific computer when all the computer on the network have the same public IP address? [closed]