我可以为网络上的设备分配任何静态 IP 地址吗?还是必须位于 DHCP 服务器(或路由器)定义的子网内?

我可以为网络上的设备分配任何静态 IP 地址吗?还是必须位于 DHCP 服务器(或路由器)定义的子网内?

目前,我的 DHCP 服务器正在分配 192.168.0.1/24 范围内的 IP 地址。如果我在设备上设置静态 IP 地址(例如 192.168.1.10),会发生什么情况?

出于好奇,如果我将 IP 地址设置为(1)其他地方存在的地址(例如在 www 上),或(2)DHCP 服务器被要求分配给另一个 MAC 地址的地址,会发生什么?

答案1

这可能取决于您的路由器,但通常分配静态 IP 地址无论是否在为动态分配预留的范围内都会起作用 - 只要它在该段/网络的子网范围内即可。在您的示例中,设置192.168.1.10在子网上不起作用/24,但在/16子网上会起作用。

如果将 IP 地址设置为其他地方具有静态 IP 的地址,则它取决于客户端操作系统(即,它可能会检查并且不接受分配) - 但它可能会起作用,并且 IP 地址冲突会导致复杂和未定义的结果,从而导致两个系统出现各种奇怪的行为/可达性问题。

答案2

目前,我的 DHCP 服务器正在分配 192.168.0.1/24 范围内的 IP。如果我在设备上设置静态 IP(例如 192.168.1.10),会发生什么情况?

DHCP 服务器的配置无关紧要,重要的是路由器本身配置使用的子网。通常,DHCP 范围实际上比整个 /24 子网要窄,例如,即使 /24 从 .0 到 .255,DHCP 服务器也只会提供地址 .100-.199。

简而言之,您将无法与任何东西进行通信,因为其他设备不知道将发给您的数据包发送到哪里:

  1. 您的其他设备不会识别该地址属于本地子网,并且会通过其“默认网关”(即您的路由器)发送数据包。

  2. 您的路由器也无法识别该地址属于其任何本地子网,并且会通过其“默认网关”发送数据包,该网关是您的 ISP(它将丢弃该数据包)。

但是如果你配置了设备位于同一 192.168.1.0/24 子网中,它们能够相互通信,因为同一子网中的设备之间的数据包是直接交换的,而不是路由的。(换句话说,路由器相信设备本身知道将数据包发送到哪个 MAC,而不会查看它们的 IP 地址。)

出于好奇,如果我将 IP 设置为 (1) 其他地方存在的某个 IP(例如 www 上的 IP),会发生什么情况?

