数据通信——应用层(DHCP的原理与配置)

news2025/2/25 6:22:51

引言

  假如我们的网络中有N台设备,它们都要设置IP地址,如果人工去一个个配置不仅不方便管理还很麻烦。因此我们用DHCP来自动分配地址。

一,系统的启动流程

不仅是计算机、很多网络设备的启动流程如下:

  设备上电后,硬件开启并将初始化的硬件程序(也叫自举程序)装入内存运行后并进行读取,随后装入操作系统中,加载系统和应用软件 。

  在这个时刻,我们的主机和路由器等网络设备的功能启动会在硬件开启后进行。不过在它启动前我们要配置好它的一些协议和细节。那这些协议的配置我们可以通过系统自动装配或者人工的方式实现。

  比如说,我们运行TCP协议,那么与TCP协议相关的软件就会加载运行,像是其中的IP地址、子网掩码等都要具备。

  为此,我们可以通过磁盘来接收协议配置信息,这样虽然快,但是太不灵活,你要一个个设置IP地址?所以说设备自动获取到协议的配置信息更好。因此,自动协议配置是一种可以对客户机分配IP地址的服务。

二,自动协议配置

  我们要为设备分配IP地址和掩码等信息。因此我们要一台可以管理地址分配的服务器。这样,每个设备就可以向服务器索要IP地址等信息了。不过这些设备要支持自动向服务器索取IP地址的功能,因为服务器不会自发访问设备。

  对此,出现了一个协议叫做RARP(反向地址转换协议)

三,RARP

  RARP(Reverse Address Resolution Protocol)介绍这个玩意儿前,要先说说ARP协议,我们之前提到过ARP协议(地址转换协议)是设备进行广播通过IP地址来获取对端的MAC地址。而RARP就是应对设备不知道自己的IP地址,但是知道自己的物理地址的情况。

  RARP与ARP相反。RARP发出解析过的物理地址并希望对端返回其对应的IP地址,仍是以广播形式发出,RARP有RARP服务器,它规定只有RARP服务器能产生应答。我们可以设置N多个RARP服务器。

  反向地址转换协议(RARP) 允许局域网的物理机器从网关服务器的 ARP 表或者缓存上请求其 IP 地址

当我们采用了RARP,并且在网关路由器上部署了MAC地址与IP的映射表时,其过程为:

(1)主机发送一个本地的RARP广播,在此广播包中含有自己的MAC地址并且请求收到该请求的RARP服务器给我分配一个IP地址;

(2)本地网段上的RARP服务器收到此请求后,检查其RARP列表,查找该MAC地址对应的IP地址;

(3)如果存在这个MAC地址与IP的映射,RARP服务器就给源主机发送一个响应数据包并将此IP地址提供给对方主机使用;

(4)如果不存在,RARP服务器不响应;

(5)源主机收到从RARP服务器的响应信息,就利用得到的IP地址进行通讯;如果一直没有收到RARP服务器的响应信息,超时后表示获取失败。

  但这个东西太鸡肋了,我们看下图:

这是一个网络层次的概况。你可以发现ARP和RARP是共同在数据链路层工作的,因此广播发送的数据网关不会进行转发,也就是说每个网段都需要RARP服务器,还是太麻烦了。而且,ARP和RARP一样,都只为IP地址和MAC地址进行互相解析,其它协议配置不提供。

至此我们又有了新的方案——BOOTP(引导程序协议)

四,BOOTP

  这个玩意儿我们就简单说说吧!它是基于UDP的C/S模式,是一个应用层协议。设备仍然是向服务器发送请求报文,服务器进行响应。由于设备一开始没有IP地址且通信不再处于数据链路层,因此需要IP报文设置。这个请求的报文将IP报文的首部中的源地址设置为了“0.0.0.0”(默认的源IP地址)目的地址为“255.255.255.255”(默认的目的IP地址)。

我不太想多写这个协议的工作流程,概括来讲,它是通过广播来获取IP,通过MAC获取IP映射。

优点是:可以穿越路由器(因为应用层协议);

缺点是:IP需要静态配置与MAC的映射,网络不具备移动性。

还是有点five,后来这个玩意儿就升级,变成了DHCP

