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: 中继代理地址。
- 中继代理相关详见:博客
相关
- DHCP: RFC 2131
- DHCP6: RFC 3315
- DHCP wiki
- DHCP wiki 中文
- rfc2132
 
