我的编程空间,编程开发者的网络收藏夹
学习永远不晚

GNS3之DHCP基础

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

GNS3之DHCP基础

   关于DHCP需要牢记的是当一台没有IP地址的主机接入网络后,会向网络上发送DHCP请求获得IP地址时,又因为它自己还没有IP地址,所以发送数据包时,源IP为0.0.0.0,源MAC就为烧在网卡上的,因为此刻是不可能知道谁是DHCP服务器的,所以数据包是目标IP地址为255.255.255.255、目标MAC地址为FFFFFF的广播包。


   如果本地网络中存在DHCP服务器,那么DHCP服务器从某个网卡收到请求后,便向客户端发送一个地址信息,其中包含我们需要使用的IP地址,子网掩码,网关,DNS等信息,同时这些信息会携带一个租约时间(即这个地址客户端可以使用多久,过了这个时间,那么服务器将该地址提供给其它客户端使用),当然,客户端也可以提前结束该地址的使用。当这个时间过去一半的时候,客户端会向服务器续约,以请求继续使用该地址,服务器同意后,该地址的使用时间会被刷新,如果在时间过去一半时,续约不成功,便会在总时间过去75%的时候再续约一次,如果还不成功,就会放弃该地址的使用权。


   需要注意的是服务器与客户端之间并没有hello这样的数据包来保持会话状态,所以当一台客户端得到一个IP地址的使用权后,中途离开网络,服务器是无法知道的,也就无法将该IP地址重新分配给他人使用,所以建议大家在配置服务器时,可以将租约配的越短越好,以免造成一个地址发给客户使用,而这台客户机已经离开了,该IP地址还长时间不能重新发给新的客户使用,建议租约配置为1分钟,因为一个地址在租约过半时,客户端会续约,也就是可以再次使用同一个地址,所以不用担心一分钟之后,客户端会重新获得别的IP地址。当一台DHCP客户端收到服务器提供的IP地址后,会使用Gratuitous ARP来查讯网络,即使用该IP地址为目的IP,目标MAC为FFFFFF发到网络里,如果有人回答该数据包,则证明该IP地址在网络中已经有他人在使用,那么将向DHCP服务器重新请求获得别的IP地址。(注:Gratuitous ARP通过正常手段无法关闭)

   下面来看看在GNS3上关于DHCP server和client的配置

配置DHCP Server

R1(config)#int fa0/0

R1(config-if)#ip ad 12.1.1.1 255.255.255.0

R1(config-if)#no sh

R1(config)#service dhcp \\开启dhcp功能

R1(config)#ip dhcp pool ccie1 \\创建一个地址池名为ccie1

R1(dhcp-config)#network 12.1.1.0 255.255.255.0 \\供客户端使用的网段

R1(dhcp-config)#default-router 12.1.1.1 \\指定网关

R1(dhcp-config)#dns-server 12.1.1.1  \\指定DNS

R1(dhcp-config)#lease 1 1 1 \\租期为1天1小时1分

R1(config)#ip dhcp excluded-address 12.1.1.1 12.1.1.10\\排除掉不提供给客户端的地址


R1(config)#ip dhcp pool ccie2\\创建第二个地址池名为ccie2

R1(dhcp-config)#network 20.1.1.0 255.255.255.0

R1(dhcp-config)#default-router 20.1.1.1

R1(dhcp-config)#dns-server 20.1.1.1

R1(dhcp-config)#lease 1 1 1


配置DHCP Client

R2(config)#int fa0/0

R2(config-if)#ip address dhcp

R2(config-if)#no sh

*Mar  1 00:10:13.883: %DHCP-6-ADDRESS_ASSIGN: Interface FastEthernet0/0 assigned DHCP address 12.1.1.11, mask 255.255.255.0, hostname R2

配置完不久控制台就会蹦出消息


查看服务器上把哪些地址分配给了客户端

R1#show ip dhcp binding

Bindings from all pools not associated with VRF:

IP address          Client-ID/              Lease expiration        Type

                   Hardware address/

                   User name

12.1.1.11          0063.6973.636f.2d63.    Mar 02 2002 01:11 AM    Automatic

                   6330.312e.3237.3934.

                   2e30.3030.302d.4661.

                   302f.30

查看客户端的路由表:

R2#show ip route

Gateway of last resort is 12.1.1.1 to network 0.0.0.0


    12.0.0.0/24 is subnetted, 1 subnets

C       12.1.1.0 is directly connected, FastEthernet0/0

S*   0.0.0.0/0 [254/0] via 12.1.1.1

可以看到接口被分配的地址为12.1.1.11,然后还产生了一条默认路由,如果是PC就是默认网关了!


   值得注意的是,我们在服务器上明明是配置了两个不同网段的地址池,为什么客户端在向服务器请求地址的时候,服务器就偏偏把12.1.1.0/24网段的地址分发给客户端,而不会错把20.1.1.0/24的网段分发给客户啦?

   只是因为服务器从哪个接口收到DHCP请求,就只能向客户端发送地址段和接收口地址相同的网段,如果不存在相同的网段,不好意思,直接丢弃请求数据包!


DHCP中继

   如上图所示,如果R4的接口配置为使用DHCP获得地址,那么将从F0/0发出目的地255.255.255.255的广播请求包,如果R3为DHCP服务器,便会响应客户端,但它不是DHCP服务器,因此R3收到此广播包后便默认丢弃该请求包。而真正的DHCP服务器是R1,R4的广播包又如何能到达R4这台服务器呢,R4又如何向R1客户端发送正确的IP地址呢。

   我们知道路由器是不能够转发广播的,因此,除非能够让R3将客户端的广播包通过单播发向R4这台服务器。所以我们的做法就是让R3将广播包通过单播继续前转到R1这台服务器,称为DHCP中继,通过IP help-address功能来实现。


R1,R2,R3运行OSPF

DHCP Sevrer配置

R1(config)#service dhcp

R1(config)#ip dhcp pool ccie3

R1(dhcp-config)#network 34.1.1.0 255.255.255.0

R1(dhcp-config)#default-router 34.1.1.1

R1(config)#ip dhcp excluded-address 34.1.1.1 34.1.1.10


R3配置

R3(config-router)#int fa0/0

R3(config-if)#ip helper-address 12.1.1.1


R4客户端配置

R4(config)#int fa0/0

R4(config-if)#ip address dhcp

R4(config-if)#no sh

*Mar  1 00:15:21.867: %DHCP-6-ADDRESS_ASSIGN: Interface FastEthernet0/0 assigned DHCP address 34.1.1.11, mask 255.255.255.0, hostname R4


查看结果

R1#show ip dhcp binding

Bindings from all pools not associated with VRF:

IP address          Client-ID/              Lease expiration        Type

                   Hardware address/

                   User name

34.1.1.11           0063.6973.636f.2d63.    Mar 02 2002 12:15 AM    Automatic

                   6330.342e.3237.3934.

                   2e30.3030.302d.4661.

                   302f.30

   可以看到接口F0/0的IP地址为10.1.1.11,那么DHCP服务器R1又是根据什么来判断出客户端需要的是哪个网段的IP地址呢,为什么还是没有错把12.1.1.0/24网段的地址发给客户呢?不是说服务器从哪个接口收到请求,就把这个接口相同网段的地址发给客户端吗?按照之前的理论,应该是发送12.1.1.0/24的地址给客户啊。

   在这里,能够指导服务器发送正确IP地址给客户端,是因为有一个被称为option 82的选项,这个选项只要DHCP请求数据包被中继后便会自动添加此选项,中继路由器会在里面的giaddr位置写上参数,这个参数,就是告诉服务器,客户端需要哪个网段的IP地址才能正常工作。中继路由器从哪个接口收到客户的DHCP请求,就在option 82的giaddr位置写上该接收接口的IP地址,然后服务器根据giaddr位置上的IP地址,从地址池中选择一个与该IP地址相同网段的地址给客户,如果没有相应地址池,则放弃响应,所以,服务器R1能够正确发送34.1.1.0/24的地址给客户,正是因为R3在由于IP help-address的影响下,将giaddr的参数改成了自己接收接口的地址,即将giaddr参数改成了34.1.1.1,通过debug会看到如下过程:

R3#debug ip dhcp server packet

R3#

*Mar  1 00:20:55.879: DHCPD: setting giaddr to 34.1.1.1.

*Mar  1 00:20:55.883: DHCPD: BOOTREQUEST from 0063.6973.636f.2d63.6330.342e.3237.3934.2e30.3030.302d.4661.302f.30 forwarded to 12.1.1.1.

   从上面debug信息可以看到R2是将giaddr 改成 34.1.1.1后发中继发向12.1.1.4的,需要知道的是,经过中继后发来的DHCP请求包如果giaddr位置不是某个IP地址而是0.0.0.0的话,服务器是丢弃该请求而不提供IP地址的。


不同VLAN分配不同的地址

   如图所示,两个DHCP客户端分别位于交换机上两个不同的VLAN,交换机上的VLAN接口将作为他们的网关,R3是DHCP服务器,这两个客户端必须得到不同网段的地址,否则无法与外网通信,在这种情况下,服务器R3也必须正确为R1分配10.1.1.0/24网段的地址,必须为R2分配20.1.1.0/24的地址,配置如下:

1.配置DHCP Server

R3(config)#int fa0/0

R3(config-if)#ip ad 30.1.1.3 255.255.255.0

R3(config-if)#no sh

R3(config-if)#exit

开启DHCP功能

R3(config)#service dhcp

配置DHCP地址池

R3(config)#ip dhcp poo ccie1

R3(dhcp-config)#network 10.1.1.0 255.255.255.0\\地址池1的网段

R3(dhcp-config)#default-router 10.1.1.1\\默认路由

R3(dhcp-config)#exit

R3(config)#ip dhcp pool ccie2

R3(dhcp-config)#network 20.1.1.0 255.255.255.0

R3(dhcp-config)#default-router 20.1.1.1

R3(dhcp-config)#exit

配置需要排除的地址范围

R3(config)#ip dhcp excluded-address 10.1.1.1 10.1.1.10

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

配置正确的地址池路由

R3(config)#ip route 10.1.1.0 255.255.255.0 30.1.1.1

R3(config)#ip route 20.1.1.0 255.255.255.0 30.1.1.1

2.配置交换机

sw#vlan database

sw(vlan)#vlan 10

sw(vlan)#vlan 20

sw(config-if)#int fa1/2

sw(config-if)#ip add 30.1.1.1 255.255.255.0

sw(config-if)#no sh

sw(config-if)#int fa1/0

sw(config-if)#switchport mo access

sw(config-if)#switchport access vlan 10

sw(config-if)#int fa1/1

sw(config-if)#switchport mo access

sw(config-if)#switchport access vlan 20

sw(config-if)#int vlan 10

sw(config-if)#ip add 10.1.1.1 255.255.255.0

sw(config-if)#no sh

sw(config-if)#ip helper-address 30.1.1.3

sw(config-if)#int vlan 20

sw(config-if)#ip add 20.1.1.1 255.255.255.0

sw(config-if)#no sh

sw(config-if)#ip helper-address 30.1.1.3

3.配置DHCP Client

R1(config)#int fa0/0

R1(config-if)#ip address dhcp

R1(config-if)#no sh


R2(config)#int fa0/0

R2(config-if)#ip address dhcp

R2(config-if)#no sh

4.查看结果:

   按上述配置完之后,客户端R1的F0/0便能够收到地址10.1.1.11,客户端R2便能够收到地址20.1.1.11,然后就可以全网通信。在上述的情况下,服务器R3能够正确为R1分配10.1.1.0/24网段的地址,能够正确为R2分配20.1.1.0/24网段的地址,同样也是因为交换机在收到R1的DHCP广播包后,将giaddr的参数改成了10.1.1.1,收到R2的广播包后,将giaddr的参数改成了20.1.1.1,所以最后服务器R3能够根据giaddr=10.1.1.1的包分配10.1.1.0/24的地址,根据giaddr=20.1.1.1的包分配20.1.1.0/24的地址。

sw#debug ip dhcp server packet

*Mar  1 00:19:38.507: DHCPD: setting giaddr to 10.1.1.1.

*Mar  1 00:19:38.511: DHCPD: BOOTREQUEST from 0063.6973.636f.2d63.6330.302e.3230.6434.2e30.3030.302d.4661.302f.30 forwarded to 30.1.1.3.

