这两天一直在客户这边测试DHCP,由于客户的网络是现成的server 2008 是后来加上去的,所以没有多的IP地址用于测试,只好拿客户的楼层网段来测试,由于需要跨VLAN实行DHCP地址分配,所有需要做DHCP中继。废话不多说,先看下各部分的原理;然后在说遇到的问题;

DHCP协议工作原理:

由于在IP地址动态获取过程中采用广播方式发送报文,因此要求DHCP客户端和服务器位于同一个网段内。如果DHCP客户端和DHCP服务器位于不同的网段,则需要通过DHCP中继来中继转发DHCP报文。通过DHCP中继完成动态配置的过程中,客户端与服务器的处理方式与不通过DHCP中继时的处理方式基本相同。下面仅以DHCP客户端与DHCP服务器在同一网段的情况为例,说明DHCP协议的工作过程。

为了动态获取并使用一个合法的IP地址,需要经历以下几个阶段:

(1) 发现阶段:即DHCP 客户端寻找DHCP 服务器的阶段。

(2) 提供阶段:即DHCP 服务器提供IP 地址的阶段。

(3) 选择阶段:即DHCP 客户端选择某台DHCP 服务器提供的IP 地址的阶段。

(4) 确认阶段:即DHCP 服务器确认所提供的IP 地址的阶段。

1. 发现阶段

在发现阶段,DHCP客户端通过发送DHCP-DISCOVER报文来寻找DHCP服务器。由于DHCP服务器的IP地址对于客户端来说是未知的,所以DHCP客户端以广播方式发送DHCP-DISCOVER报文。所有收到DHCP-DISCOVER报文的DHCP服务器都会发送回应报文,DHCP客户端据此可以知道网络中存在的DHCP服务器的位置。

2. 提供阶段

网络中接收到DHCP-DISCOVER报文的DHCP服务器,会选择一个合适的IP地址,连同IP地址租约期限和其他配置信息(如网关地址,域名服务器地址等)一同通过DHCP-OFFER报文发送给DHCP客户端。DHCP服务器通过地址池保存可供分配的IP地址和其他配置信息。当DHCP服务器接收到DHCP请求报文后,将从IP地址池中取得空闲的IP地址及其他的参数,发送给DHCP客户端。

DHCP服务器为客户端分配IP地址的优先次序如下:

(1) 与客户端MAC 地址或客户端ID 静态绑定的IP 地址;

(2) DHCP 服务器记录的曾经分配给客户端的IP 地址;

(3) 客户端发送的DHCP-DISCOVER 报文中Option 50 字段指定的IP 地址;

(4) 在DHCP 地址池中,顺序查找可供分配的IP 地址,最先找到的IP 地址;

(5) 如果未找到可用的IP 地址,则依次查询租约过期、曾经发生过冲突的IP 地址,如果找到则进行分配,否则将不予处理。

DHCP服务器为客户端分配IP地址时,服务器首先需要确认所分配的IP没有被网络上的其他设备所使用。DHCP服务器通过发送ICMP Echo Request(ping)报文对分配的IP进行探测。如果在规定的时间内没有应答,那么服务器就会再次发送ping报文。到达规定的次数后,如果仍没有应答,则所分配的IP地址可用。否则将探测的IP地址记录为冲突地址,并重新选择IP地址进行分配。

3. 选择阶段

如果有多台DHCP服务器向DHCP客户端回应DHCP-OFFER报文,则DHCP客户端只接受第一个收到的DHCP-OFFER报文。然后以广播方式发送DHCP-REQUEST请求报文,该报文中包含Option 54(服务器标识选项),即它选择的DHCP服务器的IP地址信息。以广播方式发送DHCP-REQUEST请求报文,是为了通知所有的DHCP服务器,它将选择Option 54中标识的DHCP服务器提供的IP地址,其他DHCP服务器可以重新使用曾提供的IP地址。

4. 确认阶段

收到DHCP客户端发送的DHCP-REQUEST请求报文后,DHCP服务器根据DHCPREQUEST报文中携带的MAC地址来查找有没有相应的租约记录。如果有,则发送DHCP-ACK报文作为应答,通知DHCP客户端可以使用分配的IP地址。DHCP客户端收到DHCP服务器返回的DHCP-ACK确认报文后,会以广播的方式发送免费ARP报文,探测是否有主机使用服务器分配的IP地址,如果在规定的时间内没有收到回应,客户端才使用此地址。否则,客户端会发送DHCP-DECLINE报文给DHCP服务器,通知DHCP服务器该地址不可用,并重新申请IP地址。

如果DHCP服务器收到DHCP-REQUEST报文后,没有找到相应的租约记录,或者由于某些原因无法正常分配IP地址,则发送DHCP-NAK报文作为应答,通知DHCP客户端无法分配合适IP地址。DHCP客户端需要重新发送DHCP-DISCOVER报文来请求新的IP地址。

