计算机如何为自己分配IP地址? IP地址不是由路由器分配给计算机的吗?

计算机如何为自己分配IP地址? IP地址不是由路由器分配给计算机的吗?

我可以做这个:

/sbin/ip addr add 172.17.0.12 dev eth0

这种可能性与我关于 IP 地址分配方式的心理模型(显然过于简单且不真实)相冲突。

根据这个心理模型:

  • 计算机不会为自己分配 IP 地址;
  • 相反,计算机由管理其连接的网络的服务器分配 IP 地址。
  • 这意味着家用 PC 的路由器、这些路由器的 ISP 服务器等等。

对我来说,为自己分配一个IP地址的想法似乎……毫无意义?那么,如果计算机声明“这是我的 IP 地址”怎么办? IP 地址的作用是让路由器知道数据包应该转发到哪里。

在上面的示例中,当计算机172.17.0.12为自己分配专用网络地址时,只有当该专用网络的路由器知道并同意该计算机拥有该地址时,这才有意义。但在这种情况下,情况并非如此!那么任何数据包都可以到达eth0这台计算机吗?

答案1

虽然其他答案概述了静态 IP 寻址存在的原因,但我想回答您问题中关于其工作原理的部分。

你在这里缺少的是ARP。想象一下 172.17.0.0/16 专用网络。您的一个客户端已“给自己分配”静态 IP 地址 172.17.0.12。第二个客户端 172.17.0.42 想要与 172.17.0.12 通信。 ARP 之后,172.17.0.42 发送广播。它实际上是在到处喊叫“谁拥有 IP 地址 172.17.0.12?”。 172.17.0.12 应答并建立通信。请注意,如果有两个客户端声称拥有相同的 IP 地址,则会出现混乱。

答案2

IP 地址可以由 LAN 上的负责设备(例如服务器或路由器)使用称为动态主机配置协议。 (这是定义在RFC 2131并至少扩展至RFC 2132.)

设备还可以自行配置其地址,从而无需使用 DHCP。您演示的命令ip正是执行此操作。

请注意,此场景中有两个主要注意事项

  1. 如果您选择的地址已被另一台设备主动使用,则两台设备(您的设备和另一台设备)的流量将会发生冲突。
  2. 如果您选择的地址不属于 LAN 子网,您将无法与任何其他设备进行有用的通信(例如,在需要 172.12.1.*/24 的网络上设置 192.168.1.1/24)。

最后,您问为什么服务器应该进行自我配置。这里的快速答案是 DHCP 服务器本身需要知道自己的 IP 地址,然后才能开始服务请求。其他可能性包括网络路由器和中央身份验证服务器(Windows Active Directory 领域中的域控制器,或 UNIX/Linux 领域中的 LDAP 服务器)。

答案3

为自己分配一个IP地址可以更容易地知道该计算机拥有什么IP。路由器将通过 DHCP 或基于 MAC 地址保留的 DHCP 地址来完成此操作。

  • 纯 DHCP 将分配一系列 IP 地址中任何给定的未使用地址,如果您在多个系统上运行服务器/服务,这并不理想。

  • DHCP 保留的 IP 地址将与任何给定的 MAC 地址保持一致。这是理想的,但必须写下来或让目标计算机在线才能将其添加到保留列表中,这很麻烦。此外,如果路由器坏了,您就必须重新做一遍。

  • 分配您自己的 IP 地址非常有用,因为您可以从计算机本身执行此操作。如果您将其移动到另一个网络内或移动到另一个网络,它将保留在计算机上。缺点是,如果您的地址已被占用,则在解决地址冲突之前网络接口将不会上线。但是,如果您为其分配 DHCP 区域之外的 IP,并记下不要分配该地址网络上的其他计算机,则不会出现该问题。

大多数网络预路由流量都会到达所有接口和/或标头中具有 IP 的接口进行响应。因此,是的,数据包将到达 eth0 接口,但它是否响应或在该网络上运行取决于 IP 和子网掩码是否正确以及全双工或半双工设置等。大多数默认设置对于大多数家庭或不复杂的网络来说已经足够了。

答案4

实际上,网络上的所有主机自己申请自己的IP地址。总是!

在本地网络端,路由器具有特定范围内的 IP 地址(例如 192.168.9.x),如果路由器收到 192.168.9.12 等字节数据包,路由器会将其转发到其物理端口配置的与目标地址匹配的 IP 范围 (192.168.9.0/24)。在该端口上,它在本地网络上广播:“哪个主机声明 IP 地址 192.168.9.12?”。任何将其 NIC 配置为具有该特定 IP 地址的主机都会应答,从而声明该地址。如果一切顺利,则只有一台主机声明它,路由器会将数据包发送到该主机。

本次广播“谁有 IP 地址 xxxx”并通过回复来声明它,发生在较低级别,并且仅适用于 LAN(本地网络)。该协议称为“ARP”(地址解析协议)

换句话说:

在这个较低级别上,路由器将数据包发送到的地址实际上是声明 IP 地址的主机的网络接口卡 (NIC) 的 MAC 地址。它通过回复路由器广播的 ARP 请求来实现这一点。

因此,实际上是主机本身决定了它在网络上声称拥有的 IP 地址。

在比只有几台主机更大的网络上,跟踪哪个主机将使用哪个 IP 地址将是一项乏味的任务。然后想象一下在网络上允许的所有计算机上编辑一个文件,只告诉它它的 IP 地址!

另外,如果两个(或更多)主机声明相同的 IP 地址,则两者都会出现严重的网络问题!这就是为什么在本地网络上拥有一个中央服务来跟踪哪个 MAC 地址可以使用哪个 IP 地址是非常实用的。这就是所谓的“DHCP”(动态主机配置协议),它还可以用于通知主机本地网络上的许多其他配置参数。

DHCP 协议也在与 ARP 协议相同的较低级别上运行。当主机配置其 NIC(网络接口卡)时(最常见的是在启动时),它会广播“我可以在此网络上使用哪个 IP 地址?”。这是由 DHCP 客户端软件完成的。由于它是广播,因此所有主机都会收到它,但只有 DHCP 服务器会应答,希望提及唯一的 IP 地址、其网络掩码、网关(路由器)地址以及可能的其他内容。主机将其保留在内存中,知道它可以在网络上安全地声明该 IP 地址一段时间。

但这仅有效,因为主机合作通过向 DHCP 服务器请求要使用的 IP 地址。最终是总是主机决定他们要声明的IP地址......

相关内容