DHCP原理解析及其在cisco上的配置

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介:

DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是IETF为实现IP的自动配置而设计的协议,它可以为客户机自动分配IP地址、子网掩码以及缺省网关、DNS服务器的IP地址等TCP/IP参数。了解DHCP工作过程可以帮助我们排除有关DHCP服务遇到的问题。DHCP 协议是基于UDP层之上的应用,dhcp使用udp携带报文,udp封装在ip数据包中发送。我们先来看下dhcp报文格式

 

OP:若是client送给server的封包,设为1,反向为2;

Htype:硬件类别,ethernet为1;

Hlen:硬件长度,ethernet为6;

Hops:若数据包需经过router传送,每站加1,若在同一网内,为0;

Transaction ID:事务ID,是个随机数,用于客户和服务器之间匹配请求和相应消息;

Seconds:由用户指定的时间,指开始地址获取和更新进行后的时间;

Flags:从0-15bits,最左一bit为1时表示server将以广播方式传送封包给 client,其余尚未使用;

Ciaddr:用户IP地址;

Yiaddr:客户IP地址;

Siaddr:用于bootstrap过程中的IP地址;

Giaddr:转发代理(网关)IP地址;

Chaddr:client的硬件地址;

Sname:可选server的名称,以0x00结尾;

File:启动文件名;

Options:,厂商标识,可选的参数字段

下面我们主要说下客户机从dhcpserver获取ip的过程,它处于6中状态分别是初始状态,选择状态,请求状态,绑定状态,重新获取状态,重新绑定状态。我们就结合我下面画的这张图好好说下

 

 

1.主机启动,dhcp处于INI状态为了获取ip地址,DHCP客户机初始化TCP/IP,通过UDP端口67向网络中发送一个DHCPDISCOVER广播包,请求租用IP地址。该 广播包中的源IP地址为0.0.0.0,目标IP地址为255.255.255.255;包中还包含客户机的MAC地址和计算机名,本地所有的dhcpserver会收到这个报文,数据包中的目标端口设为BOOTP67端口。这时dhcp会处于select状态。

2.处于select状态的主机会接受dhcpserver发来的dhcpoffer报文,每个报文中会包含为客户机配置的信息以及server为客户机提供的租用ip,一般主机会受到零个或者多个offer报文(一般主机会响应第一个offer报文),并与server协商相关事宜,为此主机会发送一个dhcpquest报文,并进入request状态。

3.dhcpserver会给客户机一个ack的确认信息,这时一个dhcp获取过程结束。主机进入BIND稳定状态。

4.假如主机不需要ip地址或者需要换个ip,这时主机会发送一个dhcprelease报文向dhcpserver,这时主机重新处于初始状态。

5.一般服务器给客户机的ip地址都有租期,时间长短不等,而dhcp主机会有3个计时器,当择期过半50%,这时主机会发送一个dhcprequest报文要求续租进入renew状态,serverdhcp会响应这个报文发送ack确认信息,这时dhcp会重新进入BOND状态。

6.假如dhcpserver没有响应主机的请求,等租期到了87.5%这时主机会重新发送dhcprequest报文要求续租,主机进入rebind状态,假如这时候dhcpserver不高兴(ip地址不够用)发送来一个否确认信息,这时主机会重新进入初始状态再次按照1——4步骤重新申请ip。假如收到ack老大的确认续租成功,说明这个ip我们还可以继续使用。没有响应,我们的主机只有等到我们ip租期耗尽,重新进入初始状态重新获取。

报文类型:

1)DHCPDISCOVER(0x01),此为Client开始DHCP过程的第一个报文

2)DHCPOFFER(0x02),此为Server对DHCPDISCOVER报文的响应

3)DHCPREQUEST(0x03),此报文是Slient开始DHCP过程中对server的DHCPOFFER报文的回应,或者是client续延IP地址租期时发出的报文

4)DHCPDECLINE(0x04),当Client发现Server分配给它的IP地址无法使用,如IP地址冲突时,将发出此报文,通知Server禁止使用IP地址

5)DHCPACK(0x05),Server对Client的DHCPREQUEST报文的确认响应报文,Client收到此报文后,才真正获得了IP地址和相关的配置信息。

6)DHCPNAK(0x06),Server对Client的DHCPREQUEST报文的拒绝响应报文,Client收到此报文后,一般会重新开始新的DHCP过程。

7)DHCPRELEASE(0x07),Client主动释放server分配给它的IP地址的报文,当Server收到此报文后,就可以回收这个IP地址,能够分配给其他的Client。

