DHCP协议

来源摘取自百度百科

DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网网络协议,使用UDP协议工作, 主要有两个用途:给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段,在RFC 2131中有详细的描述。DHCP有3个端口,其中UDP67和UDP68为正常的DHCP服务端口,分别作为DHCP Server和DHCP Client的服务端口;546号端口用于DHCPv6 Client,而不用于DHCPv4,是为DHCP failover服务,这是需要特别开启的服务,DHCP failover是用来做“双机热备”的。

DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)通常被应用在大型的局域网络环境中,主要作用是集中的管理、分配IP地址,使网络环境中的主机动态的获得IP地址、Gateway地址、DNS服务器地址等信息,并能够提升地址的使用率。
DHCP协议采用客户端/服务器模型,主机地址的动态分配任务由网络主机驱动。当DHCP服务器接收到来自网络主机申请地址的信息时,才会向网络主机发送相关的地址配置等信息,以实现网络主机地址信息的动态配置。DHCP具有以下功能:
1. 保证任何IP地址在同一时刻只能由一台DHCP客户机所使用。
2. DHCP应当可以给用户分配永久固定的IP地址。
3. DHCP应当可以同用其他方法获得IP地址的主机共存(如手工配置IP地址的主机)。
4. DHCP服务器应当向现有的BOOTP客户端提供服务。
DHCP有三种机制分配IP地址:
1) 自动分配方式(Automatic Allocation),DHCP服务器为主机指定一个永久性的IP地址,一旦DHCP客户端第一次成功从DHCP服务器端租用到IP地址后,就可以永久性的使用该地址。
相关图片相关图片
2) 动态分配方式(Dynamic Allocation),DHCP服务器给主机指定一个具有时间限制的IP地址,时间到期或主机明确表示放弃该地址时,该地址可以被其他主机使用。
3) 手工分配方式(Manual Allocation),客户端的IP地址是由网络管理员指定的,DHCP服务器只是将指定的IP地址告诉客户端主机。
三种地址分配方式中,只有动态分配可以重复使用客户端不再需要的地址。
DHCP消息的格式是基于BOOTP(Bootstrap Protocol)消息格式的,这就要求设备具有BOOTP中继代理的功能,并能够与BOOTP客户端和DHCP服务器实现交互。BOOTP中继代理的功能,使得没有必要在每个物理网络都部署一个DHCP服务器。RFC 951和RFC 1542对BOOTP协议进行了详细描述

转载于:https://www.cnblogs.com/13224ACMer/p/6397111.html

### DHCP协议详解 #### 协议概述 DHCP(Dynamic Host Configuration Protocol),即动态主机配置协议,用于简化网络设备的IP地址管理。该协议允许服务器自动向网络上的客户端提供并分配TCP/IP配置参数,包括但不限于IP地址、子网掩码以及默认网关等信息[^1]。 #### IP地址分配模式 支持多种类型的IP地址分配机制,其中最为常见的两种分别是静态分配与动态分配。前者指定了特定MAC地址对应的固定IP;后者则是从预设池子里随机选取可用地址给予请求者,在租约到期前有效。这种灵活性使得DHCP可以适应不同的应用场景需求[^2]。 #### 工作机制 对于复杂多变的大规模企业级网络环境而言,单一子网内的通信不足以满足实际需要。因此引入了DHCP中继代理的概念——一种特殊的路由器或交换机端口角色,用来帮助跨过传统广播域限制,让远距离之外甚至不同物理位置下的计算机也能顺利接收到必要的初始化设定数据流[^3]。 #### 配置要求 值得注意的是,作为Windows Server操作系统的一部分,为了启用这项服务,系统管理员需按照官方指南完成相应的软件安装流程,并根据具体业务情况调整各项设置选项以确保最佳性能表现[^4]。 #### 发现阶段详情 当一台新加入局域网的新机器启动时会发出一个名为`DHCP Discover`的数据包,其目的就是寻找周围存在的任何一台能为自己提供所需资源的信息源。这个过程中使用的特殊IPv4寻址方案表明发送方目前还没有被赋予正式的身份标识符[^5]。 ```python import socket def dhcp_discover(): sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) message = b'\x01' + ... # 构造DHCP DISCOVER报文 sock.sendto(message, ('255.255.255.255', 67)) dhcp_discover() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值