我可以做这个:
/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
正是执行此操作。
请注意,此场景中有两个主要注意事项
- 如果您选择的地址已被另一台设备主动使用,则两台设备(您的设备和另一台设备)的流量将会发生冲突。
- 如果您选择的地址不属于 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地址......