8)DHCPINFORM(0x08),Client已经获得了IP地址,发送此报文,只是为了从DHCP SERVER处获取其他的一些网络配置信息,如route ip,DNS Ip等,这种报文的应用非常少见。

如:运行IPCONFIG/RELEASE后,PC会发出释放IP的报文,DHCP Message Type是7,他的作用是主动释放server分配给它的IP地址的报文,Server收到此报文后,就可以回收这个IP地址,能够分配给其他的Client。

如果一台客户机未从该DHCP服务器获取过地址,或者它获得的地址已过期,那么它将需要经过全部四个步骤才能得到一个IP地址。

我们说完了dhcp获取过程,下面我们说下cisco路由下dhcp配置(这是借用论坛一个例子我就不配了呵呵^)

 

如图中所示,当R1  的接口配置为DHCP 获得地址后,那么将从F0/0 发出目的 

地为255.255.255.255  的广播请求包,如果R2 为DHCP 服务器,便会响应客户端, 

但它不是DHCP  服务器,因此R2  收到此广播包后便默认丢弃该请求包。而真正的 

DHCP 服务器是R4,R1  的广播包又如何能到达R4 这台服务器呢,R4 又如何向R1 

客户端发送正确的IP 地址呢。 

   路由器是不能够转发广播的,因此,除非能够让R2 将客户端的广播包单播发向 

R4 这台服务器。我们的做法就是让R2 将广播包通过单播继续前转到R4 这台服务 

器,称为DHCP 中继,通过IP help-address 功能来实现。 

1.R2 配置 

(1)配置将DHCP 广播前转到34.1.1.4 

注:IP help-address 功能默认能够前转DHCP 协议,所以无需额外添加。 

   R2(config)#int f0/0 

   R2(config-if)#ip helper-address 34.1.1.4 

2.配置DHCP Server: 

(1)开启DHCP 功能 

   R4(config)#service dhcp 

(2)配置DHCP 地址池 

    R4(config)#ip dhcp pool ccie1      地址池名为ccie1 

     R4(dhcp-config)#network 10.1.1.0 255.255.255.0 可供客户端使用的地址段 

     R4(dhcp-config)#default-router 10.1.1.1 网关 

R4(config)#ip dhcp pool ccie2     地址池名为ccie1 

     R4(dhcp-config)#network 34.1.1.0 255.255.255.0 可供客户端使用的地址段 

     R4(dhcp-config)#default-router 34.1.1.4 网关 

(3)去掉不提供给客户端的地址 

   R4(config)#ip dhcp excluded-address 10.1.1.1 10.1.1.10 移除10.1.1.1 到10.1.1.10 

    R4(config)#ip  dhcp  excluded-address  34.1.1.1  34.1.1.10 移除 20.1.1.1 到 

20.1.1.10 

(4)配置正确地址池的路由 

   R4(config)#ip route 10.1.1.0 255.255.255.0 34.1.1.3 

注: R3 无需做任何配置! 

3.查看结果 

    查看DHCP Client 会看到接口F0/0 的IP 地址为10.1.1.11,那么DHCP 服务器R4 

又是根据什么来判断出客户端需要的是哪个网段的IP 地址呢,为什么还是没有错把 

34.1.1.0/24 网段的地址发给客户呢。不是说服务器从哪个接口收到请求,就把这个 

接口相同网段的地址发给客户端吗?按照之前的理论,应该是发送34.1.1.0/24 的地 

址给客户啊。在这里,能够指导服务器发送正确IP 地址给客户端,是因为有一个被 

称为option 82 的选项,这个选项只要DHCP 请求数据包被中继后便会自动添加,此 

选项,中继路由器会在里面的giaddr 位置写上参数,这个参数,就是告诉服务器,客 

户端需要哪个网段的IP地址才能正常工作。中继路由器从哪个接口收到客户的DHCP 

请求,就在option 82 的giaddr 位置写上该接收接口的IP 地址,然后服务器根据giaddr 

位置上的IP 地址,从地址池中选择一个与该IP 地址相同网段的地址给客户,如果 

没有相应地址池,则放弃响应,所以,服务器R4 能够正确发送10.1.1.0/24  的地址 

给客户,正是因为R2 在由于IP help-address 的影响下,将giaddr  的参数改成了自己 

接收接口的地址,即将giaddr 参数改成了10.1.1.1,通过debug 会看到如下过程: 

*Mar100:28:36.666: DHCPD: setting giaddr to 10.1.1.1. 

