我正在尝试连接不同子网中的 2 台设备。
Device 1:
IP address: 172.20.35.1
netmask: 255.255.0.0
gateway: 172.20.1.1
Device 2:
IP address: 172.20.100.100
netmask: 255.255.255.0
gateway: 172.20.100.1
路由器有IP地址172.20.1.1
。
当我从设备 1 向设备 2 发送 UDP 数据报时,设备 2 接收到了它但无法回复,因为网关 IP 地址(设备 2)错误。
但是路由器是否应该能够将这两个网络连接在一起,如下所示http://www.eventhelix.com/realtimemantra/networking/ip_routing.htm#.VMo5Sx3n5Qs? 必须手动配置路线吗?
device 2
另外:如果我更改如下所示的网络配置会怎样?
Device 1:
IP address: 172.20.35.1
netmask: 255.255.0.0
gateway: 172.20.1.1
Device 2:
IP address: 192.168.170.100
netmask: 255.255.255.0
gateway: 192.168.170.1
使用此网络配置,device 2
永远不会收到 UDP 数据报。这是为什么?
编辑:
只是为了澄清一下。我其实不是新手。我之所以知道所描述的问题,是因为我的许多客户都倾向于按照我上面描述的方式配置他们的设备,然后最终无法通过 访问它们TELNET
。我设法通过实现 来解决这个问题,multicast tunnel
允许用户multicast UDP protocol
在他们弄乱配置时使用 更改远程设备上的网络配置,如上所示。无论如何,我在一家公司进行了一次电话面试,经理说这些设备之间的通信总是可能的,因为这就是路由器的用途。我被邀请参加一次个人面试,我知道这个问题会再次出现。所以我在这里发布了这个问题,以帮助我制定一个更好的答案。
答案1
我正在尝试连接不同子网中的 2 台设备。
设备 1:IP 地址:172.20.35.1 网络掩码:255.255.0.0 网关:172.20.1.1
设备 2:IP 地址:172.20.100.100 网络掩码:255.255.255.0 网关:172.20.100.1
路由器的 IP 地址为 172.20.1.1 !! 当我从设备 1 向设备 2 发送 UDP 数据报时,设备 2 接收到了它但无法回复,因为网关 IP 地址(设备 2)错误。
真正的问题是子网重叠,并且路由器接口 172.20.1.1 上没有代理 arp。
172.20.35.1 处的主机认为 172.20.1.1 位于同一子网,因此 172.20.35.1 直接向 172.20.1.100 发送 ARP。但是,172.20.0.0/16 子网上没有任何内容可以回复。
解决这个问题有几种选择:
(短期破解)在 172.20.1.1 上启用代理 arp。只要 172.20.1.1 有到 172.20.35.0/24 的路由,172.20.1.1 就会用自己的 mac 地址响应 172.20.1.100 的 ARP,并且假设没有其他问题,您将在这些子网之间实现双向通信。
(长期)重新组织您的网络,避免子网重叠。这需要重新编址主机;可能涉及大量主机。
对 172.20.35.0/24 执行 NAT,使其看起来不像是其他子网。NAT 解决方案的支持难度可能会逐渐增加,但它避免了对代理 arp 的需求。
另外:如果我更改网络配置,
device 2
如下所示,会怎样?使用此网络配置,
device 2
永远不会收到 UDP 数据报。这是为什么?
看起来您需要一条通往 192.168.170.0/24 的路由
答案2
我认为实际上存在一些问题。第一个是这样的:
无需访问路由器配置
Mike 建议的所有操作都需要更改路由器配置。
第二个问题是这样的:
路由器的IP地址是172.20.1.1!!
当且仅当路由器在两个子网中都有 IP 接口时,才有可能在子网 A 和 B 之间转发流量(即路由)。路由器的 IP 接口是 IP 地址,因此如果您的路由器只有一个 IP 地址,则无法进行路由。
您没有明确说明“路由器”的具体含义,但例如,普通的 DSL 路由器就是这样工作的。它只有一个 IP 地址,用于您的内部网络,它通过 DSL 线路从 ISP 获取另一个 IP 地址。因此,它将最终拥有两个 IP,并且能够在这两个子网之间路由流量。您通常甚至没有选择创建新的 VLAN 以在 LAN 端拥有更多子网。
这里有一点好奇。您已为客户端 1 配置了 IP 地址和 /16 子网(掩码为 255.255.0.0)。子网 172.20.0.0/16 的 IP 地址范围是 172.20.0.1-172.20.255.255,最后一个是广播地址。路由器 IP 通常是子网中最低或最高的,所以我预计是 172.20.0.1 或 172.20.255.254。这不是规则,只是通常的做法。
如果您的路由器的子网实际上是 /16,那么您可以轻松解决第一个问题:将第二台设备配置为子网掩码 255.255.0.0,并使用 172.20.1.1 作为默认网关。这会将其置于与设备 1 相同的子网中,并且流量将流动。这不是路由,而是 L2 交换。
我从设备 1 向设备 2 发送一个 UDP 数据报,设备 2 收到了它但无法回复,因为网关 IP 地址(设备 2)错误。
这不一定与您的网关地址有任何关系。UDP 是一种单向协议。该协议本身不包含任何发送响应或确认的机制。要让您的设备 2 响应 UDP 数据报,您必须运行一个在收到数据包时会做出响应的应用程序。如果您正在测试连接性,请使用为此目的开发的 ping。ICMP 是一种 TCP 协议,因此它是双向的。您的设备 1 将向设备 2 发送 ICMP 回显请求(即 ping 数据包),设备 2 将以 ICMP 回复进行响应。
使用此网络配置,设备 2 永远不会收到 UDP 数据报。这是为什么呢?
现在我们回到 IP 接口。正如 Mike 所说,您需要有一条进入此网络的路由,因此您的路由器必须具有 IP 地址 192.168.170.1/24。
回到你的问题标题。如果你无法配置路由器,你唯一能做的就是按照我上面描述的那样配置设备 2 子网和网关,而且这只有在路由器的子网为 /16 时才有效。到目前为止提出的所有其他解决方案都需要访问路由器配置。