重用曾经分配的IP地址

DHCP客户端每次重新登录网络时,不需要再发送DHCP-DISCOVER报文,而是直接发送包含前一次分配的IP地址的DHCP-REQUEST请求报文,即报文中的Option 50(请求的IP地址选项)字段填入曾经使用过的IP地址。DHCP服务器收到这一报文后,判断DHCP客户端是否可以使用请求的地址:

如果可以使用请求的地址,DHCP服务器将回复DHCP-ACK确认报文。收到DHCP-ACK报文后,DHCP客户端可以继续使用该地址进行通信。

如果请求的IP地址已无法再分配给DHCP客户端(例如,此IP地址已分配给其它DHCP客户端使用),则DHCP服务器将回复DHCP-NAK否认报文。DHCP客户端收到此报文后,必须重新发送DHCP-DISCOVER报文来请求请求新的IP地址;

DHCP中继工作过程:

原始的DHCP协议要求客户端和服务器只能在同一个子网内,不可以跨网段工作。因此,为进行动态主机配置需要在所有网段上都设置一个DHCP服务器,这显然是不经济的。

DHCP中继的引入解决了这一问题,它在处于不同网段间的DHCP客户端和服务器之间承担中继服务,将DHCP协议报文跨网段中继到目的DHCP服务器,于是不同网络上的DHCP客户端可以共同使用一个DHCP服务器

DHCP客户端发送请求报文给DHCP服务器,DHCP中继收到该报文并适当处理后,发送给指定的位于其它网段上的DHCP服务器。服务器根据请求报文中提供的必要信息,通过DHCP中继将配置信息返回给客户端,完成对客户端的动态配置。

(1) DHCP 中继接收到DHCP-DISCOVER 或DHCP-REQUEST 报文后,将进行

如下处理:

为防止 DHCP 报文形成环路,抛弃报文头中hops 字段的值大于限定跳数的DHCP 请求报文。否则,继续进行下面的操作。检查 giaddr 字段。如果是0,需要将giaddr 字段设置为接收请求报文的接口IP 地址。如果接口有多个IP 地址,可选择其一。以后从该接口接收的所有请求报文都使用该IP 地址。如果giaddr 字段不是0,则不修改该字段。将 hops 字段增加1,表明又经过一次DHCP 中继。将请求报文的 TTL 设置为DHCP 中继设备的TTL 缺省值,而不是原来请求报文的TTL 减1。对中继报文的环路问题和跳数限制问题都可以通过hops 字段来解决。

DHCP 请求报文的目的地址修改为DHCP 服务器或下一个DHCP 中继的IP地址。从而,将DHCP 请求报文中继转发给DHCP 服务器或下一个DHCP中继。

(2) DHCP 服务器根据giaddr 字段为客户端分配IP 地址等参数,并将DHCP 应答报文发送给giaddr字段标识的DHCP 中继。DHCP 中继接收到DHCP 应答报文后,会进行如下处理:

DHCP 中继假设所有的应答报文都是发给直连的DHCP 客户端。giaddr 字段用来识别与客户端直连的接口。如果giaddr 不是本地接口的地址,DHCP 中继将丢弃应答报文。DHCP 中继检查报文的广播标志位。如果广播标志位为1,则将DHCP 应答报文广播发送给DHCP 客户端;否则将DHCP 应答报文单播发送给DHCP客户端,其目的地址为yiaddr,链路层地址为chaddr。

原理讲了这么多,谈正题:客户这边的网络很乱连客户自己都不清楚是怎么走的,客户的核心使用的是6509-E,在测试DCHP过程中,发现客户端不能自动获取地址,通过抓包分析在客户端和服务器上面抓发分析,发现客户端只有发出去的广播消息,而服务器那段也没有接收到相关的DHCP单播的报文,通过做端口镜像流量分析也是如此,由此判断该问题应该是出现在中继配置这块;配置过中继的人都应该知道在Cisco的三层设备上面配置中继就几条命令,(service dhcp, ip helper-address server ip adress )查看6509的特殊发现该机型的特殊跟36的基本相似,中继命令是一样的,起初判断是中继上面配置了抑制广播和DHCP监听的相关配置,查看配置发现该核心上面没有类似的服务,因为客户这边的6509上过FWSM防火墙,所以有去查看防火墙配置,也没有发现相关的配置,通过进一步分析,发现客户这边做了相对应的楼层VLAN隔离,查看该楼层的ACL发现最后一条permit语句写的太死了。直接把DHCP的相关流量给干死了,所以直接在后面加了两条语句(permit udp any eq bootpc any eq bootps,permit udp any any eq domain)放过DHCP和DNS就行了;