*Mar  1 00:19:46.007: DHCPD: setting giaddr to 20.1.1.1.

*Mar  1 00:19:46.011: DHCPD: BOOTREQUEST from 0063.6973.636f.2d63.6330.312e.3230.6434.2e30.3030.302d.4661.302f.30 forwarded to 30.1.1.3.


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

GNS3之DHCP基础

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

GNS3之DHCP基础

关于DHCP需要牢记的是当一台没有IP地址的主机接入网络后,会向网络上发送DHCP请求获得IP地址时,又因为它自己还没有IP地址,所以发送数据包时,源IP为0.0.0.0,源MAC就为烧在网卡上的,因为此刻是不可能知道谁是DHCP服务器的,
2023-01-31

交换机基础:DHCP Relay的配置

DHCP Relay(动态主机配置协议中继)是一种网络设备功能,它允许将DHCP请求从一个子网转发到另一个子网上的DHCP服务器。这对于跨多个子网的网络非常有用,因为它允许网络中的客户端获取IP地址和其他网络配置信息。要配置DHCP Rel
2023-09-22

思科交换基础知识之DHCP服务最常见的问题

  DHCP是Dynamic Host Configuration Protocol之缩写﹐它的前身是BOOTP。BOOTP原本是用于无磁碟主机连接DHCP协议的网路上面的﹕网路主机使用BOOTROM而不是磁碟起动并连接上网路﹐BOOTP则可以自动地为那些主机设定TCP/IP环境。现在就跟着小编一起来学习一下:思科交换
思科交换基础知识之DHCP服务最常见的问题
2024-04-17

华为交换机DHCP配置基础攻略

  配置服务器  1 . 开启交换机的DHCP服务。  [huawei]dhcp enable  2 . 配置地址池。  [huawei]ip pool vlan500  [huawei-ip-pool-vlan500]network 192 . 168 . 200 . 10 mask 255 . 255 . 255
华为交换机DHCP配置基础攻略
2024-04-18

Python基础之面向对象基础

面向对象编程(Object-Oriented Programming,简称OOP)是一种编程思想,它将程序中的数据和操作封装成对象,通过对象之间的交互来实现程序的功能。在Python中,一切皆对象,包括数字、字符串、列表等基本数据类型。Py
2023-09-23

flask基础之一

hello world#从flask这个包中导入Flask这个类#Flask这个类是项目的核心,以后的很多操作都是基于这个类的对象#注册url,注册蓝图都是这个类的对象from flask import Flask#创建一个Flask对象,
2023-01-31

python之基础篇(四)

防伪码:忘情公子著本篇我们来说说python的内置对象类型及其运算。  python有许多的内置类型,我们为什么要使用内置类型呢?python编程时是尽量去使用自定义类型还是尽可能多的使用内置类型呢?  内置类型对python本身来讲它的理
2023-01-31

python之基础篇(一)

防伪码:忘情公子著一、python介绍  python是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于1991年。  python语法简洁明晰,特色之一是强制用空白符
2023-01-31

python之基础知识

1、变量:2、字符串:用   “  ” 或 ' ' 标注的。3、列表:[  ]4、del 和 pop 的区别:判断何时使用:当从列表中删除元素后不再使用,则del,若后续还使用则pop()例:#delname =["lele", "ning
2023-01-30

前端基础之CSS_2

摘要盒子模型浮动清除溢出定位模态框rgba 与 opacity透明区别 一、CCS盒子模型margin:标签与标签之间的距离,主要用于控制标签周围间的间隔,从视觉上达到相互分开的目的。padding:标签内内容与标签边框之间的距离。bord
2023-01-31

Python基础之(八)类

创建类第一形式# !/usr/bin/env python# coding=utf-8class Person(object): #object表示继承自object类,Python3中可省略次内容 """ This is a
2023-01-31

java基础之注解

1、元注解1.1 @Target【作用】用于指定所标注的注解可以使用的位置,例如:@Target(ElementType.METHOD):表示可以使用在方法上,其他结构不能使用;@Target({ElementType.METHOD, ElementType.
java基础之注解
2020-09-10

python之路-基础篇

python基础第一章1、python介绍python的创始人为吉多·范罗苏姆(Guido van Rossum)。1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承。  
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录