五,DHCP

  DHCP(动态主机配置协议)堪称一流的东西,DHCP客户机启动时,它会自动与DHCP服务器通信,由DHCP服务器给它分配IP地址等信息,我们还可以设置租约,规定这个IP使用多久,到期或者设备关机后,IP会被回收。

  DHCP一共有三个组件:DHCP服务器(提供分配地址的中心)、DHCP客户机(需获取IP地址的设备)、DHCP中继系统(在客户机和服务器间转发消息)。

DHCP工作流程

发现阶段:客户机通过发送DHCP Discovery广播报文进行请求。如果客户机需要有一个永久性的租用地址,则可以直接请求该地址。这个阶段,源主机发送的IP报文首部的源目IP地址为全0(源)和全1(目)。

提供阶段:收到了IP的广播请求报文,会先分配地址,如果没有要分配的地址则从DHCP的地址池中取出一个可用的IP地址,并且返回一个单播DHCP Offer的报文回应。

选择阶段:客户机收到多个DHCP Offer报文时,往往会选择第一个或者自己所需的那一个IP地址后,广播发送给标识服务器的DHCP Request报文。

确认阶段:被标识的服务器收到后,会单播发回一个DHCP ACK报文表示你可以使用该地址。但是如果发送DHCP Nak。则表示客户机需要重新开始整个过程。也有可能发送DHCP Decline告诉客户机你的IP地址不能用耶!

  如果客户机下线并重新登录后,这时就不需要进行发现和提供阶段了,直接将DHCP Request报文发出,服务器收到以后会尝试让客户机继续使用曾经的IP地址。如果我们要更新客户机的IP地址租赁期限,通过DHCP Request进行更新。在上述所有过程中,如果服务器没有返回DHCP ACK则证明服务器没有收到(大概0.875s),需要重发。

  客户端获得IP地址后,也可以发送DHCP INFORM这个报文请求获取服务器的其它一些网络配置信息,如DNS等。

  DHCP也可以穿越路由器工作,我们可设置DHCP中继代理,这样DHCP就会以单播方式在网络之间传递DHCP的相应报文。

因此,我们可以发现,DHCP几乎涵盖了RARP和BOOTP的功能,并在此基础上拓展了许多新的概念,下面我们用实验来看一下这个DHCP。

六,DHCP配置

首先,如下连接拓扑,将两台PC机均设置为DHCP模式后并开启抓包软件:

我们开启抓包后,会发现开启DHCP的PC机会源源不断的发送DHCP Discovery报文:

接下来我们配置DHCP服务器,我们在路由器接口上进行配置:

 <Huawei>sys
Enter system view, return user view with Ctrl+Z.
[Huawei]int g0/0/0
[Huawei-GigabitEthernet0/0/0]ip add 192.168.1.254 24   //设置网关IP地址
[Huawei-GigabitEthernet0/0/0]quit
[Huawei]dhcp enable //开启DHCP服务
[Huawei]int g0/0/0 
[Huawei-GigabitEthernet0/0/0]dhcp select interface  //选择此接口作为地址池让客户端获取 
[Huawei-GigabitEthernet0/0/0]dhcp server dns-list 114.114.114.114 8.8.8.8  //配置DNS
[Huawei-GigabitEthernet0/0/0]dhcp server lease day 0 hour 23 minute 0 

//设置地址池租赁时间为23小时
[Huawei-GigabitEthernet0/0/0]dhcp server excluded-ip-address 192.168.1.10 

//配置不被分配的地址段,这些地址段可以保留后用来做其他配置
[Huawei-GigabitEthernet0/0/0]dhcp server excluded-ip-address 192.168.1.200

 好了,我们配置完后观察抓包的流量:

上图中的黄条就是配置接口IP后出现的,通过ARP协议检测到了它的IP地址与MAC地址的映射 

  上图可以看到,DHCP服务器与DHCP客户机迅速完成了建立。其报文传递也是很快。发现报文到达后,DHCP主机立刻回复了一个Offer报文 ,可以看到DHCP服务器为PC暂时分配的IP地址是192.168.1.252。但是我们看到主机并不确认自己是否可以使用这个报文,因此广播发送Request报文,经过服务器的ACK报文确定,并发向目的IP地址为192.168.1.252的设备,告诉其可以使用。

我们也能发现在1和3阶段均是以广播形式发送源目为全0和全1的字段,而2和4阶段则是单播方式发送报文。

