6.2.5 网络基本服务----动态主机配置协议DHCP

6.2.5 网络基本服务----动态主机配置协议DHCP

动态主机配置协议允许一台计算机加入新的网络时可自动获取网络配置信息,不用人工参与。连网的计算机需要配置的参数包括

  1. IP地址
  2. 子网掩码
  3. 默认路由器的IP地址
  4. 域名服务器IP地址

DHCP与DNS、FTP、Telnet一样也采用客户服务器模式。

一、DHCP的作用

我们先来了解一下主机如何接入互联网,如图

目前主要有两类接入互联网方式

  1. 宽带接入
  2. 局域网接入

宽带

宽带接入多用于家庭,常见有两种方式,一种是通过非对称数字用户线路,即ADSL线路接入互联网,一种是通过有线电视网接入互联网。以ADSL接入为例,用户端的modem实现数字信号和模拟信号之间的转换,电话网络分离器,采用频分多路复用技术(3.3.1 多路复用技术(一))在传统的电话线路上传输低频的电话信号和高频的上网数字调制信号,终端设有分离器和DSL接入复用器,将电话信号和上网信号,分别连入电话网和互联网,如果家中只有一台主机上网,可以直接将主机直接连接在modem的以太网口,否则就需要一台宽带路由器将家中的若干主机连接到互联网,宽带路由器不仅具有路由器的功能,还集成了交换机模块,无线宽带路由器相当于路由器加以太交换机加无线接入点以及无线交换机。

如下图是通过局域网接入互联网

局域网

校园网、企业网中的主机常采用局域网接入的方式,主机通过网线或无线直接连接到以太或无线交换机,交换机可以级联并于路由器相连,比如图中的校园网也是一个网间网,有局域网也有广域网,路由器将各个网络互联起来,整个互联网也是一个网间网即网络的网络,因此一个分组从源主机到目的主机可能穿过多个网络,为了区分标识各个网络接口,需要给主机和路由器的网络接口分配IP地址还要说明接口所处的网络即子网,标识接口所处的子网需要用到子网掩码,网络接口的IP地址和子网掩码按位相与就得到接口所处的子网地址。比如一个接口的IP地址为a.b.c.d,子网掩码为255.255.255.0,那它的子网地址就是a.b.c.0,子网地址中的网络前缀为a.b.c,主机号为0,对同一个子网中的各个网络接口必须指定相同的子网掩码,各IP地址还应具有相同的网络前缀,不同的主机号,而不同子网的主机IP地址应具有不同的网络前缀,那么如何配置网络接口的各个网络参数呢?对于路由器而言都是由管理员进行手工配置,而对于主机则是有两种方式即手工配置、自动配置。

在主机上自动配置网络接口的各个参数如图所示

自动获取

主机所在网络上必须有设备提供DHCP服务,对于家庭网络快带路由器可以兼职充当DHCP服务器,在配置快带路由器时需要激活路由器配置中的DHCP服务,事先配置好IP地址池,地址作用时长等,服务器会从地址池中选用当前未用的地址给申请自动获得IP地址的主机,地址池中的地址是临时地址。DHCP还支持固定地址,所谓固定地址只为特定的网络接口分配固定的IP地址。

需要强调的是DHCP为互联网主机(非路由器)提供配置参数:

  1. DHCP提供了一个在TCP/IP网络上从CHCP服务器传送配置参数给主机的框架。
  2. DHCP为主机分配网络地址:临时IP地址或固定地址,允许为特定的网络接口(MAC地址)分配固定的IP地址。

DHCP基于C/S模型,运行DHCP服务程序的主机(Server)向选择“自动获得IP设置”的主机(Client)传递配置参数。路由器常开启DHCP服务。

DHCP客户获得网络参数后方可与互联网上其他子网中的主机通信。

DHCP基于Bootstrap协议(BOOTP),增加了自动分配可重用网络地址功能和一些配置选项。

DHCP使用UDP作为传输层,DHCP Server和DHCP Client分别使用UDP端口号67和68

二、DHCP客户-服务器交互过程

我们通过实验获取DHCP交互数据,实验通过ADSL接入互联网的家庭网络上进行,测试主机为有线接入宽带路由器的笔记本电脑,路由器开启DHCP服务,并设置了分配临时地址需要的IP地址池和地址作用时间,地址池为192.168.0.100~192.168.0.199,作用时间为一周,具体实验步骤如下:

(仅启动本地连接)

  1. 手工配置IP地址等参数且主机可以正常上网
  2. 断开路由器电源
  3. 主机设置改为自动获得IP地址方式
  4. 使用Wireshark开始抓包,设置需要监听的网络接口,开始捕获
  5. 接通路由器电源,过一会停止抓包
  6. 过滤bootp,这样就只显示DHCP报文,这里我们可以看到DHCP报文的封装过程,DHCP报文先被封装在UDP报文中,UDP被封装在IP数据报中,IP数据报又被封装在以太帧中

