AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 414128
Accepted
Nils
Nils
Asked: 2012-08-04 12:23:26 +0800 CST2012-08-04 12:23:26 +0800 CST 2012-08-04 12:23:26 +0800 CST

DHCP 客户端认为什么是“最佳”答案?

  • 772

我们有培训室,通常安装 Windows XP(通过 PXE)。“正常”的 DNS/DHCP 基础设施是 Windows 服务器。培训室有自己的 VLAN(不同于 Windows 服务器),因此很可能在 Cisco 路由器上有一个用于 DHCP 请求的 IP 助手,该房间的所有 PC 都连接到该路由器。

现在我们想将一些 PC 转换为 Linux。这个想法是:将我们自己的带有 DHCP 服务器的笔记本电脑放入房间的 VLAN 并覆盖“正常”的 DHCP 响应。当时的想法是这应该可行,因为该 VLAN 中直接连接的 DHCP 服务器的响应时间应该比距离该 VLAN 几跳的“正常”DHCP 服务器更快。

事实证明,这是行不通的。我们必须手动释放原始 DHCP 服务器上的租约才能使其正常工作。

在笔记本电脑上,我们确实看到客户端请求 IP,并且“我们的”dhcp 正在向 Windows IP 请求发送 NACK,在此之前我们确实提供了我们自己的响应。

老问题:为什么这没有按预期进行?是什么让 PC 重获旧租约?

2012-08-08更新:

重新获得问题已在 DHCP-RFC 中进行了解释。现在这就解释了为什么 PC 重新获得旧租约。

现在我们在再次尝试之前从 Windows-DHCP-server 释放 IP。

再次 - Windows-DHCP-server 获胜。

我怀疑 dhcp-client 有一些算法可以确定客户端的“最佳”dhcp-answer。新问题是:

客户如何选择“最佳”答案?

windows
  • 4 4 个回答
  • 2136 Views

4 个回答

  • Voted
  1. ThatGraemeGuy
    2012-08-04T12:47:12+08:002012-08-04T12:47:12+08:00

    假设路由器仍然充当 DHCP 中继并将请求转发到您的原始服务器,那么它这样做的原因仅仅是因为 Windows DHCP 服务器告诉它继续使用 IP。在这种情况下,来自新服务器的 DHCPNACK 是无关紧要的,因为 DHCP 客户端将考虑所有响应,并且由于它从 Windows DHCP 机器获得了一个提议,它非常乐意使用它。

    PC:嗨,世界,我可以使用 192.168.1.123 吗?

    新 DHCP:我说不。

    老 DHCP:我说是的。

    PC:有人说是的!亲,我会用的!

    • 9
  2. Best Answer
    Tonny
    2012-08-30T07:00:59+08:002012-08-30T07:00:59+08:00

    它是供应商,甚至是特定于固件的客户端如何对多个 DHCP 应答做出反应。

    我多年来看到的变体是:

    1)接受第一个,不管它是ACK还是NACK。

    2)取第一个ACK,完全忽略NACK。

    3) 获取在设定时间间隔(通常为 5-10 秒)内收到的最后一个 ACK​​。

    示例:几年前,我们遇到了 Ricoh MFP 的问题。
    我们有 2 个 DHCP 服务器。一个提供地址,另一个仅提供额外的 DHCP 选项。第二台服务器总是先回答。
    理光使用的变体 1) 即使第一个报价仅包含 DHCP 选项。在我们向理光解释了问题后,理光通过固件更新将其更改为变体 2)。

    • 4
  3. Nils
    2012-08-05T13:19:38+08:002012-08-05T13:19:38+08:00

    如果没有其他帮助 - RTFM(阅读精美的手册)。在这种情况下,第一个是命中。

    RFC 2131概述了 DHCP 操作。

    第 1.6 节指出 DHCP必须:

    在服务器重新启动后保留 DHCP 客户端配置,并且,只要可能,尽管重新启动 DHCP 机制,仍应为 DHCP 客户端分配相同的配置参数,

    现在有趣的问题是,这个设计目标是如何在一个不了解其过去的客户身上实现的。第 3.2 节概述:

    3.2 客户端-服务器交互——重用之前分配的网络地址

    如果客户端记住并希望重新使用以前分配的
    网络地址,则客户端可以选择省略
    上一节中描述的某些步骤。图 4中的时间线图
    显示了客户端重用先前分配的网络地址的典型客户端-服务器交互中的时序关系。

    1. 客户端在其本地子网上广播 DHCPREQUEST 消息。该消息在“请求的 IP 地址”选项中包含客户端的网络地址。由于客户端还没有收到它的网络地址,它不能填写“ciaddr”字段。BOOTP 中继代理将消息传递给不在同一子网上的 DHCP 服务器。如果客户端使用“客户端标识符”来获取其地址,则客户端必须在 DHCPREQUEST 消息中使用相同的“客户端标识符”。

    2. 知道客户端配置参数的服务器向客户端响应 DHCPACK 消息。服务器不应该检查客户端的网络地址是否已被使用;此时客户端可以响应 ICMP Echo Request 消息。

    因此,持有活动租约的 DHCP 服务器通过使用协议中的快捷方式获得优先权。

    1. 客户端:DHCREQUEST(MAC 地址,广播,将在本地广播域中传输 - 这里是本地 VLAN,并通过 IP 助手到 Windows-DHCP 服务器)
    2. 笔记本电脑-DHCP-服务器:DHCPOFFER
    3. Windows-DHCP-Server:嘿 - 我已经认识你了 - DHCPACK
    4. 客户:哦 - 我收到了两个回复。一个已经认识我的人。很酷,我会接受的

    从那时起,客户端将忽略 Laptop-DHCP-Server。

    所以我们的解决方案可能是(我会在实际测试时更新):

    1. 确保客户端已关闭
    2. 关闭笔记本电脑上的 DHCP 服务器,笔记本电脑上的假客户端 MAC,DHCP 请求
    3. 发布IP
    4. 恢复原来的IP和MAC,开启DHCP-Server
    5. 打开客户端并执行 PXE 引导...
    • 3
  4. Shane Madden
    2012-08-27T13:20:37+08:002012-08-27T13:20:37+08:00

    新问题可能应该在一个不同的问题中——问题的标题与问题的大部分内容完全不相符。

    无论如何,关于客户端如何选择要使用的报价,在没有当前租约的情况下:这取决于客户端,但在我所知道的每个 DHCP 客户端实现中,这是一场简单的竞赛.

    RFC 2131涵盖了这一点:

    DHCP 客户端可以自由地使用任何策略在客户端从其接收 DHCPOFFER 消息的服务器中选择 DHCP 服务器。

    那里有一个IETF 草案,它似乎已经死了,它会增加选择过程的可配置性,并且还提到了乏善可陈的客户端实现(十多年前,但变化不大):

    实际上,大多数供应商在这里的政策实施都是非常基本的(例如,首先收到报价或收到第一个可接受的报价)并且是“硬编码的”(即不可配置)。

    让两个 DHCP 服务器向具有不同配置的同一网络提供服务只会导致竞争,从可靠性或可预测性的角度来看,这是不可取的。没有理由不能让您的单个 DHCP 服务器提供您需要的东西。

    • 3

相关问题

  • 知道任何适用于 Windows 的快速可编写脚本的 ftp 客户端吗?[关闭]

  • 如果 Windows 服务崩溃,如何自动重新启动它?

  • 无法安排任务(访问被拒绝)

  • 物理机重启时自动重启虚拟机(VMWare)

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve