首页 > 编程笔记 > TCP/IP笔记 阅读:1,272

DHCP报文格式和类型

DHCP 协议提供了多种类型的报文,但是基本格式是相同的,不同类型的报文只是报文中的某些字段值不同。

DHCP 报文的基本格式如图所示。

上图中每个字段含义如下:
了解了 DHCP 报文格式以后,下面根据 Wireshar 抓取的数据包详细讲解 DHCP 请求 IP 地址时的每种报文。

DHCP Discover 报文

DHCP Discover 报文数据包如图所示。

该数据包是客户端向服务器发送的 DHCP Discover 数据包。在上图中,由于当前客户端还没有 IP 地址,所以源 IP 地址为 0.0.0.0;客户端是向网络中所有服务器进行发送,使用的是广播包,所以目标 IP 地址为 255.255.255.255。

在 Bootstrap Protocol(Discover) 部分中显示了该数据包报文的每个字段。为了方便讲解,下面将报文字段列出并标注如下:

Bootstrap Protocol (Discover)
    Message type: Boot Request (1)    #报文的操作类型, 这是一个请求包, 所以该选项的值为1
    Hardware type: Ethernet (0x01)    #硬件类型为Ethernet
    Hardware address length: 6    #硬件地址长度为6
    Hops: 0    #经过DHCP中继数为0
    Transaction ID: 0x597c6b82    #事务ID
    Seconds elapsed: 0    #客户端启动时间
    Bootp flags: 0x0000 (Unicast)    #BOOTP标识字段
    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    #下一个服务器的IP地址
    Relay agent IP address: 0.0.0.0    #DHCP中继器的IP地址
    Client MAC address: Vmware_db:3f:0a (00:0c:29:db:3f:0a)    #客户端的MAC地址
    Client hardware address padding: 00000000000000000000    #客户端硬件地址填充
    Server host name not given    #服务器主机名
    Boot file name not given    #启动文件名
    Magic cookie: DHCP    #与BOOTP兼容
    Option: (53) DHCP Message Type (Discover)    #DHCP消息类型为53
    Length: 1
    DHCP: Discover (1)                                      #发现包
    Option: (61) Client identifier    #客户端标识符
    Length: 7
    Hardware type: Ethernet (0x01)    #硬件类型为Ethernet
    Client MAC address: Vmware_db:3f:0a (00:0c:29:db:3f:0a)    #客户端MAC地址
    Option: (50) Requested IP Address    #请求IP地址
        Length: 4
    Requested IP Address: 192.168.0.108    #请求的IP地址
    Option: (12) Host Name    #客户端主机名
        Length: 15
    Host Name: WIN-RKPKQFBLG6C    #主机名
    Option: (60) Vendor class identifier    #供应商类标识符
        Length: 8
    Vendor class identifier: MSFT 5.0    #供应商标识符为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    #NetBIOS名称服务
        Parameter Request List Item: (46) NetBIOS over TCP/IP Node Type    #NetBIOS节点类型
        Parameter Request List Item: (47) NetBIOS over TCP/IP Scope    #NetBIOS作用范围
        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
    Padding: 000000000000000000000000

上述输出信息显示了 DHCP Discover 报文中相关字段的信息。可以看到客户端的 IP 地址为 0.0.0.0,MAC 地址为 00:0c:29:db:3f:0a,主机名为 WIN-RKPKQFBLG6C,事务 ID 为 0x597c6b82 等信息。

DHCP Offer 报文

DHCP Offer 报文数据包如图所示。

该数据包是 DHCP 服务器收到客户端 DHCP Discover 广播包后返回的 DHCP Offer 包。

报文字段信息如下:

Bootstrap Protocol (Offer)
    Message type: Boot Reply (2)    #报文的操作类型, 这是一个响应包, 所以该选项的值为2
    Hardware type: Ethernet (0x01)
    Hardware address length: 6
    Hops: 0
    Transaction ID: 0x597c6b82    #事务ID
    Seconds elapsed: 0
    Bootp flags: 0x0000 (Unicast)
    Client IP address: 0.0.0.0
    Your (client) IP address: 192.168.0.108    #服务器分配给客户端的IP地址
    Next server IP address: 0.0.0.0
    Relay agent IP address: 0.0.0.0
    Client MAC address: Vmware_db:3f:0a (00:0c:29:db:3f:0a)
    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: 192.168.0.1    #DNS服务器标识地址为192.168.0.1
    Option: (51) IP Address Lease Time
        Length: 4
        IP Address Lease Time: (7200s) 2 hours
    Option: (1) Subnet Mask    #服务器分配给客户端的子网掩码
        Length: 4
        Subnet Mask: 255.255.255.0    #子网掩码为255.255.255.0
    Option: (3) Router
        Length: 4
        Router: 192.168.0.1
    Option: (6) Domain Name Server
        Length: 4
        Domain Name Server: 192.168.0.1
    Option: (255) End
        Option End: 255
    Padding: 000000000000000000000000000000000000000000000000...