从Wireshark捕获的分组我们可以看出DHCP客户和服务器完整的交互过程,依次包含4种报文。

  1. Discover
  2. offer
  3. Request
  4. ACK

如图

交互过程

图中左侧是DHCP路由器,也是DHCP服务器,右侧是测试主机也是DHCP客户

  1. 首先主机广播发送Discover报文,旨在发现DHCP服务器
  2. 然后服务器发送offer,表示愿意提供动态主机配置服务,因为主机提供了网络参数,如果本地网络有多个DHCP服务器,主机将收到多个offer。每个offer都有一个Server ID
  3. 第三步主机选择其中一个offer,发送确认报文Request,同时通知所有的服务器自己的选择
  4. 第四步被选服务器返回DHCP Acknowledge确认报文

我们可以看到IP地址和端口使用的细节,这里有一个问题是当主机还没有获得IP地址等网络参数之前是如何与本地网络上的其他主机进行通信呢?图例给我们的答案是,DHCP客户先使用IP地址全零的地址表示自己。

第二个问题是其他主机是如何与客户机进行通信呢?图中给出的是offer和acknowledge报文,封装它们的IP数据报的目的地址都是广播地址32位全1。

关于端口以Discover报文为例,源端口为DHCP客户,使用的是UDP端口68,目的端口是DHCP服务器使用的端口67,在该报文中显示yiaddr:0.0.0.0,表示此时客户方还没有分配IP地址,希望有服务器提供动态主机配置服务。

DHCP服务器发送offer报文,报文中显示yiappdr:192.168.0.100,Lease time:604800s(表示租用时间为一周),此外还给出了Server ID,在主机发送的Request报文中Server ID的值显示主机选择了哪一个offer。而Request报文中的Requested IP addr:192.168.0.100正是所选offer中的yiaddr

服务器发送的确认报文与offer报文仅仅是MessageType不同,一个是ACK一个offer

三、四个网络参数

无论是手工还是自动配置的,都需要这四个参数,DHCP服务器返回的不仅仅有分配的IP地址,还包括其他三个参数。通过确认报文的信息就会发现包含主机IP地址,子网掩码,默认网关,域名服务器IP地址,如果主机中已经手动添加了域名服务器DNS的IP地址,就以手动添加为主。

  1. 子网掩码

    主机在有了IP地址和子网掩码,在和其他主机通信时,用于了解目的主机和源主机是否在同一子网内,若是则可以直接交付,否则需要路由器的转发

  2. 第一跳路由器IP地址

    转发目的地为其他子网中主机的IP数据报

  3. DNS服务器的IP地址

    DNS服务器提供域名解析服务,不设置此项就无法使用域名访问互联网。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Lua脚本本地调试

这里主要使用日志的方式进行debug 环境依赖 项目对openresty包的依赖比较高,所以环境基础都在openresty下进行 openresty的使用 openresty下载地址 下载完成后解压,具体使用方式和nginx没有什么区别,主要依赖文件是一下几个 nginx.exe …

搬家送货小程序开发源码定制一键报警实时定位路线规划

1.货物信息录入: 用户可以输入货物的名称、数量、重量、尺寸等信息。 2.路线选择: 用户可以选择起始地点和目的地点,并根据需求选择最佳路线。 提供地图服务或第三方路径规划服务,以帮助用户确定最佳路线。 3.车辆选择&#…

基于深度学习的高精度鸡蛋检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要:基于深度学习的高精度鸡蛋检测识别系统可用于日常生活中或野外来检测与定位鸡蛋目标,利用深度学习算法可实现图片、视频、摄像头等方式的鸡蛋目标检测识别,另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检测模型…

跨域问题解决

由于同源策略,需要协议,域名,端口三个都相同才能进行访问,是一种浏览器的保护策略 CORS:Cross Origin Resource Sharing SpringBoot 项目中解决跨域 1.在目标方法中加入CrossOrigin注解 2.添加一种过滤器 分别是允许哪些域&#…

ffmpeg2段视频合成一段

查看分辨率 帧率和编码器 ffprobe -v error -select_streams v:0 -show_entries streamcodec_name,width,height,avg_frame_rate -of defaultnoprint_wrappers1 rs2.mp4得到,编码器,分辨率,还有帧率 codec_nameh264 width1920 height1080 avg…

Linux 发行版 Gentoo 存在重大漏洞

网络安全公司 SonarSource 在日前研究中发现,Gentoo Linux 发行版中存在漏洞 CVE-2023-28424,黑客可以利用该漏洞进行 SQL 注入攻击。 研究人员从 GentooLinux 的 Soko 搜索组件中找到了这个漏洞。该漏洞的 CVSS 风险评分为 9.1,属于特别重大…

Flutter 仿抖音、豆瓣、知乎、番茄小说的评论弹窗开发实践

