如果我有一台带网卡的计算机,它将有一个 MAC 地址和一个本地主机 IP 127.0.0.1。那么带网卡的计算机最初如何发现路由器并连接到它们?我知道一旦连接,路由器将使用 DHCP 为其分配一个 IP,或者如果配置了静态 IP,则分配一个 IP。
但在计算机连接到网络之前,与其相关的唯一信息难道不是它的 MAC 地址吗?计算机如何向路由器发送数据以要求其连接?此外,由于计算机没有 IP,因此还没有 ARP 功能。
这看起来像是纯粹的第 2 层通信。
答案1
计算机可以发送任何一种通过网络接口传输数据 – 如果您连接到以太网,则操作系统将完全控制其发送的以太网帧。处理 IP、ARP 和其他协议的是操作系统,而不是网络硬件。
唯一的问题是如何常规项目该计算机无需 IP 地址即可发送数据。
在 IPv4 中,DHCP 客户端使用原始数据包套接字– 这意味着它直接发送第 2 层帧;DHCP 客户端在发送时必须构建自己的 IP 标头,并在接收时执行自己的过滤。(例如,请参阅数据包(7)在 Linux 上。
执行此操作时,DHCP 客户端软件将只填写“0.0.0.0”(又称“未指定”地址)作为用于 DHCP“发现”和“请求”消息的 IP 数据包中的源地址。这些数据包播送因此目的地是“255.255.255.255”,并且不需要 ARP 来发送它们,因为 IPv4 广播使用固定的第 2 层地址。
(所以,你可以说 IPv4 中的 DHCP是实际上是伪装成 UDP/IP 的第 2 层通信。)
同时,在 IPv6 中,主机将(通常)总是每个接口上都有一个自动分配的“链路本地”地址。这意味着不需要原始套接字 - 基础设施数据包(例如 DHCPv6 请求或路由器请求)可以直接使用标准 UDP 或“原始 IP”套接字从链路本地地址发送。(后者记录在原始(7)。