返回
Featured image of post 网络协议 —— DHCP

网络协议 —— DHCP

DHCP

DHCP - 动态主机设置协议(Dynamic Host Configuration Protocol)。 DHCP 是一个应用层协议。基于UDP

作用

  • 用于内网或网络服务供应商自动分配 IP 给用户。
  • 作为内部管理员对所有计算机进行中央管理的手段。

历史

  • DHCP 在 1993 年 10 月成为标准协议,它的前身是BOOTP协议。
  • BOOTP:BOOTP 是一种网络协议,让电脑或其他周边仪器可以从服务器下载启动程序。

数据包类型

  • DHCP 发现(DISCOVER):client 在物理子网上发送广播来寻找可用的服务器。
  • DHCP 提供(OFFER):当 DHCP 服务器收到一个来自客户的 IP 租约请求时,它会提供一个 IP 租约。
  • DHCP 请求(REQUEST):当客户 PC 收到一个 IP 租约提供时,它必须告诉所有其他的 DHCP 服务器它已经接受了一个租约提供。
  • DHCP 确认(Acknowledge,ACK):确认租约,包含租期和客户可能请求的其他所有配置信息。
  • DHCP 释放 (RELEASE):客户端向 DHCP 服务器发送一个请求以释放 DHCP 资源,并注销其 IP 地址。
  • DHCP NAK:服务器回复客户,客户要求的网址不能被分配。

原理/流程

  • 客户主机发送 DHCP 服务器发现 (DISCOVER)广播包
  • 服务器收到 DISCOVER 包后,回复OFFER单播或广播包。【疑问?】
  • 客户主机收到 OFFER 包后,发送REQUEST广播包
  • 服务器回复ACK单播或广播包。包含分配的 IP 及网关 IP(next server IP)、租约等。

协议结构

        +-------+--------+--------+--------+
        |8 bits | 8 bits | 8 bits | 8 bits |
        +-------+--------+--------+--------+
        | Op    | Htype  | Hlen   | Hops   |
        +-------+--------+--------+--------+
        | Xid                              |
        +----------------------------------+
        | Secs           | Flags           |
        +----------------+-----------------+
        | Ciaddr                           |
        +----------------------------------+
        | Yiaddr                           |
        +----------------------------------+
        | Siaddr                           |
        +----------------------------------+
        | Giaddr                           |
        +----------------------------------+
        | Chaddr (16 bytes)                |
        +----------------------------------+
        | Sname (64 bytes)                 |
        +----------------------------------+
        | File (128 bytes)                 |
        +----------------------------------+
        | Option (variable)                |
        +----------------------------------+
  • Op: 信息类型。如:客户端请求为 1,服务器回复为 2。
  • Htype:硬件类型。如:Ethernet(0x01)
  • Hlen: 硬件地址长度。如:6。(MAC 地址)
  • Hops: 跳数。
  • Xid:传输 ID。
  • Secs: 过去的时间。【疑问】
  • Flags:标记。
  • Ciaddr:客户端 IP 地址。(这里应该是续约的时候用的)
  • Siaddr:下一个服务器 IP 地址。
  • Yiaddr:你的 IP。(分配给客户机的 IP)
  • Giaddr:中继代理 IP。【???】
  • Chaddr:客户机硬件地址。(Ethernet 中就是 Mac 地址)
  • Sname:服务器主机名称。
  • File:文件名。
  • Options:选项。详见rfc2132
    • 1:子网掩码;
    • 3:路由 (网关);
    • 12:主机名
    • 50:请求的 IP 地址
    • 51:租约时间
    • 53:DHCP 消息类型。即上面的几种类型。
    • 54:服务器标识。

疑问

DHCP 服务器是否可以把一台主机拉黑?

  • 这个应该由 DHCP 软件提供。

服务器回复为什么是单播或广播包

  • Flags 中设置BROADCAST = 0时,则是单播;否则是广播。这是为了健壮性,同时兼容单播和多播。

Secs 字段是哪一个时间段?

  • 从获取到 IP 地址或者续约过程开始到现在所消耗的时间。

Giaddr 字段作用是什么?

  • giaddr: 中继代理地址。
  • 中继代理相关详见:博客

相关

相信美好的事情即将发生。
Built with Hugo
Theme Stack designed by Jimmy