*Mar100:28:36.666HCPD:BOOTREQUESTfrom0063.6973.636f.2d30.3031.322e. 

6439.6639.2e63.3638.302d.4661.302f.30 forwarded to 34.1.1.4. 

    从上面debug 信息可以看到R2 是将giaddr             改成 10.1.1.1 后发中继发向34.1.1.4 

的,需要知道的是,经过中继后发来的DHCP 请求包如果giaddr 位置不是某个IP 地 

址而是0.0.0.0 的话,服务器是丢弃该请求而不提供IP 地址的。 

注:当服务器上存在10.1.1.0/24 网段的地址池时,服务器要将该地址池发送给客户, 

就必须存在到达10.1.1.0 网段的路由(默认路由也行),并且客户端必须位于该路由的 

方向,如果方向不对,该地址池也是不能够发给客户使用的。 

我主要说下vlan间的hdcp配置

 

sw1(config)#service dhcp 

sw1(config)#ip dhcp pool dhcp1        

sw1(dhcp-config)#network 20.1.1.0 255.255.255.0  

sw1(dhcp-config)#default-router 20.1.1.1   

sw1(dhcp-config)#lease 7

sw1(config)#ip dhcp pool dhcp2         

sw1(dhcp-config)#network 40.1.1.0 255.255.255.0  

sw1(dhcp-config)#default-router 40.1.1.1     

sw1(dhcp-config)#lease 7

sw1(config)#ip dhcp excluded-address 20.1.1.1 20.1.1.10 

sw1(config)#ip  dhcp  excluded-address  40.1.1.1  40.1.1.10 

sw1(config)#vlan 10 

sw1(config-vlan)#exit 

sw1(config)#vlan 20 

 sw2(config)#int f0/1 

   sw2(config-if)#switchport mode access 

   sw2(config-if)#switchport access vlan 20 

   sw2(config-if)#exit 

  

 

  sw3(config)#int vlan 40 

   sw3(config-if)#ip address 40.1.1.1 255.255.255.0 

   sw3(config-if)#ip helper-address 50.1.1.5         

   sw3(config-if)#exit 

   sw3(config)#int vlan 20 

   sw3(config-if)#ip address 20.1.1.1 255.255.255.0 

   sw3(config-if)#ip helper-address 50.1.1.5

  pc1(config)#int f0/1 

     pc1(config-if)#ip address dhcp 

pc2(config)#int f0/1 

    pc2(config-if)#ip address dhcp 

 

下面我们在说先dhcp欺骗

现在网络中有台机子冒充dhcp服务器,我们知道客户机一般会响应最早的那个dhcpoffer,这样客户机就接受了假冒那台dhcpserver提供的ip地址,这时我们不愿意看到的。我们可以设置dhcp监听来防止

sw(config)#ip dhcp snooping       开启监听

sw(config)#ip dhcp snooping vlan 20   监听vlan20(一定要配置监听那个vlan)

sw(config-if)#ip dhcp snooping trust   

 sw2(config-if)#ip dhcp relay information trusted 

 sw2(config-if)#ip helper-address 50.1.1.5
ok  结束!

 本文转自q狼的诱惑 51CTO博客,原文链接:http://blog.51cto.com/liangrui/449093,如需转载请自行联系原作者

