[TCP/IP详解]:DHCP

  • 简介

    • DHCP属于应用层协议,它的作用是为主机或者路由器指定配置信息(IP地址, 子网掩码, DNS服务器地址等)

    • DHCP前身是被称为BOOTPInternet引导程序协议, 该协议已经过时,但是DHCP完全兼容BOOTP

    • DHCP使用租用机制来将这些配置信息租用给客户机,但租期到了之后,客户机可以选择续约

    • DHCP的传输层协议为UDP, 客户机,服务器分别使用固定端口号68, 67

1. 地址池与租用

DHCP服务器为客户机提供三种地址分配: 自动分配,动态分配,手动分配, 其中动态分配使用的最多,接下来只关注动态分配

  • 在动态分配中,客户机向DHCP服务器请求一个IP地址,服务器从地址池中选出一个可用的地址作为响应

    这个地址池是一个连续的IP地址范围

  • 服务器会根据客户机请求中提供的信息并结合外部信息(如接受请求的接口)为客户机分配IP地址

    当服务器向客户机提供租约之后,会将租约写入非易失性存储器当中,以确保当服务器重启之后租约信息不会丢失

DHCP消息格式

1

该图其实是BOOTP的消息格式,但是与DHCP完全兼容,DHCP可以在上面的选项超载区域携带额外选项

DHCP协议操作

  • 总流程

    2

    当一个主机第一次连接该子网时,会经历上面的阶段

    • DHCPDISCOVER

      客户机使用链路层广播来寻找可用的DHCP服务器,消息中包含了自身的相关信息,如自身MAC地址

    • DHCPOFFER

      如果有DHCP服务器接受到了请求,就会发送DHCPOFFER响应报文, 发送方式为单播,因为已经知道了客户机的MAC地址

      响应消息中包含服务器提供的IP地址、子网掩码、租期以及提供IP的DHCP服务器的IP地址

    • DHCPQEQUEST

      之所以还需要该过程是因为可能不止有一个DHCP服务器向客户机发送DHCPOFFER, 但一个客户网卡只能接受一个租约服务

      因此客户机再次进行广播,广播消息中包含了其第一次接受到的DHCP服务器的IP地址,其他发送租约的DHCP接受到该消息之后

      就会收回自己的租约(把分配出去的IP地址归还会地址池等)

    • DHCPACK

      如果服务器可以分配的话,它会响应一个DHCPACK消息表示确认,可如果不能分配的话,就会响应一个DHCPNAC消息

    • 检测冲突

      客户机会向服务器发送一个检测消息(如ACD),用于检测分配的地址是否重复

      如果冲突,那么客户机就会向服务器发送一个DHCPDECLINE的消息表示该地址不能使用, 在一段时间过后,可能进行重新检测

      如果客户机主动放弃租约,会向服务器发送一个DHCPRELEASE消息

  • 租约更新

    有时,上述流程可以被简化成DHCPREQUESTDHCPACK, 这发生在客户机已经有一个IP地址并且希望更新其租约的情况下,客户机会通过DHCPREQUEST消息来请求其正在使用的地址

  • 获取其他配置信息

    客户机还可以发送一个DHCPREFORM消息来获取更多非地址的配置信息


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!