其中只标注了几个重要字段的信息。由于是 DHCP 服务器给 DHCP 客户端发送提供的地址信息。因此,报文中应该包含 DHCP 服务器提供给客户端的 IP 地址信息,这里为 192.168.0.108;提供给客户端的子网掩码信息这里为 255.255.255.0。

事务 ID 为 0x597c6b82,与 DHCP Discover 报文中的事务 ID 相同,因此属于同一请求地址过程。

另外,可以看到服务器标识地址为 192.168.0.1,所以捕获的数据包的源 IP 地址为 192.168.0.1。目标地址为提供的 IP 地址 192.168.0.108。

DHCP Request 报文

DHCP Request 报文数据包如图所示。

DHCP Request 报文数据包是 DHCP 客户端向网络中所有 DHCP 服务器主机发出的 DHCP Request 消息。

由于此时客户端还没有真正拥有IP地址,因此源 IP 地址仍然为 0.0.0.0,该数据包是用来通知所有服务器的,以广播形式发出,因此目标 IP 地址为 255.255.255.255。

报文字段信息如下:

Bootstrap Protocol (Request)
    Message type: Boot Request (1)    #报文的操作类型, 这是一个请求包, 所以该选项的值为1
    Hardware type: Ethernet (0x01)
    Hardware address length: 6
    Hops: 0
    Transaction ID: 0x597c6b82    #事务ID
    Seconds elapsed: 0
    Bootp flags: 0x0000 (Unicast)
    Client IP address: 0.0.0.0    #客户端IP地址
    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: Vmware_db:3f:0a (00:0c:29:db:3f:0a)
    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: Vmware_db:3f:0a (00:0c:29:db:3f:0a)
    Option: (50) Requested IP Address
    Length: 4
    Requested IP Address: 192.168.0.108    #客户端选择租用的IP地址为192.168.0.108
    …    #省略部分信息

其中,事务 ID 与 DHCP Discover、DHCP Offer 阶段的事务 ID 相同,从输出信息还可以看到客户端请求的 IP 地址为 192.168.0.108,表示要向该 DHCP 服务器租用地址。

DHCP ACK 报文

DHCP ACK 报文数据包如图所示。

DHCP ACK 数据包是 DHCP 服务器给客户端发送的确认数据包。

报文字段信息如下:

Bootstrap Protocol (ACK)
    Message type: Boot Reply (2)    #报文的操作类型, 这是一个响应包, 所以该选项的值为2
    Hardware type: Ethernet (0x01)
    Hardware address length: 6
    Hops: 0
    Transaction ID: 0x597c6b82    #事务ID
    Seconds elapsed: 0
    Bootp flags: 0x0000 (Unicast)
    Client IP address: 0.0.0.0
    Your (client) IP address: 192.168.0.108    #客户端可以使用的IP地址为192.168.0.108
    Next server IP address: 0.0.0.0
    Relay agent IP address: 0.0.0.0
    Client MAC address: Vmware_db:3f:0a (00:0c:29:db:3f:0a)
    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: 192.168.0.1
    Option: (51) IP Address Lease Time
        Length: 4
        IP Address Lease Time: (7200s) 2 hours
    Option: (1) Subnet Mask    #客户端可以使用的子网掩码
        Length: 4
        Subnet Mask: 255.255.255.0    #子网掩码为255.255.255.0
    Option: (3) Router
        Length: 4
        Router: 192.168.0.1
    Option: (6) Domain Name Server
        Length: 4
        Domain Name Server: 192.168.0.1
    Option: (255) End
        Option End: 255
    Padding: 000000000000000000000000000000000000000000000000...

以上输出信息是服务器给客户端提供租约地址的确认包。其中,客户端可以使用的租约 IP 地址为 192.168.0.108;可以使用的子网掩码为 255.255.255.0。

编程帮,一个分享编程知识的公众号。跟着站长一起学习,每天都有进步。

通俗易懂,深入浅出,一篇文章只讲一个知识点。

文章不深奥,不需要钻研,在公交、在地铁、在厕所都可以阅读,随时随地涨姿势。

文章不涉及代码,不烧脑细胞,人人都可以学习。

当你决定关注「编程帮」,你已然超越了90%的程序员!

编程帮二维码
微信扫描二维码关注

所有教程

优秀文章