相关文章
|
16天前
|
安全 算法 网络协议
解析:HTTPS通过SSL/TLS证书加密的原理与逻辑
HTTPS通过SSL/TLS证书加密,结合对称与非对称加密及数字证书验证实现安全通信。首先,服务器发送含公钥的数字证书,客户端验证其合法性后生成随机数并用公钥加密发送给服务器,双方据此生成相同的对称密钥。后续通信使用对称加密确保高效性和安全性。同时,数字证书验证服务器身份,防止中间人攻击;哈希算法和数字签名确保数据完整性,防止篡改。整个流程保障了身份认证、数据加密和完整性保护。
|
3月前
|
存储 缓存 算法
HashMap深度解析:从原理到实战
HashMap,作为Java集合框架中的一个核心组件,以其高效的键值对存储和检索机制,在软件开发中扮演着举足轻重的角色。作为一名资深的AI工程师,深入理解HashMap的原理、历史、业务场景以及实战应用,对于提升数据处理和算法实现的效率至关重要。本文将通过手绘结构图、流程图,结合Java代码示例,全方位解析HashMap,帮助读者从理论到实践全面掌握这一关键技术。
122 14
|
4月前
|
运维 持续交付 云计算
深入解析云计算中的微服务架构:原理、优势与实践
深入解析云计算中的微服务架构:原理、优势与实践
164 3
|
8天前
|
机器学习/深度学习 数据可视化 PyTorch
深入解析图神经网络注意力机制:数学原理与可视化实现
本文深入解析了图神经网络(GNNs)中自注意力机制的内部运作原理,通过可视化和数学推导揭示其工作机制。文章采用“位置-转移图”概念框架,并使用NumPy实现代码示例,逐步拆解自注意力层的计算过程。文中详细展示了从节点特征矩阵、邻接矩阵到生成注意力权重的具体步骤,并通过四个类(GAL1至GAL4)模拟了整个计算流程。最终,结合实际PyTorch Geometric库中的代码,对比分析了核心逻辑,为理解GNN自注意力机制提供了清晰的学习路径。
157 7
深入解析图神经网络注意力机制:数学原理与可视化实现
|
9天前
|
机器学习/深度学习 缓存 自然语言处理
深入解析Tiktokenizer:大语言模型中核心分词技术的原理与架构
Tiktokenizer 是一款现代分词工具,旨在高效、智能地将文本转换为机器可处理的离散单元(token)。它不仅超越了传统的空格分割和正则表达式匹配方法,还结合了上下文感知能力,适应复杂语言结构。Tiktokenizer 的核心特性包括自适应 token 分割、高效编码能力和出色的可扩展性,使其适用于从聊天机器人到大规模文本分析等多种应用场景。通过模块化设计,Tiktokenizer 确保了代码的可重用性和维护性,并在分词精度、处理效率和灵活性方面表现出色。此外,它支持多语言处理、表情符号识别和领域特定文本处理,能够应对各种复杂的文本输入需求。
49 6
深入解析Tiktokenizer:大语言模型中核心分词技术的原理与架构
|
1月前
|
机器学习/深度学习 算法 数据挖掘
解析静态代理IP改善游戏体验的原理
静态代理IP通过提高网络稳定性和降低延迟,优化游戏体验。具体表现在加快游戏网络速度、实时玩家数据分析、优化游戏设计、简化更新流程、维护网络稳定性、提高连接可靠性、支持地区特性及提升访问速度等方面,确保更流畅、高效的游戏体验。
76 22
解析静态代理IP改善游戏体验的原理
|
1月前
|
编解码 缓存 Prometheus
「ximagine」业余爱好者的非专业显示器测试流程规范,同时也是本账号输出内容的数据来源!如何测试显示器?荒岛整理总结出多种测试方法和注意事项,以及粗浅的原理解析!
本期内容为「ximagine」频道《显示器测试流程》的规范及标准,我们主要使用Calman、DisplayCAL、i1Profiler等软件及CA410、Spyder X、i1Pro 2等设备,是我们目前制作内容数据的重要来源,我们深知所做的仍是比较表面的活儿,和工程师、科研人员相比有着不小的差距,测试并不复杂,但是相当繁琐,收集整理测试无不花费大量时间精力,内容不完善或者有错误的地方,希望大佬指出我们好改进!
97 16
「ximagine」业余爱好者的非专业显示器测试流程规范,同时也是本账号输出内容的数据来源!如何测试显示器?荒岛整理总结出多种测试方法和注意事项,以及粗浅的原理解析!
|
25天前
|
域名解析 网络协议 Ubuntu
DHCP与DNS的配置
通过这些步骤,您可以在Linux环境下成功配置和验证DHCP和DNS服务。希望这些内容对您的学习和工作有所帮助。
82 27
|
19天前
|
Java 数据库 开发者
详细介绍SpringBoot启动流程及配置类解析原理
通过对 Spring Boot 启动流程及配置类解析原理的深入分析,我们可以看到 Spring Boot 在启动时的灵活性和可扩展性。理解这些机制不仅有助于开发者更好地使用 Spring Boot 进行应用开发,还能够在面对问题时,迅速定位和解决问题。希望本文能为您在 Spring Boot 开发过程中提供有效的指导和帮助。
69 12
|
17天前
|
开发框架 监控 JavaScript
解锁鸿蒙装饰器:应用、原理与优势全解析
ArkTS提供了多维度的状态管理机制。在UI开发框架中,与UI相关联的数据可以在组件内使用,也可以在不同组件层级间传递,比如父子组件之间、爷孙组件之间,还可以在应用全局范围内传递或跨设备传递。
35 2

热门文章

最新文章

推荐镜像

更多