每日一个计算机小知识:DHCP

每日分享一个有趣的计算机小知识,今日话题:DHCP

DHCP是 Dynamic Host Configuration Protocol 的缩写,动态主机配置协议,它是一个用于局域网内自动分配IP地址和配置信息的网络协议,位于OSI七层网络模型里的应用层,须借助传输层的UDP协议(通过67和68端口)来发送和接收数据。

DHCP用一台或一组DHCP服务器来自动为客户端设备分配和管理以下网络配置参数:

  • IP 地址(IPv4 或 IPv6)
  • 子网掩码(Subnet Mask)
  • 默认网关(Default Gateway)
  • DNS服务器地址等

就是当我们用手机或电脑连接网络时,DHCP服务器(像家里一般就是路由器)会自动为我们完成下面3件比较关键的事情:

  1. 给我们的设备分配一个唯一标识的IP地址,如:192.168.1.300,确保我们的设备能在网络中被唯一识别。
  2. 提供子网掩码、默认网关(即路由器地址)这些配置信息,好让设备知道怎么与局域网内以及外网通信。
  3. 下发DNS服务器的地址,让设备可以通过域名找到对应的IP地址。

DHCP 收发消息都是基于UDP协议(需快速分配IP,本身也有重试机制,所以不用担心网络丢包), DHCP 服务器固定使用67端口 接收客户端请求并发送响应,DHCP 客户端固定使用68端口发送请求并接收响应。

DHCP服务器分配IP地址过程的四次握手:

发现 -> 提供 -> 请求 -> 确认

  1. Discover

当客户端设备接入网络并设置为自动获取IP时,它并不知道DHCP服务器在哪里,所以客户端会广播一个Discover消息来询问DHCP服务器。

  1. Offer

当网络中的DHCP服务器(如路由器)收到这个广播消息后,会从预先配置好的IP池中选一个可用的IP地址,然后再通过广播方式(此时客户端还无 IP,无法单播)回复一个Offer消息,告诉客户端可用的IP地址,如果有多台DHCP服务器,客户端则会收到多个Offer消息。

  1. Request

客户端会选择收到的第一个Offer消息,然后再广播发送一个Request消息,未被选中的DHCP服务器收到消息后则会自动回收之前发出的IP地址。

  1. ACK

被选中的DHCP服务器收到客户端发来的Request消息后,会再发送一个单播(此时已经知道客户端选了自己给的IP地址)ACK消息进行确认,消息中包含IP地址的有效租约和其他配置信息。当客户端收到这个ACK消息时,就会用选择的IP地址和配置参数来配置自己的网络。

没有DHCP时怎么上网?

DHCP的核心作用其实就是减少人工配置和高效管理利用IP地址,在没有DHCP之前,想要上网需要通过下面2种方式:自己手动配置静态IP地址或使用PPPoE拨号。

第一种需要在计算机的网络设置中手动指定IP地址、子网掩码、默认网关以及DNS服务器等信息,现在我们的电脑中依然可以这样设置,但是很容易配置重复IP导致设备无法联网。第二种则每次上网前需要先拨号,然后运营商的服务器会为你的设备分配一个动态的IP地址。

历史进程

1993年10月,互联网工程任务组IETF负责动态主机配置开发设计的工作组发布了RFC 1531,正式定义DHCP协议,其前身为BOOTP(Bootstrap Protocol)引导协议。由于RFC 1531中存在编辑错误,同月又发布了修正的RFC 1541,成为DHCP协议的首个标准规范。

1997年3月,IETF发布了RFC 2131和RFC 2132,正式确立 DHCPv4 为 IPv4 网络的标准协议。随着IPv4地址枯竭,2003年IETF发布了RFC 3315,正式定义了专为IPv6设计的DHCPv6。

相关推荐
三水不滴13 分钟前
Redis缓存更新策略
数据库·经验分享·redis·笔记·后端·缓存
JoySSLLian15 分钟前
IP SSL证书:一键解锁IP通信安全,高效抵御网络威胁!
网络·人工智能·网络协议·tcp/ip·ssl
小邓吖1 小时前
自己做了一个工具网站
前端·分布式·后端·中间件·架构·golang
云小逸1 小时前
【网络通信】DNS、SNMP、DHCP 等 UDP 服务解析
网络·网络协议·udp
大爱编程♡2 小时前
SpringBoot统一功能处理
java·spring boot·后端
半壶清水3 小时前
[软考网规考点笔记]-操作系统核心知识及历年真题解析
网络·网络协议·算法
方芯半导体4 小时前
EtherCAT “通信 + 控制“ 的全国产化控制方案,ESC芯片(FCE1323)与国产MCU芯片功能板解析
xml·网络·单片机·嵌入式硬件·网络协议·机器人·自动化
好好研究4 小时前
总结SSM设置欢迎页的方式
xml·java·后端·mvc
小马爱打代码5 小时前
Spring Boot:第三方 API 调用的企业级容错设计
java·spring boot·后端
Zach_yuan5 小时前
UDP网络编程:从入门到精通
linux·网络·网络协议·udp