最近用flutter做了一个评论弹窗的功能,本来以为很简单的烂大街的一个功能,结果却遇到了不少的问题,而且这些问题我觉得很有意义,以至于我觉得我如果分享出来可能会对其他人很有帮助。 要做一件事情可能会很容易,但做好…

springboot之配置文件加载

springboot启动流程参考。Springboot总结。本内容主要解析里面的配置文件的加载过程。 springboot资源加载 入口。SpringApplication#run 我们知道,run方法是构建容器的过程。里面有一个方法:prepareEnvironment。用于构建环境组件Environment&#xf…

cocos2d-js中jsc逆向为js

1.下载脚本https://github.com/tablis/jsc-decompile-mozjs-34 2.安装php7以上的版本 ubuntu $ sudo apt install php7.0 mac $ brew install php7.0 windows just google an binary one 查看php安装的版本这里mac电脑为例子: 输入:php -v 只要7以上的版本即可 3.cd到…

http协议(二)

欢迎来到南方有乔木的博客!!! 博主主页:点击点击!戳一戳!! 博主名:南方有乔木呀 博主简介: 一名在校大学生,正在努力学习Java语言编程。穷且意坚,不坠青云…

Go语言基础教程:变量、基本数据类型、输出、注释、运算符、if-else条件判断、函数

文章目录 一、变量的使用1.1 定义变量1.2 常量1.3 变量的赋值与内存相关 二、变量基本类型2.1 有符号整型2.2 无符号整型2.3 string类型2.4 bool类型 三、输出3.1 常用打印功能3.2 格式化输出3.3 内置输出方法与fmt的区别 四、注释五、运算符六、条件语句6.1 基本使用6.2 条件嵌…

ncnn源码阅读(三)----数据结构Mat

文章目录 数据结构Mat成员变量成员方法构造函数1、普通构造函数2、外部数据指针构造函数3、拷贝构造函数和opertor 深拷贝函数类型转换引用计数的实现其他数据操作函数 数据结构Mat 个人认为一个框架中的比较核心的两个点,一个是数据结构,一个任务调度…

【NLP】Transformer模型原理(2)

接上文 【NLP】Transformer模型原理(1) 六、零层的transformer 观看涵盖与本节类似内容的视频:0 层理论 在进入更复杂的模型之前,简要考虑一下“零层”变压器很有用。这样的模型获取一个令牌,嵌入它,解嵌它以生成预测下一个令牌的对数: ​

AttributeError: module ‘torch.nn‘ has no attribute ‘module‘

import torch import torch.nn as nnclass LinearModel(nn.Module):def _init_(self,ndim):super(LinearModel,self)._init_()self.ndimndimself.weightnn.Parameter(torch.randn(ndim,1))#定义权重self.biasnn.Parameter(torch.randn(1)) #定义偏置def forward(self,x):# y …

点云数据标注方法研究

1.点云可视化工具 1.1 cloudcompare下载安装 sudo snap install cloudcompare 启动方法: #open pointcloud viewer cloudcompare.ccViewer #open the main software cloudcompare.CloudCompare 使用上述第一条命令,读取的点云某一帧数据,我的点云格…

opencv实战--环境配置和文字识别

文章目录 前言一、环境配置二、文字识别2.1 文字单个识别2.2 文字单个带边框 总结 前言 一、环境配置 cmd输入python的时候跳转应用商店的解决方法。https://blog.csdn.net/qq_62294840/article/details/120623501 anaconda官方下载地址:https://www.anaconda.com…

编程语言的优劣评选标准与未来发展趋势——探索最佳编程语言选择

编程语言的优劣评选标准与未来发展趋势——探索最佳编程语言选择 评判标准不同编程语言的优点与缺点分析对编程语言未来发展的猜测和未来趋势 💕 💕 💕 博主个人主页: 汴京城下君–野生程序员💕 💕 &#x…

【力扣JavaScript】1047. 删除字符串中的所有相邻重复项

/*** param {string} s* return {string}*/ var removeDuplicates function(s) {let stack[];for(i of s){let prevstack.pop();if(prev!i){stack.push(prev);stack.push(i);}}return stack.join(); };

4. CSS用户界面样式

4.1什么是界面样式 所谓的界面样式,就是更改一些用户操作样式,以便提高更好的用户体验。 ●更改用户的鼠标样式 ●表单轮廓 ●防止表单域拖拽 4.2鼠标样式cursor li {cursor: pointer; }设置或检索在对象上移动的鼠标指针采用何种系统预定义的光标形状。 4.3轮廓线outline…

Layui之选项卡案例 详细易懂

⭐ 本期精彩: 利用Layui框架实现动态选项卡 ⭐ 继上一篇已经实现了左边的树形菜单栏,这一关卡我们已通过,接下来就是实现右边的动态选项卡的关卡,上个关卡的效果及链接 ⭐ 链接:http://t.csdn.cn/tYccL 目录 ⭐ 本期精彩&#xf…