美文网首页
动态主机配置协议(DHCP)

动态主机配置协议(DHCP)

作者: 谢朴欢 | 来源:发表于2017-12-07 00:18 被阅读21次

    1. 简介

    • 计算机要互联通信自身肯定需要网络 ,如IP地址、子网掩码、DNS服务器地址等。而为了实现IP地址的自动设置与统一分配,DHCP就这样孕育而生了。
    • 动态主机配置协议(DHCP)是一个应用层协议,也就是位于TCP/IP 5层协议模型的第5层,同时它也是一个客户机-服务器协议。
    • DHCP的设计基于早期的Internet引导程序协议(BOOTP),使用UDP/IP协议,客户端使用端口68,服务端使用端口67。
    • DHCP服务器可提供三种地址分配:
      • 手动分配
        由网络管理员在DHCP服务器手工配置DHCP客户机的IP地址。
      • 自动分配
        当DHCP客户机第一次向DHCP服务器请求到IP地址后,这个地址就永久地分配给了该DHCP客户机,不可撤销。
      • 动态分配(最常见)
        与自动分配采用相同的方法,只不过获得的IP地址是有租约期限的,一旦租约到期,地址就会被回收,不过可以通过续订租约以延长期限。

    2. 消息格式

    DHCP扩展了BOOTP,DHCP消息格式的定义也采用了扩展BOOTP的方式以保持两种协议之间的兼容性。消息格式由一个固定大小的初始部分和一个可变长度的选项部分组成。

    DHCP消息格式

    字段说明

    初始部分

    字段 说明
    Op 消息类型,1表示请求,2表示响应
    HW Type 硬件地址类型,1表示以太网
    HW Len 硬件地址长度,如以太网地址长度6个字节值就为6
    Hops 保存消息传输过程中继的的次数,默认为0
    Transaction ID 事物ID。客户机所选择的一个随机数,服务器把它复制到响应消息中,用于将应答和请求匹配
    Secs 获取到IP地址或者续约过程开始到现在所消耗的时间,以秒为单位。在没有获得IP地址前该字段始终为0
    Flags 标志字段。该16位比特字段的最左边的位为 0 ,表示单播,为 1 表示广播
    Client IP address 客户机IP地址
    "Your" IP address DHCP服务器为客户机提供的IP地址存放在此字段
    (Next) Server IP address 下一个为DHCP客户端分配IP地址等信息的DHCP服务器IP地址。仅在DHCP OfferDHCP ACK报文中显示,其他报文中显示为0。
    Gateway (Relay) IP address DHCPBOOTP中继器填写,如果消息没有经过中继器则此字段为0
    Client Hardware address 客户机硬件地址
    Server Name 可选的服务器主机名,是一个null结尾的字符串,由服务器填写
    Boot File Name 引导文件名。是一个null结尾的字符串,DHCP OFFER 报文中提供有效的文件路径,其他消息中不显示, 一般不使用
    Options 选项字段。可变字段,格式为"代码+长度+数据",是DHCP消息和BOOTP消息的区别之处

    选项部分

    代码 字段名称
    1 子网掩码
    3 路由器地址
    6 域名服务器
    15 域名
    50 请求的IP地址
    51 地址租用期
    53 DHCP消息类型
    54 服务器标识符
    55 参数请求列表
    56 DHCP错误信息
    58 租约更新时间
    59 租约重新绑定时间
    61 客户机标识符
    119 域搜索列表
    255 结束

    其中53(DHCP消息类型选项)有多个可能的值:

    • DHCP DISCOVER
    • DHCP OFFER
    • DHCP REQUEST
    • DHCP ARK
    • DHCP NAK
    • DHCP DECLINE
    • DHCP RELEASE
    • DHCP INFORM
    • DHCP FORCERENEW
    • DHCP LEASEQUERY
    • DHCP LEASEUNASSIGNED
    • DHCP LEASEUNKNOWN
    • DHCP LEASEACTIVE

    3. 操作和状态

    操作过程

    DHCP协议操作过程

    上图显示的是当一个DHCP客户端向DHCP服务器新请求一个IP地址的过程:


    Wireshark抓包结果

    获取过程

    1. 发现阶段

      • 由于不知DHCP服务器的IP地址和Mac地址,DHCP客户机通过向本地网络广播一个DHCP DISCOVER请求报文以向网络中的DHCP服务器请求网络配置信息。
      • 最后本地网络上每个DHCP服务器都会接收到DHCP发现报文,而同时其他主机也会收到此报文,只不过当拆包后发现源IP地址是0.0.0.0后就会抛弃这个包。
    2. 提供阶段

      • 当DHCP服务器收到发现报文,它就从它的地址池中选出一个空闲IP填充到DHCP OFFER"Your" IP address字段,并在选项字段加上子网掩码,路由器,DNS,服务器标识,IP地址租用时间等字段。再广播此报文(因为此时还不知客户机的IP地址)
    3. 请求阶段

      • 最后客户机可能会收到多个DHCP服务器的DHCP OFFER报文,一般是选最先到达那个报文并作出回应请求,即广播发出一个 包含服务器选项字段的DHCP REQUEST报文。这里还使用广播的目的是因为要让所有的DHCP服务器知道客户机选择了哪个服务器提供的IP。
    4. DHCP服务器收到来自客户机的DHCP REQUEST报文,而只有符合服务器标识这个选项字段的DHCP服务器才会对此作出响应:

      • 如果服务器可以分配此IP则以DHCP ACK报文进行响应。
      • 如果服务器无法分配此IP则以DHCP NAK报文进行响应。

      其他DHCP服务器则清除与此请求相关的状态。响应方式还是跟提供阶段一样广播此报文。

      • 当DHCP客户机收到的响应是DHCP NAK报文,则会重新发送 DHCP DISCOVER报文。
      • 若收到的是DHCP ACK报文则会执行地址冲突检测(ACD)探测获得的IP地址是否未被使用。
        • 如果已经被使用则向DHCP服务器发送一个DHCP DECLINE报文以通知该地址已经不能被使用。之后经过默认的10秒延时后客户机可再次重试。
        • 如果未被使用则获得了该IP地址在租用期间的使用权。

    成功获取后的所有网络配置信息可以通过一条命令查看
    Windows下:

    ipconfig /all

    Linux下:

    ifconfig

    租约更新过程

    因为实在获得可以使用是IP地址的基础上进行租约时间的更新,所以不必向获取过程那么麻烦,只需要向DHCP服务器发送DHCP REQUEST报文,DHCP服务器收到请求报文如果响应一个DHCP ACK则更新成功。
    同样这个更新租约时间的过程也可以用一条命令来实现
    Windows下:

    ipconfig /renew

    Linux下:

    dhclient

    租约的释放

    如果想在租约结束前释放以获取的IP地址,可以向DHCP服务器发送DHCP RELEASE报文。同样这个释放操作也可以用一条命令来实现
    Windows下:

    ipconfig /release

    Linux下:

    dhclient -r

    相关文章

      网友评论

          本文标题:动态主机配置协议(DHCP)

          本文链接:https://www.haomeiwen.com/subject/ggwnbxtx.html