DHCP协议理论解析与抓包实践

目录

一、定义

二、概述

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服务器,租期

 

二、概述

2.1 DHCP的由来

前身是BOOTP,属于应用层协议。

是局域网的网络协议,使用UDP协议传输。

67端口:DHCP Server;68端口:DHCP Client

 

2.2 DHCP的3种地址分配方式

自动分配:DHCP给客户端分配永久性的IP地址。

动态分配:DHCP给客户端分配的IP地址过一段时间后会过期;客户端也可以主动释放该地址。

手动配置:由用户手动为客户端指定IP地址。

 

三、DHCP工作流程

主要分为四步:

发现阶段 DHCP Discover

提供阶段 DHCP Offer

选择阶段 DHCP Request

确认阶段 DHCP Ack

 

 

发现阶段:DHCP Discover

目的:DHCP客户端以广播的形式发送Discover包(主机并不知道DHCP的服务器的位置)

发送者:源ip是0.0.0.0

发送方式:目标ip是255.255.255.255,也就是网段内所有安装了TCP/IP协议的主机/服务器

响应者:DHCP服务器

 

提供阶段:DHCP Offer

发送者:所有收到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 Request

目的: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 ACK

目的:DHCP服务器确认提供IP地址,告知客户端可以使用DHCP server提供的地址。

发送者:被客户端选择的DHCP Server。

发送方式:广播

包含的信息:DHCP服务器所提供的地址和其他配置信息

 

需要注意:

除了客户端选择的DHCP Server意外,其他的DHCP Server都会回收先前预分配的IP地址。

 

需要注意的点:

  • 68是客户端口
  • 67服务端口
  • dhcp报文都是广播包

 

三、DHCP报文类型

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地址。

 

 

四、wireshark抓包分析

DHCP discoery

 

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...

 

DHCP Offer

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地址,所以将由下列两个步骤发送包给客户端:

  • 尝试使用arp提供的客户端硬件地址与之通信
  • 若失败,则直接把服务端提供的地址广播出去,通常都会是直接将DHCP discover广播出去

 

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

 

DHCP Request

Bootstrap Protocol

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地址

 

DCHP Ack

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

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值