实际上和上面一样。如果路由表显示它不属于本地子网,那么它就不属于本地子网,发往“你”的数据包将被发送到其他地方。(在这种情况下,它们最终可能会到达真实的该 IP 地址的所有者。

或者 (2) DHCP 服务器被要求分配给另一个 MAC 地址?

如果其他设备仍处于离线状态,则没有什么特别的。它会正常工作。

请注意,DHCP 服务器仅发布设备配置信息他们自己DHCP 服务实际上并没有告诉路由器如何处理该地址——无论该地址是否由 DHCP 发出,路由器仍然每次使用 ARP 将 IP 地址转换为 MAC 地址。


(您可能正在考虑称为“静态 ARP”的另一个功能,它一些路由器有,例如 pfSense,其配置通常与 DHCP 租约表绑定以方便使用。在 pfSense 中,启用此功能实际上会告诉路由器不是对这些 IP 地址使用 ARP – 只要 DHCP 服务器的数据库表明该地址属于该 MAC 地址,路由器也会始终向该 MAC 地址发送数据包。

但大多数路由器不要实现“静态 ARP”,因此无论 DHCP 说什么,尝试使用来自不同设备的 IP 地址总是可行的。)

答案3

我浏览了现有的答案,并没有看到具体说明。

如果你在设备上手动设置 IP 地址,你不仅可以,而且应该分配 DHCP 池之外的地址。否则 DHCP 服务器可能会为另一台设备分配相同的 IP 地址。

通常您应该想出一些宽松的约定,例如让 DHCP 分配三位数地址(.100-.254),并将其他地址留给手动分配。

答案4

你问了几个问题,让我试着逐一解释并依次回答:

目前,我的 DHCP 服务器正在分配 192.168.0.1/24 范围内的 IP。如果我在设备上设置静态 IP(例如 192.168.1.10),会发生什么情况?

首先我们应该确定什么是 DHCP(它解决什么问题,以及它如何工作)。

网络可以被认为具有多层(参见:OSI 层)。IP 地址是识别网络上谁是谁的一种手段第三层(第 3 层,网络层)。IP 位于物理层和数据链路层(L1 和 L2)之上。身体的层是你“插入”的东西(就典型的以太网电缆而言,确实是插入的!),而数据链接层处理两个或多个设备如何通过它进行通信。

所以是的,两台设备可以在没有 IP 地址的情况下通过家庭网络进行通信。它们可能会使用“硬件地址”(或 MAC 地址),这些地址类似于 IP 地址 - 但位于更低的层级。

IP(第 3 层)解决的众多问题之一是物理网络之间的遍历。并非所有事物都使用以太网 - 而且我们通常希望出于安全原因(以及以超出以太网能力的方式)隔离物理和逻辑区域。

IP 位于以太网(以及许多其他 L2/L1 组合)之上,为每个设备提供一个或多个 IP 地址,以识别它们。在底层,它仍被转换为物理地址。

但有一个小小的管理问题。我们通常不想一直设置和更改 IP 地址,尤其是当我们的设备一直加入/离开我们的物理网络时(比如你口袋里的手机)。

DHCP 是一种网络服务/协议,可在给定网络上自动分配和跟踪 IP 地址。加入物理网络并建立数据链路(第 1 层和第 2 层)后,设备可以“请求” IP 地址。从字面上讲,它们会向连接到同一第 2 层的每个人发出一条消息,说“有人能给我一个 IP 地址吗?”

任何监听的 DHCP 服务器都可能响应。在您的家庭示例中,它将为新设备分配该192.168.0.1-254范围内的 IP 地址。它还将记住它被赋予该设备特定的 IP 地址(可能是通过在一个小的注册表中记录 MAC 地址),以确保没有其他人错误地获得相同的 IP 地址。

此外,如果设备断开连接并重新连接 - DHCP 服务器可以重新为其分配相同的一遍又一遍地使用 IP 地址 - 这有助于更高层不会意外中断。

补充说明:在回答时,我完全忘记了原来的问题。“如果我静态地为设备分配一个由 DHCP 池使用的 IP 地址,会发生什么?”。这已经在另一个答案中准确处理

出于好奇,如果我将 IP 设置为(1)其他地方存在的 IP(例如 www 上的 IP),会发生什么情况?

这是一个很好的问题。这是 IP(第 3 层)试图解决的问题的一部分。两个物理上分离的第 2 层网络如何相互通信?

IP 可以穿越不同的第 2 层网络。它确实可以。事实上,它穿越了全球数十亿个网络。这已经持续了很长时间(IP 版本 4 - 又名 IPv4),因为有足够的 IP 地址来唯一地标识互联网上连接的每台设备。(然而,互联网的增长不可避免地已经超过了可用的 IPv4 地址数量 - 这是另一个主题 - 请参阅 IPv6!)。

IPv4 的发明者采用了一种称为网络地址转换的技术,该技术允许多个设备“隐藏”在一个 IP 地址后面。这意味着您的房子可以在公共互联网上表示为一个 IP 地址,并且您家中的所有设备都可以拥有其他人家使用的 IP 地址。

这种方法的前提是每个人都同意在自己的家中(以及公司等)使用一组严格的“私有”IP 地址范围。一共有 3 组 -A 类、B 类和 C 类其中一个你看起来很熟悉(C类)——它开始了192.168.x.y

我们都同意这些 IP 地址将绝不可用于公共互联网。它们仅供私人网络使用。网络地址转换允许您的家庭路由器隐藏您的所有私有 IP 地址(在您的家庭网络上)位于单个公共 IP 地址在互联网上。

这就让我们想到了一个问题:您的家用路由器有什么作用(除了为您的房子提供 DHCP 服务!)。

您的路由器知道两件事。它知道您的私有(内部)IP 网络是什么。它还知道通向公共网络(互联网)的路由(路径)。通向互联网的路由由您的 ISP 提供。您的路由器不关心您的 ISP 做什么,但它知道从您的本地网络前往互联网的流量需要通过您的 ISP。所以它这样做。

这是 DHCP 的另一个功能。您家里的所有设备也需要知道互联网在哪里。它们需要知道路由。对于它们来说,它们对您的 ISP 一无所知。它们只知道您的路由器。因此它们知道这一点:任何源自它们自己并发往互联网的流量都必须发送(路由)到您的路由器。

您可以实际看到这一点 - 在 Windows 上(假设您使用的是 Windows),打开命令提示符并输入route print。您将看到 IP 地址范围列表以及您的计算机知道将流量发送到这些地址的位置。您应该看到一个“默认”路由,看起来像Dest: 0.0.0.0 ... Gateway: 192.168.0.1。这表示“任何与任何其他规则不匹配的内容都应发送到192.168.0.1,因为它们知道如何处理它。

DHCP 除了分配 IP 地址外,还可以告诉设备网络的“默认网关”是什么。而你的家用路由器就是这样做的!当它向设备发送 DHCP 回复时,它会同时指定私人的要使用的 IP 地址,以及默认网关(本身)。

现在回答你的问题。将会发生两件事。

首先,您的家用路由器将拒绝对其执行任何操作 - 因为 IP 地址位于“错误的一侧”(它知道您的专用网络应该只192.168.0.1在其上包含地址)。但让我们假设您已告诉路由器您的专用网络实际上位于8.8.8.0/24错误的一侧。好吧,您的路由器可能不会抱怨 - 在这种情况下,一切都将正常工作,直到您家中的设备尝试访问 Google(例如,8.8.8.8!)。

会发生什么 - 您的设备会说“8.8.8.8是本地的,我不需要通过我的默认网关发送它”。流量永远不会到达互联网。也许另一个本地设备会得到它。谁知道呢?您的路由器也会拒绝路由它 - 因为你已经告诉它 IP 地址范围现在是私人的(不在公共互联网上)。

或者 (2) DHCP 服务器被要求分配给另一个 MAC 地址?

在这种情况下,将发生未定义的行为。 IP 最终位于 OSI 第 2 层和第 1 层之上。 这完全取决于这些层上发生的事情 - 流量可能会也可能不会到达正确的位置 - 因为您有多个身体的所有设备都认为它们是同一个 IP。大多数操作系统(包括 Windows)都会尝试检测这种情况(当它们看到来自另一台具有相同 IP 地址的设备发出的意外流量时)并向您发出警报。

相关内容