为什么 DHCP 客户端能够接受 DHCP Offer 数据包?

网络工程 dhcp 协议理论
2021-07-22 23:18:40

我看到一个 DHCP 数据包流,它至少包含 4 个数据包:

  • 发现

  • 提供

  • 要求

  • 确认

使用发现数据包,客户端尝试查找 DHCP 服务器。由于客户端不知道自己的IP地址和DHCP服务器的IP地址,src和目的IP地址分别为0.0.0.0和255.255.255.255。

使用提供数据包,服务器通过将 src IP 地址设置为他的 IP 并将目标 IP 地址设置为客户端的新 IP 地址来响应客户端。但我现在有一个问题。此时的客户端不知道他的 IP 地址。客户端如何在不知道他的 IP 地址的情况下接受这个数据包?

3个回答

请记住,交换使用第 2 层寻址,而不是第 3 层寻址。该帧寻址到主机 MAC 地址,因此主机将接受该帧。对于未配置的 IPv4 进程,第 3 层可能会出现问题。在配置 IPv4 之前,一些通常较旧的客户端无法处理单播第 3 层数据包,但有一种解决方法。客户端设置广播标志,以便它以广播的形式接收报价。

这一切都在 _ RFC 2131, 动态主机配置协议中进行了解释

在客户端使用 DHCP 进行初始配置的情况下(在客户端的 TCP/IP 软件完全配置之前),DHCP 要求创造性地使用客户端的 TCP/IP 软件和对 RFC 1122 的自由解释。TCP/IP 软件应该接受并将IP地址配置之前交付给客户端硬件地址的任何IP数据包转发到IP层;在配置 TCP/IP 软件之前,DHCP 服务器和 BOOTP 中继代理可能无法将 DHCP 消息传递给无法接受硬件单播数据报的客户端。

为了解决一些在 TCP/IP 软件配置之前无法接受 IP 单播数据报的客户端,DHCP 使用了“标志”字段 [21]。最左边的位定义为 BROADCAST (B) 标志。此标志的语义在本文档的第 4.1 节中讨论。标志字段的其余位保留供将来使用。它们必须由客户端设置为零,并被服务器和中继代理忽略。图 2 给出了“标志”字段的格式。

                                1 1 1 1 1 1
            0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
            +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
            |B|             MBZ             |
            +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

            B:  BROADCAST flag

            MBZ:  MUST BE ZERO (reserved for future use)

            Figure 2:  Format of the 'flags' field

如果以以太网客户端和主机/路由器为例,客户端接受与否取决于以太网MAC地址,这是一个48位的数字,而不取决于32位的目的IP地址在全部。如果不处于混杂模式(由 tcpdump 和/或 wireshark 激活),以太网 MAC 将阻止所有传入流量,这些流量不是广播、多播或专门针对客户端的。DHCP 服务器将通过从 DHCP 发现数据包中提取客户端 MAC 地址来确保它绕过硬件过滤。一旦传入数据包的以太网报头在客户端被剥离,通常是软件问题而不是硬件问题来决定是否接受数据包(例如只接受第一个响应的 DHCP 服务器,

DHCP 提供消息:服务器将在此消息中响应主机,指定未租用的 IP 地址和其他 TCP 配置信息。此消息由服务器广播

优惠信息

源IP地址:DHCP SERVER IP地址

目标 IP 地址:255.255.255.255

源MAC地址:DHCP SERVER MAC地址

目标 MAC 地址:FFFFFFFFFFFF