DHCP服务

DHCP是一种动态主机配置协议,用于自动分配网络中的IP地址。它的工作流程包括寻找、请求和确定三个步骤。DHCP的主要功能包括租约管理(自动续约与释放)、IP绑定和包留。此外,IP作用域定义了服务器分配IP的范围,特殊情况下使用超级作用域和多播作用域解决地址不足或优化多播数据传输的问题。

一.定义

可以给同一网络中的主机/服务器自动分配ip

二.工作原理

服务端:根据既定的地址池和分配策略为客户端分配ip
客户端:定期向服务端申请ip

三.通讯过程

1.寻找

客户端在网络中寻找可用的DHCP服务器并发送寻找报文,服务器收到报文选择一个或多个合适的ip发送给客户端

2.请求

客户端从多个收到的报文中挑选一个,同时向服务端请求ip并发送报文

3.确定

服务端收到报文后再次确认ip可用性,确定可用后为服务端分配ip,同时在服务器中对此ip经行标记,防止ip冲突

四.主要功能

1.租约

服务端分配ip给客户端存在有效期,当有效期过期则客户端需重新向服务端请求ip

2.续约/释放

I.客户端会自动请求租约的情况

当客户端重启时,会自动请求继续租用原来的ip
当ip地址租期过一半时,会自动请求继续原来的ip
当ip地址租期过7/8时,会自动请求继续原来的ip

II.手动续约与释放

客户端可分别通过ipconfig /renew和ipconfig /release来更新/释放租期

III.APIPA(当客户端未租到ip地址时)

客户端会自动建立一个网络标识符为169.254.0.0/16的“专用ip",并与其他计算机通讯

关于租期:
如果设置时间较短,则客户端需高频次向服务端请求ip,会对服务端造成一定负载压力,但可使客户端及时获取服务器最新设置值
如果设置时间较长,会减少对服务端造成的负载压力,但客户端无法及时获取服务器最新设置值
如果设置时间没有限制,则客户端所租用的ip不会被自动收回,必须由系统管理员手动从地址租用期删除,且客户端只有在重新启动的时候才会自动向服务端请求ip,客户端也可通过命令手动续约/释放。

3.绑定

将ip与主机的mac地址相绑定,以便下一次客户端请求时获取到相同的ip

4.包留

服务端会为某些特定的主机预留一些固定的ip,以便下一次客户端请求时获取到相同的一个或多个ip

五.ip作用域

1.定义

指服务端能给客户端分配一组ip的范围,正常来说一个作用域只能创建一个作用域

2.特殊情况

I.超级作用域

由多个作用域组成,用来防止ip地址不够用的情况

II.多播作用域

将多播地址(D类地址224.0.0.0~239.255.255.255)分配个需要传输影片,音乐的服务器,利用多播方式传输数据可减轻网路负载

### 定义 DHCP(Dynamic Host Configuration Protocol)服务器是一种用于动态分配IP地址及其他网络配置参数的网络服务。它能为网络中的客户端自动分配IP地址、子网掩码、网关、DNS服务器等信息,避免了手动配置的繁琐和错误。 ### 工作原理 当客户端启动时,会发送一个DHCP Discovery广播包,寻找可用的DHCP服务器DHCP中继代理收到此报文后,以单播方式向DHCP服务器转发该报文并等待回答。DHCP服务器收到请求后,会发送一个DHCP Offer报文,其中包含可用的IP地址和其他配置信息。DHCP中继代理收到此报文后,再将其发回主机。客户端收到Offer后,会发送一个DHCP Request报文,请求使用该IP地址。DHCP服务器确认后,会发送一个DHCP ACK报文,客户端就可以使用分配的IP地址进行网络通信。当租期达到50%时,客户机会再次发送DHCP Request包进行续约,如果服务器无响应,则在87.5%时再次发送续约请求,若仍然无响应,客户端会释放IP地址,并重新发送DHCP Discovery广播包来获取新的IP地址。当无任何服务器响应时,客户端会自动给自己分配一个169.254.x.x/16全球统一无效地址,用于临时内网通信 [^1][^3]。 ### 配置方法 配置DHCP服务器可从查看进程和端口开始,使用命令 `ps aux|grep dhcpd` 查看dhcpd进程,使用 `netstat -anplut|grep dhcp` 查看端口67 UDP是否正常监听。之后可进行客户机测试,以确保服务器配置生效 [^2]。 ### 其他信息 DHCP Relay(DHCPR)也被称为DHCP中继,可实现跨越物理网段处理和转发DHCP信息的功能。并非每个网络都需要部署DHCP服务器,推荐的做法是每个网络至少有一个DHCP中继代理,并配置好DHCP服务器的IP地址信息 [^1]。 ### 代码示例 以下是使用Python模拟DHCP服务器简单工作流程的示例代码: ```python import socket # 模拟DHCP服务器监听端口 server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) server_socket.bind(('0.0.0.0', 67)) while True: data, client_address = server_socket.recvfrom(1024) # 这里简单模拟处理DHCP Discovery请求 if b'DHCP Discovery' in data: offer_message = b'DHCP Offer: 192.168.1.100' server_socket.sendto(offer_message, client_address) ```
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

可爱的莫大

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值