我们最后在用主机Ping一下路由器的接口,发现可以Ping通的:

 ipconfig命令也可以观察到:

后续 

这些就是DHCP的内容,它只是个很简单的利用工具。在我们实际进行网络配置的时候使用它会非常方便,节省我们很多的时间。而且DHCP 服务器的网络规划做的也很好,让我们方便了后续的路由聚合与汇总。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1158944.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue 插槽 组件插入不固定内容

定义好一个组件&#xff0c;如果想插入图片或视频这非常不好的控制应该显示什么&#xff0c;这个时候可以使用插槽插入自定义内容 默认插槽 <Login><template><h1>我是插入的内容</h1></template></Login >组件 <slot></slot>…

正则表达式续篇

位置锚定&#xff1a; ^:行首锚定&#xff0c;表示以什么为开头 例如&#xff1a; $:行尾锚定&#xff0c;表示以什么为结尾 例如&#xff1a; ^&#xff1a;匹配的是空行 例如&#xff1a; ^root$&#xff1a;匹配整行&#xff0c;而且整行只能有这一个字符串 实验&#x…

SpringBoot----自定义Start(自定义依赖)

一&#xff0c;为什么要定义Start 向阿里云OSS如果我们要引入的话很麻烦&#xff0c;所以我们可以自定义一些组件&#xff0c; 然后我们只需要在pom文件中引入对应的坐标就可以 二&#xff0c;怎么定义&#xff08;以阿里云OSS为例&#xff09; 1&#xff0c; 定义两个组件模块…

HarmonyOS数据管理与应用数据持久化(一)

一. 数据管理概述 功能介绍 数据管理为开发者提供数据存储、数据管理能力&#xff0c;比如联系人应用数据可以保存到数据库中&#xff0c;提供数据库的安全、可靠等管理机制。 数据存储&#xff1a;提供通用数据持久化能力&#xff0c;根据数据特点&#xff0c;分为用户首选项、…

AttributeError: partially initialized module ‘pandas‘ has no attribute ‘core‘

在使用jupyter notebook学习动手学深度学习时&#xff0c;出现以下错误&#xff1a; %matplotlib inline import math import torch from torch import nn from torch.nn import functional as F from d2l import torch as d2lbatch_size, num_steps 32, 35 train_iter, voca…

【MySQL数据库】 二

本文主要介绍了数据库操作的操作流程 , 以及数据库和数据表的基本操作 . 一.数据库操作工作流程 1.用户在客户端输入SQL 2.客户端把SQL通过网络发送给服务器 3.服务器会执行这个SQL&#xff0c;把结果返回给客户端 4.客户端收到结果显示到界面上 二.数据库的操作 1.创建数…

C语言实现输入一个表示星期几的数,然后输出相应的英文单词,要求使用指针数组实现

完整代码&#xff1a; // 输入一个表示星期几的数&#xff0c;然后输出相应的英文单词&#xff0c;要求使用指针数组实现 #include<stdio.h>//指针数组就是数组中每个元素都是指针 int main(){//初始化七个字符常量&#xff0c;代表星期几,const修饰表示这是字符串常量&…

java--方法重载

1.方法重载 一个类中&#xff0c;出现多个方法的名称相同&#xff0c;但是他们的形参列表是不同的&#xff0c;那么这些方法就称为方法重载了。 2.方法重载的注意事项 ①一个类中&#xff0c;只要一些方法的名称相同、形参列表不同&#xff0c;那么他们就是方法重载了&#…

深入大模型与ChatGPT

关注微信公众号掌握更多技术动态 --------------------------------------------------------------- 一、大模型原理 1.Transformer (1)求知之路&#xff1a;LLM 学到了什么知识 LLM 从海量自由文本中学习了大量知识&#xff0c;如果把这些知识做粗略分类的话&#xff0c;…

抖音协议最新版

主页信息、主页视频数据、发布作品、发布图文、验证可靠、验证点选、扫码登录协议、视频点赞、视频举报、视频详情解析(获赞、评论数、收藏数、无水印地址等)、视频评论、视频评论信息、视频评论点赞、用户关注、用户举报、用户资料、用户更改资料、用户粉丝和关注的用户详情、…

