目录
一、定义
二、概述
2.1 DHCP的由来
2.2 DHCP的3种地址分配方式
三、DHCP工作流程
发现阶段:DHCP Discover
提供阶段:DHCP Offer
选择阶段:DHCP Request
确认阶段 DHCP ACK
需要注意的点
三、DHCP报文类型
四、wireshark抓包分析
DHCP discoery
DHCP Offer
DHCP Request
DCHP Ack
dynamic host configuration protocol 动态主机配置协议
动态地配置主机的ip地址,子网掩码,网关,dns服务器,租期
前身是BOOTP,属于应用层协议。
是局域网的网络协议,使用UDP协议传输。
67端口:DHCP Server;68端口:DHCP Client
自动分配:DHCP给客户端分配永久性的IP地址。
动态分配:DHCP给客户端分配的IP地址过一段时间后会过期;客户端也可以主动释放该地址。
手动配置:由用户手动为客户端指定IP地址。
主要分为四步:
发现阶段 DHCP Discover
提供阶段 DHCP Offer
选择阶段 DHCP Request
确认阶段 DHCP Ack
目的:DHCP客户端以广播的形式发送Discover包(主机并不知道DHCP的服务器的位置)
发送者:源ip是0.0.0.0
发送方式:目标ip是255.255.255.255,也就是网段内所有安装了TCP/IP协议的主机/服务器
响应者:DHCP服务器
发送者:所有收到DHCP Discover的DHCP服务器
发送方式:服务器会以广播的形式发送DHCP Offer
响应者:只有client的发送者才会响应。
所携带的信息:各DHCP服务器会在地址池中找一个尚未出租的IP地址和网关信息构造一个Offer报文,告知用户本服务器可以为其提供IP地址。
但是只是预分配,还需要client通过ARP(免费ARP)检测该IP是否重复。
因为可能有不同的DHCP服务器发送了DHCP Offer,而且有可能预分配的IP地址是冲突的。(一般client会选择第一个收到收到的DHCP Offer包中的IP地址)
免费arp
用处:验证IP是否冲突
主机A广播一个免费arp,该包中有主机A请求使用的地址,若网络中已有主机使用了主机A请求使用的地址,就会发出应答,表示网络中已有主机使用了主机A所请求的地址。
目的:DHCP客户端选择其中一台DHCP服务器提供的IP地址(客户端通常会选择第一个回应offer报文的服务器)
发送者:客户端
发送方式:广播方式发送,因为需要通知所有的DHCP server,客户端选择了哪一个DHCP server
响应者:服务器查看包内容,客户端是否选择了自己提供的IP地址,若是的话则发送DHCP Ack
所包含的信息:client所选定的DHCP server,请求IP地址
需要注意还有其他情况,client会发送DHCP request
DHCP客户端成功获取IP地址后,在地址使用租期减去1/2时,会向DHCP服务器发送单播request报文延续租期,若没有收到DHCP ACK报文,在租期超过3/4时,再发送广播request报文延续租期。
目的:DHCP服务器确认提供IP地址,告知客户端可以使用DHCP server提供的地址。
发送者:被客户端选择的DHCP Server。
发送方式:广播
包含的信息:DHCP服务器所提供的地址和其他配置信息
除了客户端选择的DHCP Server意外,其他的DHCP Server都会回收先前预分配的IP地址。
需要注意的点:
DHCP报文类型 |
描述 |
DHCP Discover |
DHCP客户端请求地址时,并不知道DHCP服务器的位置,因此DHCP客户端会在本地网络内以广播方式发送请求报文,目的是发现网络中的DHCP服务器,所有收到Discover报文的DHCP服务器都会发送回应报文,DHCP客户端据此可以知道网络中DHCP服务器的位置。 |
DHCP Offer |
DHCP服务器收到Discover报文后,就会在所配置的地址池中查找一个合适的IP地址,加上相应的租约期限和其他配置信息(如网关、DNS服务器等),构造一个Offer报文,发送给用户,告知用户本服务器可以为其提供IP地址。< 只是告诉client可以提供,是预分配,还需要client通过ARP检测该IP是否重复> |
DHCP Request |
DHCP客户端可能会收到很多Offer,所以必须在这些回应中选择一个。Client通常选择第一个回应Offer报文的服务器作为自己的目标服务器,并回应一个广播Request报文,通告选择的服务器。DHCP客户端成功获取IP地址后,在地址使用租期过去1/2时,会向DHCP服务器发送单播Request报文续延租期,如果没有收到DHCP ACK报文,在租期过去3/4时,发送广播Request报文续延租期。 |
DHCP ACK |
DHCP服务器收到Request报文后,根据Request报文中携带的用户MAC来查找有没有相应的租约记录,如果有则发送ACK报文作为回应,通知用户可以使用分配的IP地址。 |
DHCP NAK |
如果DHCP服务器收到Request报文后,没有发现有相应的租约记录或者由于某些原因无法正常分配IP地址,则发送NAK报文作为回应,通知用户无法分配合适的IP地址。 |
Frame 105: 590 bytes on wire (4720 bits), 590 bytes captured (4720 bits) on interface 0
①表示是第105帧的详细信息,其中该帧大小590bytes。
Ethernet II, Src: Hiwifi_65:c6:84 (d4:ee:07:65:c6:84), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
②以太网帧头部信息:
源mac地址d4:ee:07:65:c6:84,目的mac地址是ff:ff:ff:ff:ff:ff。目的mac地址是广播地址主要是因为此时客户端还不知道哪一台是DHCP服务器,所以需要确保该包让网络上的每一台设备都收的到,这样正在监听的DHCP服务器才能收到。
Internet Protocol Version 4, Src: 0.0.0.0, Dst: 255.255.255.255
③ipv4包头信息:
因为此时客户端还没有ip地址,所以源ip地址是0.0.0.0;而目的ip地址则是广播ip地址255.255.255.255。
User Datagram Protocol, Src Port: 68 (68), Dst Port: 67 (67)
④传输层UDP协议的头部:
源端口(客户端端口)是68,目的端口(DHCP服务器的端口)是67
Bootstrap Protocol (Discover)
⑤bootstrap protocol,也就是dhcp协议的内容
Bootstrap Protocol (Discover)
Message type: Boot Request (1)
#DHCP消息类型,discover属于请求的步骤之一,所以值是1
Hardware type: Ethernet (0x01)
#硬件类型是Ethernet
Hardware address length: 6
#硬件地址长度为6
Hops: 0
#经过DHCP中继树为0
Transaction ID: 0x57be6146
#事务ID
Seconds elapsed: 0
Bootp flags: 0x8000, Broadcast flag (Broadcast)
Client IP address: 0.0.0.0
#客户端IP地址
Your (client) IP address: 0.0.0.0
#自己的(客户端)IP地址
Next server IP address: 0.0.0.0
Relay agent IP address: 0.0.0.0
Client MAC address: Hiwifi_65:c6:84 (d4:ee:07:65:c6:84)
#客户端的mac地址
Client hardware address padding: 00000000000000000000
Server host name not given
#服务器主机名
Boot file name not given
#启动文件名
Magic cookie: DHCP
Option: (53) DHCP Message Type (Discover)
Length: 1
DHCP: Discover (1)
Option: (61) Client identifier
Length: 7
Hardware type: Ethernet (0x01)
Client MAC address: Hiwifi_65:c6:84 (d4:ee:07:65:c6:84)
Option: (60) Vendor class identifier
Length: 11
Vendor class identifier: hiwififiwih
Option: (55) Parameter Request List
Length: 7
Parameter Request List Item: (1) Subnet Mask
Parameter Request List Item: (3) Router
Parameter Request List Item: (6) Domain Name Server
Parameter Request List Item: (12) Host Name
Parameter Request List Item: (15) Domain Name
Parameter Request List Item: (28) Broadcast Address
Parameter Request List Item: (44) NetBIOS over TCP/IP Name Server
Option: (255) End
Option End: 255
Padding: 000000000000000000000000000000000000000000000000...
Frame 106: 342 bytes on wire (2736 bits), 342 bytes captured (2736 bits) on interface 0
①表示是第106帧的详细信息,其中该帧大小342bytes。
Ethernet II, Src: CiscoInc_04:33:45 (00:12:7f:04:33:45), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
②以太网帧头部信息:
源mac地址00:12:7f:04:33:45,目的mac地址是ff:ff:ff:ff:ff:ff。目的mac地址是广播地址主要是因为此时此时客户端还没有IP地址,所以将由下列两个步骤发送包给客户端:
Internet Protocol Version 4, Src: 172.16.220.1, Dst: 255.255.255.255
③ipv4包头信息:
源ip地址是172.16.220.1;因为此时客户端还没有ip地址,所以目的ip地址则是广播ip地址255.255.255.255。
User Datagram Protocol, Src Port: 67 (67), Dst Port: 68 (68)
④传输层UDP协议的头部:
源端口(DHCP服务器的端口)是67,目的端口(客户端端口)是68
⑤bootstrap protocol,也就是dhcp协议的内容
Bootstrap Protocol (Offer)
Message type: Boot Reply (2)
Hardware type: Ethernet (0x01)
Hardware address length: 6
Hops: 0
Transaction ID: 0x57be6146
#与DHCP Discover的事务ID相同,而客户端正式通过事务ID辨认出该响应包是对应自
#己原来的请求包
Seconds elapsed: 0
Bootp flags: 0x8000, Broadcast flag (Broadcast)
Client IP address: 0.0.0.0
#客户端地址
Your (client) IP address: 172.16.220.2
#预分配的客户端IP地址
Next server IP address: 0.0.0.0
Relay agent IP address: 0.0.0.0
Client MAC address: Hiwifi_65:c6:84 (d4:ee:07:65:c6:84)
#客户端mac地址
Client hardware address padding: 00000000000000000000
Server host name not given
Boot file name not given
Magic cookie: DHCP
Option: (53) DHCP Message Type (Offer)
Length: 1
DHCP: Offer (2)
Option: (54) DHCP Server Identifier
Length: 4
DHCP Server Identifier: 172.16.220.1
#DHCP服务器的标识符
Option: (51) IP Address Lease Time
Length: 4
IP Address Lease Time: (86400s) 1 day
Option: (58) Renewal Time Value
Length: 4
Renewal Time Value: (43200s) 12 hours
Option: (59) Rebinding Time Value
Length: 4
Rebinding Time Value: (75600s) 21 hours
Option: (1) Subnet Mask
Length: 4
Subnet Mask: 255.255.255.0
Option: (3) Router
Length: 4
Router: 172.16.220.1
Option: (6) Domain Name Server
Length: 4
Domain Name Server: 114.114.114.114
Option: (255) End
Option End: 255
Padding: 0000000000000000000000000000
Bootstrap Protocol (Request)
Message type: Boot Request (1)
Hardware type: Ethernet (0x01)
Hardware address length: 6
Hops: 0
Transaction ID: 0xe622096d
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_a9:b7:9e (08:d4:0c:a9:b7:9e)
Client hardware address padding: 00000000000000000000
Server host name not given
Boot file name not given
Magic cookie: DHCP
Option: (53) DHCP Message Type (Request)
Length: 1
DHCP: Request (3)
Option: (61) Client identifier
Length: 7
Hardware type: Ethernet (0x01)
Client MAC address: IntelCor_a9:b7:9e (08:d4:0c:a9:b7:9e)
Option: (50) Requested IP Address
Length: 4
Requested IP Address: 172.16.220.50
Option: (12) Host Name
Length: 5
Host Name: zb168
Option: (81) Client Fully Qualified Domain Name
Length: 8
Flags: 0x00
A-RR result: 0
PTR-RR result: 0
Client name: zb168
Option: (60) Vendor class identifier
Length: 8
Vendor class identifier: MSFT 5.0
Option: (55) Parameter Request List
Length: 12
Parameter Request List Item: (1) Subnet Mask
Parameter Request List Item: (15) Domain Name
Parameter Request List Item: (3) Router
Parameter Request List Item: (6) Domain Name Server
Parameter Request List Item: (44) NetBIOS over TCP/IP Name Server
Parameter Request List Item: (46) NetBIOS over TCP/IP Node Type
Parameter Request List Item: (47) NetBIOS over TCP/IP Scope
Parameter Request List Item: (31) Perform Router Discover
Parameter Request List Item: (33) Static Route
Parameter Request List Item: (121) Classless Static Route
Parameter Request List Item: (249) Private/Classless Static Route (Microsoft)
Parameter Request List Item: (43) Vendor-Specific Information
Option: (255) End
Option End: 255
详细解释与前面类似,有几个需要注意的点:
Ethernet II, Src: IntelCor_a9:b7:9e (08:d4:0c:a9:b7:9e), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
Internet Protocol Version 4, Src: 0.0.0.0, Dst: 255.255.255.255
目的地址都选择广播地址是因为需要告诉所有其他的DHCP Server自己所选择的IP地址是哪一个和DHCP服务器是哪一个:
Option: (50) Requested IP Address
Length: 4
Requested IP Address: 172.16.220.50
随后其他的DHCP服务器撤销他们所提供的IP地址
Bootstrap Protocol (ACK)
Message type: Boot Reply (2)
Hardware type: Ethernet (0x01)
Hardware address length: 6
Hops: 0
Transaction ID: 0xe622096d
Seconds elapsed: 0
Bootp flags: 0x0000 (Unicast)
Client IP address: 0.0.0.0
Your (client) IP address: 172.16.220.50
Next server IP address: 0.0.0.0
Relay agent IP address: 0.0.0.0
Client MAC address: IntelCor_a9:b7:9e (08:d4:0c:a9:b7:9e)
Client hardware address padding: 00000000000000000000
Server host name not given
Boot file name not given
Magic cookie: DHCP
Option: (53) DHCP Message Type (ACK)
Length: 1
DHCP: ACK (5)
Option: (54) DHCP Server Identifier
Length: 4
DHCP Server Identifier: 172.16.220.1
Option: (51) IP Address Lease Time
Length: 4
IP Address Lease Time: (86400s) 1 day
Option: (58) Renewal Time Value
Length: 4
Renewal Time Value: (43200s) 12 hours
Option: (59) Rebinding Time Value
Length: 4
Rebinding Time Value: (75600s) 21 hours
Option: (1) Subnet Mask
Length: 4
Subnet Mask: 255.255.255.0
Option: (3) Router
Length: 4
Router: 172.16.220.1
Option: (6) Domain Name Server
Length: 4
Domain Name Server: 114.114.114.114
Option: (255) End
Option End: 255
Padding: 0000000000000000000000000000