根据IP地址唯一识别路由器后面的机器

时间:2010-04-22 09:49:17

标签: networking ip-address router subnet

首先是一些背景知识。我在局域网中的每台机器上都安装了一个.net客户端代理。他们也在同一个局域网上与我的中央服务器[网站]进行交互。

我的网站必须弄清楚哪些机器可以相互通信。例如,一个子网的机器不能直接与另一个子网的机器通信,而无需配置路由器等。但是同一子网中的机器应该能够直接相互通信。

我面临的问题是局域网设置如图1所示。

Figure 1 http://www.freeimagehosting.net/uploads/3105becc0a.png

因为Comp1,Comp2和Comp3在路由器后面,所以它们的ipaddress 192.168.1.2直到192.168.1.4。我在这些计算机上的客户端代理将相同的ipaddress报告回服务器。但是,机器Comp4,Comp5也有相同的ipaddresses。

因此,就我的服务器而言,有2台机器具有相同的ipaddress。不仅如此,因为所有机器的子网掩码都是255.255.255.0,我的服务器会误以为Comp1可以直接与Comp5通信,这是不可能的。

那么,我该如何解决这个问题呢?我需要在客户端或服务器中进行哪些更改,以便我可以支持此方案。这两个是我控制的唯一事情。

3 个答案:

答案 0 :(得分:3)

  

编辑:似乎是网络图   过度简化,可能会有   多个路由器/子网级别。我的   原来的答案不会处理这个   场景。另外,有限制   仅修改客户端应用程序或服务器   应用程序,而不是篡改   路由器和防火墙   这更难。

     

EDIT2 :使用'arp -a'即可解压缩   路由器的MAC地址。如果   客户端应用程序可以设法执行此操作   这个谜题已解决

客户端应用程序知道本地计算机地址并将其传递给服务器应用程序。

当连接进入时,服务器应用程序知道远程地址。这将是机器地址或路由器地址。

从这两个值中,您可以找出您所要求的内容。

例如:

Server app receives connection from 10.10.10.2 with client supplying 192.168.1.2

Server app receives connection from 10.10.10.3 with client supplying 192.168.1.3

“远程地址”区分子网。

因此,您需要弄清楚的是如何提取客户端连接的远程地址。如果您使用任何流行的Web技术为您的服务器应用程序,那么这很容易。

答案 1 :(得分:1)

一种方法是让各个客户端计算机使用广播消息确定他们可以看到谁。让每个客户端监听某个特定的UDP端口,并且每个客户端将其存在广播到本地广播域。当客户端可以通过这种方式看到对方时,他们也可能会相互建立TCP连接。

如果服务器需要知道哪些客户端可以相互通信,那就让客户端告诉服务器。

答案 2 :(得分:0)

如果网络图很复杂,我想如果找到你需要的东西会非常困难。 您还应该考虑到Comp1可以建立与Comp6的直接连接。

我建议的解决方案是探测。客户端从服务器接收所有其他客户端的列表,并尝试与每个客户端建立连接。假设在网络中假定任意数量的路由器/防火墙/ NAT,这将是了解哪些客户端真正可访问的唯一方法。当然,对于大量计算机来说,它的扩展性并不高。