41 深度学习(五):图片增强|Transfer Learning|VGG|resnet50(fine-tune)|InceptionNet

文章目录 图片增强为什么要使用图片增强具体方式.flow_from_directory(directory)flow_from_dataframe 迁移学习&#xff08;Transfer Learning&#xff09;AlexNetVGGresnet50代码学习关键的源码分析 InceptionNet 图片增强 为什么要使用图片增强 数据增强是一种常用的神经网…

如何构建用于Skydel GNSS模拟仿真的SNMP代理方式?

使用Skydel API构建测试方案 凭借其现代、强大且直观的API&#xff0c;德思特Safran GNSS模拟引擎Skydel免费提供了Python、C#、C和Labview的开源客户端库&#xff0c;它具有600多条命令&#xff0c;并且有完善的文档与记录。 随着Skydel软件更新添加新功能&#xff0c;API得…

NI-9236 国产化10 kS/s/ch,350 Ω四分之一桥应变计,8通道C系列应变/桥输入模块

10 kS/s/ch&#xff0c;350 Ω四分之一桥应变计&#xff0c;8通道C系列应变/桥输入模块 NI‑9236可同步测量所有通道的动态应变&#xff0c;从而实现了高速同步测量。 该功能对于需要在特定时刻对多个通道进行比较的应用&#xff08;例如冲击测试&#xff09;非常重要。\n\nNI…

Jave语法的输入输出

基本语法 从键盘输入 使用 Scanner 读取字符串/整数/浮点数 在idea中这个包是自动导入的&#xff01; 使用 Scanner 循环读取 N 个数字&#xff0c;并求取其平均值 Scanner sc new Scanner(System.in); int sum 0; int num 0; while (sc.hasNextInt()) {int tmp sc.nex…

ssh登录界面变成vim提示,进不去系统

是ubuntu系统 使用远程连接root&#xff0c;进去后发现界面变成vim编辑器的介绍界面了 使用普通用户登录 查询用户的登录shell是不是有问题 sudo vim /etc/passwd 发现用户shell变成了vim编辑器 修改为/bin/bash就可以正常登录了 重新登录测试就正常了

Java数组转集合list中的神坑

目录 debug一下Arrays.asList源码一探究竟 大家好&#xff0c;我是哪吒。 今天在review代码的时候&#xff0c;发现一个同事的是这样写的。 public void getData() {int[] arr {1, 2, 3};List list Arrays.asList(arr);... }打眼没看出问题&#xff0c;一般不都这样写嘛。 …

【ChatGPT从瀑布模式到水母模式】如何赋能软件研发全流程?

【文末送书】今天推荐一本强大工具书《ChatGPT 驱动软件开发&#xff1a;AI 在软件研发全流程中的革新与实践》&#xff0c;本文将从其亮点与结构出发&#xff0c;详细阐发其对于运维、项目经理、程序员等的重要性与益处。 文章目录 导语内容作者简介专家推荐读者对象直播预告文…

如何去除水印?3款简单实用的手机去水印软件推荐

你有没有拍了一些特别好看的照片或者视频&#xff0c;然后却发现它们被水印搞得一团糟&#xff1f;这种感觉真是让人崩溃&#xff01;别着急我这就告诉你一个超简单的方法&#xff01;今天我给大家推荐几款超级简单好用的手机去水印软件&#xff0c;让你在几分钟内轻松搞定如何…

上海建工集团某上游企业使用OdooERP系统,实现低成本信息化的案例分享

苏州的王总&#xff0c;为上海建工配套生产建筑钢结构。公司规模不大&#xff0c;平时几十号人&#xff0c;繁忙时候&#xff0c;临时工加起来一两百号人。建筑行业&#xff0c;都是按照建筑项目进度&#xff0c;分批次交货。每批次任务&#xff0c;收到甲方图纸&#xff0c;设…

Python-turtle绘画出HelloKitty动漫人物(有趣小游戏)

Python-turtle绘画出HelloKitty&#xff08;有趣小游戏&#xff09; 效果图安装库Python代码 效果图 安装库 常用镜像源汇总&#xff1a;1. 豆瓣http://pypi.douban.com/simple/2. 清华大学&#xff1a;https://pypi.tuna.tsinghua.edu.cn/simple 3. 清华大学开源镜像站 https…