动态主机配置协议DHCP

动态主机配置协议DHCP

DHCP是一个应用层协议,负责让设备能自动获取IP地址

DHCP包的结构

0-78-1516-2324-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续租过程

  1. 发送(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
    
    
    
  2. 提供(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
    
    
  3. 请求(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
    
    
  4. 确认(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拒绝客户端向服务器指明数据包的无效参数
5ACK服务器向客户端发送所请求得配置参数
6NAK客户端向服务器拒绝其配置参数的请求
7释放客户端向服务器通过取消配置参数来取消租约
8通知当客户端已有IP地址时向服务器请求配置参数

DHCP Version6

发起:向特定地址(ff02::1:2)发送数据包,发现DHCPv6服务器

公告:服务器回复客户端,告诉客户端自己有什么配置

请求:客户端通过组播向服务器请求需要的配置

回复:服务器向客户端发送他请求的配置


版权声明:本文为timoraty原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。