转载于:https://blog.51cto.com/sxsure/1333806

DHCP中继处理办法相关推荐

  1. 在CISCO路由器上配置DHCP与DHCP中继

    企业网络中DHCP环境的搭建 企业DHCP需求描述: 在大型企业中,一般都有很多个部门,各部门之间有时要求不能互通,这可以通过使用VLAN来解决,但是上千个人IP配置也是一件极大耗费人力的事.所以我们 ...

  2. liunx 下dhcp中继及服务器配置

    dhcp:动态主机配置协议 使用udp协议 端口为67(服务),68(客户) 作用:动态分配地址等参数 工作模式 1. 手工 manual server-地址池 (ip-mac) 2222----1. ...

  3. DHCP配置与DHCP中继代理2

    实验二:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> Ste ...

  4. 十分钟用Windows服务器简单搭建DHCP中继代理!!

                         十分钟用Windows服务器简单搭建DHCP中继代理!! 一.什么是中继代理? 大家都知道DHCP分配地址都需要用到IP广播,但是广播是不能在两个网段之间进行 ...

  5. 华为三层交换机(5328)DHCP中继应用配置实例

    之前有人提出华为交换机关于DHCP中继配置方面的问题,我做了一个简单的测试,将测试结果分享给大家. 测试拓扑结构: sys            #进入系统视图                     ...

  6. 怎么用Windows 2008配置DHCP中继?

    windows2008配置DHCP中继 在对网络建设的学习过程中,我们会遇到这样一个情况,那就是用服务器当交换机或路由器来配置DHCP服务器.那么这里我们就讲解一下有关的dhcp中继配置的内容吧.我们 ...

  7. 在RHEL5下构建DHCP及DHCP中继服务器

    实验环境: 公司的内部网络划分为三个物理网段,并通过一台Linux网关服务器相互连接.为了提供集中化的地址分配管理,现需要构建一台DHCP服务器,在不增加硬件投资的情况下,为处于不同网段的客户机动态配 ...

  8. dhcp 中继代理配置方法

    目标功能: 使用一台RHEL5服务器[Server1]连接A.B.C三个网段,A网段中有一台DHCP服务器[Server2].需要在Server1上配置dhcp中继代理,以使Server2能够给三个网 ...

  9. DHCP中继代理;DHCP突破vlan限制

    实验项目: DHCP中继代理:DHCP突破vlan限制 实验环境: GNS3模拟器 VMware虚拟机 Linux系统(redhat6.5) 实验目的: 在具有不同vlan的情况下,使用dncp自动分 ...

最新文章

  1. 项目安排(离散化+DP)
  2. android 之Activity间的相互跳转(通过intent构造函数)
  3. python编程与下位机通讯_ros 与下位机通信
  4. LeetCode 890. 查找和替换模式(哈希表)
  5. Android-活动(Activity)的基本介绍
  6. linux 安装flash tar.gz,ubuntu下安装flash(tar.gz格式)
  7. 字典树实现_【Leetcode每日打卡】单词的压缩编码 Trie(字典树)入门
  8. bzoj1857 [Scoi2010]传送带
  9. 计算机二级MS office 复习思维导图
  10. 期货量化交易程序CTP入门指南 二
  11. UI设计中的原型图用什么工具?怎么做?给谁看?
  12. vue-ssr在项目中的实践
  13. unzip:unzip解压文件到指定目录
  14. 【LocalDate】获取两个日期间相差的年数、月数、天数
  15. uni-app 即时聊天:朋友圈
  16. pcsx2 android,PCSX2模拟器
  17. signature=9584e09619c4aa010122e7ad7d4cb4c6,来用百度密语吧!!!
  18. 【FPGA】vivado使用(led流水灯实例,附图,详细)
  19. 众昂矿业集团坐拥优质萤石矿产资源,未来可期
  20. Win10蓝屏CRITICAL_STRUCTURE_CORRUPTION解决方案(360急救箱)

热门文章

  1. C++的安全类型转换的讨论
  2. append在python里是什么意思_“一棵绿萝七个鬼”是什么意思?卧室里到底能不能养绿萝!...
  3. 密码学专题 随机数文件
  4. 解决undefined reference to symbol ‘sem_close@@GLIBC_2.2.5‘问题
  5. SpringBoot 配置文件bootstrap和application的区别
  6. 为什么我喜欢单独编程
  7. Docker logs 查看实时日志(日志最后的N行、某刻后日志)
  8. mybatis3 中 @Provider 的使用方式
  9. linux : ulimit 命令使用说明、参数解说
  10. 记录 Parameter with that position [1] did not exist; nested exception is java.lang.IllegalArgumentExce