动态主机配置协议DHCP
DHCP是一个应用层协议,负责让设备能自动获取IP地址
DHCP包的结构
0-7 | 8-15 | 16-23 | 24-31 |
---|---|---|---|
操作代码 | 硬件类型 | 硬件长度 | 跳数 |
事务ID | 事务ID | 事务ID | 事务ID |
消耗时间 | 消耗时间 | 标志 | 标志 |
客户端IP地址 | 客户端IP地址 | 客户端IP地址 | 客户端IP地址 |
你的IP地址 | 你的IP地址 | 你的IP地址 | 你的IP地址 |
服务器IP地址 | 服务器IP地址 | 服务器IP地址 | 服务器IP地址 |
网关IP地址 | 网关IP地址 | 网关IP地址 | 网关IP地址 |
客户端IP地址 | 客户端IP地址 | 客户端IP地址 | 客户端IP地址 |
客户硬件地址 | |||
服务器主机名 | |||
启动文件 | |||
选项 |
- 操作码:指出这个数据包时DHCP请求还是DHCP回复
- 硬件类型:硬件地址类型(10MB以太网、IEET802、ATM以及其他)
- 硬件地址长度:硬件地址长度
- 跳数:中继代理用以帮助寻找DHCP服务器
- 事务ID:用来匹配请求和响应的一个随机数
- 消耗时间:从客户端第一次向DHCP服务器发出地址请求到获得响应所需要的时间
- 标志:DHCP客户端能够接收的流量类型(单播、广播以及其他)
- 客户端IP地址:由你的IP地址派生
- 你的IP地址:DHCP服务器提供的IP地址
- 服务器IP地址:DHCP服务器的IP地址
- 网关IP地址:网络默认网关的IP地址
- 客户端硬件地址:客户端的MAC地址
- 服务器主机名:服务器的主机名(可选)
- 启动文件:DHCP所使用的启动文件(可选)
- 选项:用来对DHCP数据包进行扩展,以提供更多的功能
DHCP续租过程
发送(discover)数据包
0.0.0.0的68端口发往255.255.255.255的67端口,客户端使用0.0.0.0因为他还没有ip地址,数据包被发往255.255.255.255是因为这是一个独立于网络的广播地址,从而确保这个数据包会被发往网络的每台设备。因为这台设备并不知道DHCP服务器的地址,所以他的第一个数据包是为了寻找正在监听的DHCP服务器。
UDP协议
Internet Protocol Version 4, Src: 0.0.0.0, Dst: 255.255.255.255 User Datagram Protocol, Src Port: 68, Dst Port: 67
DHCP发送包
Dynamic Host Configuration Protocol (Discover) Message type: Boot Request (1) Hardware type: Ethernet (0x01) Hardware address length: 6 Hops: 0 Transaction ID: 0x3b76bd48 Seconds elapsed: 0 Bootp flags: 0x0000 (Unicast) Client IP address: 0.0.0.0 Your (client) IP address: 0.0.0.0 Next server IP address: 0.0.0.0 Relay agent IP address: 0.0.0.0 Client MAC address: IntelCor_ab:6a:8a (d0:c6:37:ab:6a:8a) Client hardware address padding: 00000000000000000000 Server host name not given Boot file name not given Magic cookie: DHCP Option: (53) DHCP Message Type (Discover) Option: (61) Client identifier Option: (50) Requested IP Address (192.168.31.49) Option: (12) Host Name Option: (60) Vendor class identifier Option: (55) Parameter Request List Option: (255) End
提供(offer)数据包
这个数据包从192.168.31.1发往192.168.31.49.由于服务器上还没有192.168.31.49这个ip地址,所以服务器会首先尝试使用ARP提供的客户端硬件地址和他通信,通信失败就直接offer(广播)来和他通信。因为两个包具有相同的事务ID,就可以和之前的请求相对应
这个数据包由DHCP服务器发出,提供了服务器自身的信息,以及它想要给客户端提供的地址。
UDP头
Internet Protocol Version 4, Src: 192.168.31.1, Dst: 192.168.31.49 User Datagram Protocol, Src Port: 67, Dst Port: 68
offer包
Dynamic Host Configuration Protocol (Offer) Message type: Boot Reply (2) Hardware type: Ethernet (0x01) Hardware address length: 6 Hops: 0 Transaction ID: 0x3b76bd48 Seconds elapsed: 0 Bootp flags: 0x0000 (Unicast) Client IP address: 0.0.0.0
这个your IP address表示服务器想要给客户端提供这个IP地址,next server IP address 表示服务器地址,DHCP标识符 Option: (54) DHCP Server Identifier (192.168.31.1)
Your (client) IP address: 192.168.31.49 Next server IP address: 192.168.31.1 Relay agent IP address: 0.0.0.0 Client MAC address: IntelCor_ab:6a:8a (d0:c6:37:ab:6a:8a) Client hardware address padding: 00000000000000000000 Server host name not given Boot file name not given Magic cookie: DHCP Option: (53) DHCP Message Type (Offer) Option: (54) DHCP Server Identifier (192.168.31.1)
IP Address Lease Time表明租期, Option: (58) Renewal Time Value表明续租时间,子网掩码 Option: (1) Subnet Mask (255.255.255.0),重新绑定时间 Option: (59) Rebinding Time Value
Option: (51) IP Address Lease Time Option: (58) Renewal Time Value Option: (59) Rebinding Time Value Option: (1) Subnet Mask (255.255.255.0) Option: (28) Broadcast Address (192.168.31.255) Option: (3) Router Option: (6) Domain Name Server Option: (43) Vendor-Specific Information Option: (12) Host Name Option: (255) End
请求(request)数据包
第三个数据包还是从0.0.0.0发出,因为这个时候还是没有完全获取ip地址,但是数据包知道了要通信的服务器 Option: (54) DHCP Server Identifier (192.168.31.1)
Internet Protocol Version 4, Src: 0.0.0.0, Dst: 255.255.255.255 User Datagram Protocol, Src Port: 68, Dst Port: 67 Dynamic Host Configuration Protocol (Request) Message type: Boot Request (1) Hardware type: Ethernet (0x01) Hardware address length: 6 Hops: 0 Transaction ID: 0x3b76bd48 Seconds elapsed: 0 Bootp flags: 0x0000 (Unicast) Client IP address: 0.0.0.0 Your (client) IP address: 0.0.0.0 Next server IP address: 0.0.0.0 Relay agent IP address: 0.0.0.0 Client MAC address: IntelCor_ab:6a:8a (d0:c6:37:ab:6a:8a) Client hardware address padding: 00000000000000000000 Server host name not given Boot file name not given Magic cookie: DHCP Option: (53) DHCP Message Type (Request) Option: (61) Client identifier Option: (50) Requested IP Address (192.168.31.49) Option: (54) DHCP Server Identifier (192.168.31.1) Option: (12) Host Name Option: (81) Client Fully Qualified Domain Name Option: (60) Vendor class identifier Option: (55) Parameter Request List Option: (255) End
确认(acknowledgement)数据包
这个过程的最后一步就是在确认数据包中给客户端发送所请求的IP地址,并在数据库中记录相关信息,这个时候客户端就有了一个IP地址
Internet Protocol Version 4, Src: 192.168.31.1, Dst: 192.168.31.49 User Datagram Protocol, Src Port: 67, Dst Port: 68 Dynamic Host Configuration Protocol (ACK) Message type: Boot Reply (2) Hardware type: Ethernet (0x01) Hardware address length: 6 Hops: 0 Transaction ID: 0x3b76bd48 Seconds elapsed: 0 Bootp flags: 0x0000 (Unicast) Client IP address: 0.0.0.0 Your (client) IP address: 192.168.31.49 Next server IP address: 192.168.31.1 Relay agent IP address: 0.0.0.0 Client MAC address: IntelCor_ab:6a:8a (d0:c6:37:ab:6a:8a) Client hardware address padding: 00000000000000000000 Server host name not given Boot file name not given Magic cookie: DHCP Option: (53) DHCP Message Type (ACK) Option: (54) DHCP Server Identifier (192.168.31.1) Option: (51) IP Address Lease Time Option: (58) Renewal Time Value Option: (59) Rebinding Time Value Option: (1) Subnet Mask (255.255.255.0) Option: (28) Broadcast Address (192.168.31.255) Option: (3) Router Option: (6) Domain Name Server Option: (81) Client Fully Qualified Domain Name Option: (43) Vendor-Specific Information Option: (12) Host Name Option: (255) End
DHCP租约内续租
第一次获得IP需要经过发现、提供、请求、确认,但是当在租约内时间需要延长租期的时候只需要请求、确认数据包。
客户端会在地址租期还有1/2的时候,向DHCP服务器发送DHCP Request报文;如果收到服务器的DHCP Ack后,客户端的IP地址租期重新回满。
如果未收到Ack,可继续使用该IP,在租期还有1/4时发出第二次Request报文;如果收到Ack,租期回满;
如果未收到Ack,在租期还有1/8时发出第三次Request报文,如果收到Ack,租期回满
如果未收到Ack,租期结束后IP被回收。
DHCP选项和消息类型
这个指的是 Option: (53) DHCP Message Type 的值代表的消息类型
类型号 | 消息类型 | 描述 |
---|---|---|
1 | 发现 | 客户端用来定位DHCP服务器 |
2 | 提供 | 服务器用来给客户端发送数据包的响应 |
3 | 请求 | 客户端用来请求服务器所提供的参数 |
4 | 拒绝 | 客户端向服务器指明数据包的无效参数 |
5 | ACK | 服务器向客户端发送所请求得配置参数 |
6 | NAK | 客户端向服务器拒绝其配置参数的请求 |
7 | 释放 | 客户端向服务器通过取消配置参数来取消租约 |
8 | 通知 | 当客户端已有IP地址时向服务器请求配置参数 |
DHCP Version6
发起:向特定地址(ff02::1:2)发送数据包,发现DHCPv6服务器
公告:服务器回复客户端,告诉客户端自己有什么配置
请求:客户端通过组播向服务器请求需要的配置
回复:服务器向客户端发送他请求的配置