一文搞懂DHCP协议

🏰 bt365最新网址 📅 2025-09-25 17:11:57 👤 admin 👁️ 6734 👑 397
一文搞懂DHCP协议

首页 题库 公司真题 专项练习 面试题库 在线编程 面试 面试经验 AI 模拟面试 简历 求职

学习 基础学习课 实战项目课 求职辅导课 专栏&文章 竞赛

我要招人

发布职位

发布职位、邀约牛人

更多企业解决方案

AI面试、笔试、校招、雇品

HR免费试用AI面试

最新面试提效必备

登录

/

注册

牛客976442735号 石家庄学院 安全工程师 发布于河北 关注 已关注 取消关注 @2021中国年度划水大师: 一文搞懂DHCP协议   更多文章欢迎关注个人微信公众号:极客熊猫   何为DHCP?     DHCP是Dynamic Host Configuration Protocol的首字母缩写,即动态主机配置协议。    任何连接到的互联网的主机或路由器都需要IP地址、子网掩码、默认网关、DNS服务器等配置信息,当一个网络中的主机或路由器数量很多时,采用人工来配置这些信息显然是低效且易错的。DHCP就是解决这个问题的。     DHCP的主要作用是集中的管理、分配IP地址,使网络环境中的主机动态的获得IP地址、子网掩码、默认网关、DNS服务器地址等信息,并能够提升IP地址的使用率。    DHCP采用客户端/服务器模型。客户端主机的IP地址等配置信息的动态分配任务由其自身发起,当DHCP服务器接收到来自客户端主机申请地址的信息时,才会向客户端主机发送相关的地址配置等信息,以实现客户端主机地址信息的动态配置。  DHCP位于五层网络模型中的应用层,其传输层采用UDP协议。客户端端口号为68,服务器端口号为67。     DHCP服务器可提供三种地址分配:自动分配、动态分配、手动分配。三者区别在于地址分配是否基于客户端的身份以及该地址是否可撤销或变更。我们只关注动态分配。   动态分配:客户端从服务器的地址池中获得一个可撤销的IP地址。    地址池和租用期  动态分配中,DHCP客户端请求分配一个IP地址时,DHCP服务器从其地址池中选择一个地址作为响应。  地址池:专门为DHCP用途而分配的一个连续的IP地址范围。  租用期:分配给客户端的IP地址只在一段特定时间内有效,这段时间称为租用期。     租用期是可以延长的,即客户端可以续约。    DHCP消息格式      Op:标识消息是请求消息(1)还是应答消息(2);  HW类型:硬件类型,基于ARP使用的值,对于以太网,该值为1;  HW长度:存放硬件(MAC)地址的长度,对于以太网MAC地址,该值为6;  跳步数:保存消息传输过程中的中继次数。消息发送方将该值设置为0,并在每次中继时递增;  事务ID:由客户机选择的随机数,服务器将它复制到响应中,用于将请求和应答匹配起来;  秒数:由客户机设置,它是第一次尝试申请或重新申请地址经过的秒数;  标志:该字段16位中,目前只用了1位,称为广播标志。客户机可以在请求中设置该位,表示它们不能或不愿处理单播IP数据报,但可处理广播数据报(例如,客户机还没有IP地址的情况)。通过设置该位通知服务器和中继代理,广播地址可用于响应中。  ciaddr:如果客户机已有IP地址的话,客户机在发送请求时将自己的IP地址放在此处;  yiaddr:由服务器填写,服务器把想要分配给客户机的IP地址放在此处;  siaddr:一般是DHCP服务器的IP地址;  giaddr:如果需要跨子网进行DHCP地址分配(DHCP服务器与客户机不在同一子网),则在此处填写经过的路由器的IP地址;  chaddr:客户机的硬件地址,即MAC地址;  sname:并非每次都要填写,表示服务器名;  file:并非每次都要填写,表示启动文件路径;  选项:常见选项见下。      常见选项:   子网掩码(1)、路由器地址(3)、域名服务器(6)、请求的IP地址(50)、地址租用期(51)、DHCP消息类型(53)、租约更新时间(58)、租约重新绑定时间(59)。       选项可由DHCP选项字段携带,也可由sname和file字段携带,由sname和file携带时,称为选项超载。       DHCP消息类型(53)是1字节长的选项,其常见可能值如下:   DHCPDISCOVER(1)、DHCPOFFER(2)、DHCPREQUEST(3)、DHCPACK(5)、DHCPNAK(6)    DHCP协议操作  接下来我将通过一个实际场景描述DHCP协议的基本工作流程。     场景:小明在学校有一台笔记本电脑,一直用着学校的校园网。现在五一假期了,小明打算把笔记本带回家连上家里的网络打英雄联盟。我们假定校园网与小明家的网不是同一子网。   小明的笔记本由校园网切换到家里的网络,其IP地址等配置信息自然要发生变化,这个过程就是由DHCP来完成的,下面来看一下DHCP如何完成这项工作。   注:链路层以以太网为例。假定小明笔记本MAC地址为00:13:02:20:b9:18。      DHCPREQUEST  由于小明的笔记本电脑会记住之前在校园网中使用的IP地址(假定为172.16.1.34),所以在连接到新的网络(小明家的网络)时,它首先通过一个DHCPREQUEST消息尝试继续使用该地址。该DHCPREQUEST消息封装如下图所示。       Op为1代表这是一个DHCP请求;   htype为1代表是以太网;   hlen为6是MAC地址的长度(以字节为单位);   跳步数设置为0,每次中继时递增;   事务ID为随机生成,这里假定为0xdb23247d;   标志为0x8000,即最高位为1,意味着该消息的响应应该通过广播地址发送。   ciaddr、yiaddr、siaddr、giaddr均为0.0.0.0;   chaddr为小明笔记本的MAC地址00:13:02:20:b9:18;   sname、file未指定;   选项中指明了DHCP消息类型为DHCPREQUEST以及请求的IP地址为172.16.1.34。    该DHCP消息被封装在UDP用户数据报中,其中UDP头部中源端口号填写为68,目的端口号填写为67;  然后该UDP用户数据报被封装到IP数据报中,其中IP头部中的源IP地址填写为0.0.0.0,目的IP地址填写为广播地址255.255.255.255;  然后该IP数据报被封装到以太网帧中,其中以太网帧中源MAC地址填为00:13:02:20:b9:18,目的MAC地址填为ff:ff:ff:ff:ff:ff:ff。     由于客户机不知道它请求的地址是否分配成功,也不知道它所连接的新网络的网络前缀,所以它不得不使用这些广播地址。    DHCPNAK  附近的DHCP服务器会收到客户机的DHCPREQUEST消息,由于连接到了新网络,172.16.1.34不在当前网络中,所以当前的DHCP服务器无法给小明的笔记本分配其请求的IP地址(172.16.1.34)。因此服务器会发送一个DHCPNAK消息,拒绝客户机的请求。       Op为2代表这是一个DHCP应答;   xid与之前的DHCPREQUEST消息中的一样,代表这是对该DHCPREQUEST消息的应答;   选项中指明了DHCP消息类型为DHCPNAK、DHCP服务器标识符10.0.0.1、以及一个表示错误类型的文本字符串“wrong address”。    该DHCP消息被封装在UDP用户数据报中,其中UDP头部中源端口号填写为67,目的端口号填写为68;  然后该UDP用户数据报被封装到IP数据报中,其中IP头部中的源IP地址填写为10.0.0.1,目的IP地址填写为广播地址255.255.255.255;  然后该IP数据报被封装到以太网帧中,其中以太网帧中源MAC地址填为00:04:5a:9f:9e:80,目的MAC地址填为ff:ff:ff:ff:ff:ff:ff。     这里假定该DHCP服务器的IP地址为10.0.0.1,MAC地址为00:04:5a:9f:9e:80。    DHCPDISCOVER  对IP地址172.16.1.34的请求被拒绝,所以此后客户机不再使用该IP地址,而是通过一个DHCPDISCOVER消息重新寻找新的IP地址。       Op为1代表这是一个DHCP请求消息;   xid为0x3a681b0b,是新的事务ID;   选项中指明DHCP消息类型为DHCPDISCOVER;   选项中还包含了之前使用的已请求的IP地址172.16.1.34;   选项中的Parameter Request List客户机需要的配置信息,通常包含子网掩码、默认网关、DNS服务器地址等。    该DHCP消息被封装在UDP用户数据报中,其中UDP头部中源端口号填写为68,目的端口号填写为67;  然后该UDP用户数据报被封装到IP数据报中,其中IP头部中的源IP地址填写为0.0.0.0,目的IP地址填写为广播地址255.255.255.255;  然后该IP数据报被封装到以太网帧中,其中以太网帧中源MAC地址填为00:13:02:20:b9:18,目的MAC地址填为ff:ff:ff:ff:ff:ff:ff。  DHCPOFFER  在接收一个DHCPDISCOVER消息后,DHCP服务器会响应一个IP地址、租约和其他配置信息的确认,它们包含在一个DHCPOFFER消息中。(在本例中,DHCP服务器同时也是路由器和DNS服务器)       Op为2代表这是一个DHCP应答消息;   xid为0x3a681b0b,代表该应答与上一个DHCPDISCOVER请求消息所匹配;   yiaddr为10.0.0.57,表示DHCP服务器计划分配给客户机的IP地址;   siaddr为10.0.0.1,是该DHCP服务器的IP地址;   选项中指明了消息类型为DHCPOFFER,同时包含了服务器提供给客户机的配置信息,包括:      提供的IP地址的租用期、更新、重新绑定的超时时间,分别为12小时、6小时、10.5小时;   子网掩码255.255.255.128;   默认网关10.0.0.1;   DNS服务器10.0.0.1。      该DHCP消息被封装在UDP用户数据报中,其中UDP头部中源端口号填写为67,目的端口号填写为68;  然后该UDP用户数据报被封装到IP数据报中,其中IP头部中的源IP地址填写为10.0.0.1,目的IP地址填写为广播地址255.255.255.255;  然后该IP数据报被封装到以太网帧中,其中以太网帧中源MAC地址填为00:04:5a:9f:9e:80,目的MAC地址填为ff:ff:ff:ff:ff:ff:ff。  DHCPREQUEST  当客户机收到一个DHCPOFFER消息,并决定租用服务器提供的IP地址10.0.0.57,它会发送第二个DHCPREQUEST消息。       Op为1代表这是一个DHCP请求消息;   xid与之前相同,代表该消息与之前的匹配;   ciaddr、yiaddr、siaddr、giaddr均为0.0.0.0;   选项中指明DHCP消息类型为DHCPREQUEST、请求的IP地址10.0.0.57、DHCP服务器标识符10.0.0.1。    该DHCP消息被封装在UDP用户数据报中,其中UDP头部中源端口号填写为68,目的端口号填写为67;  然后该UDP用户数据报被封装到IP数据报中,其中IP头部中的源IP地址填写为0.0.0.0,目的IP地址填写为广播地址255.255.255.255;  然后该IP数据报被封装到以太网帧中,其中以太网帧中源MAC地址填为00:13:02:20:b9:18,目的MAC地址填为ff:ff:ff:ff:ff:ff:ff。     该DHCPREQUEST消息仍采用广播方式发送,选项中的服务器标识符字段用于避免其他DHCP服务器提交地址绑定。    DHCPACK  当选中的DHCP服务器接收到DHCPREQUEST消息并同意绑定,它会使用一个DHCPACK消息来响应。       DHCPACK消息与之前的DHCPOFFER消息非常相似。    该DHCP消息被封装在UDP用户数据报中,其中UDP头部中源端口号填写为67,目的端口号填写为68;  然后该UDP用户数据报被封装到IP数据报中,其中IP头部中的源IP地址填写为10.0.0.1,目的IP地址填写为广播地址255.255.255.255;  然后该IP数据报被封装到以太网帧中,其中以太网帧中源MAC地址填为00:04:5a:9f:9e:80,目的MAC地址填为ff:ff:ff:ff:ff:ff:ff。  检测冲突  至此,小明的笔记本电脑已获得了IP地址10.0.0.57。但是在使用这个IP地址之前,为了避免该IP地址已被其他主机使用,还要进行冲突检测。冲突检测有两种方法:免费ARP和ACD。  免费ARP  DHCP客户端(小明的笔记本)会向网络中发送一条用于IP地址冲突检测的ARP请求消息,称为免费ARP。     该ARP消息中:   源IP地址和目标IP地址都是客户机自己的IP地址(10.0.0.57);   源MAC地址为DHCP客户端的MAC地址(00:13:02:20:b9:18);   目标MAC地址为广播地址(ff:ff:ff:ff:ff:ff)。    我们不希望这个ARP请求得到回应,因为是自己请求解析自己,如果网络上没有一个相同的自己(冒牌货,实际上就是地址冲突),那么这个ARP请求永远不可能得到回应;如果有主机回应了这个ARP请求,就表示网络上有两台主机正在使用相同的IP地址,即发生IP冲突。此时,DHCP客户端不会使用该IP地址(10.0.0.57),并会给DHCP服务器发送一个DHCPDECLINE的消息,通知该地址不可使用。  ACD  ACD即IPv4地址冲突检测,相较于免费ARP,ACD是一种更先进的IP冲突检测方法。  ACD定义了ARP探测分组和ARP通告分组。  在获得候选IP地址10.0.0.57后,小明的笔记本发送一个ARP探测分组,用于查看候选IP地址是否被其他主机所使用。     ARP探测分组是一个ARP请求分组,其消息格式中:   源IP地址填为0.0.0.0(避免候选IP地址被另一台主机使用时的缓存污染);   源MAC地址为小明笔记本的MAC地址(00:13:02:20:b9:18);   目的IP地址为候选IP地址(10.0.0.57);   目的MAC地址为广播地址(ff:ff:ff:ff:ff:ff)。    该ARP探测分组封装到以太网帧中,通过广播地址向网络中的所有主机发送,相当于小明的笔记本向网络中的主机发问“谁有IP地址10.0.0.57对应的MAC地址啊?有的话告诉我!”。  在发送ARP探测分组时,小明的笔记本可能接收到ARP应答或请求。如果收到了ARP探测分组对应的ARP应答,说明候选IP地址已经被其他主机占用了;如果收到了其他主机发送的ARP探测请求,且其目的IP地址中包含相同的候选地址,表明存在其他主机也正在尝试获得候选IP地址。在这两种情况下,系统会显示地址冲突,并尝试其他可选IP地址。  如果小明的笔记本没有发现冲突,它会发送ARP通告分组,以表明它现在使用这个候选IP地址。     ARP通告分组中:   源IP地址填为10.0.0.57;   源MAC地址为小明笔记本的MAC地址(00:13:02:20:b9:18);   目的IP地址为候选IP地址(10.0.0.57);   目的MAC地址为广播地址(ff:ff:ff:ff:ff:ff)。    ACD是一个持续的过程,当小明的笔记本通告它正使用的IP地址后,它会继续检查收到的ARP请求或应答,查看自己的IP地址是否出现在这些ARP消息的源IP地址字段中,如果是,说明其他主机与自己在使用相同的地址,然后采取进一步措施,或放弃IP或保留IP并防御,当然也可能不理会冲突。  DHCP状态机  下面附上DHCP客户机的状态机。       虚线和INIT状态表示协议开始。   租用时间(T):在不更新租约的情况下地址可被租用的时间上限。   更新时间(T1):客户机从获得租约到尝试要求服务器更新租约的时间。   重新绑定时间(T2):客户机尝试要求DHCP服务器更新其地址的时间。   在默认情况下,T1=T/2,T2=7T/8。   点赞 0 评论 0 全部评论 推荐最新楼层 暂无评论,快来抢首评~

相关推荐

09-21 10:45 门头沟学院 后端工程师 烽火通信offer逼签 面试体验一般面了100分钟,从10:30面到12:10开摄像头就露了发际线1. 问学校课程?2. 随便问了下实习经历3. mysql八股 包括索引(问得很深),存储引擎,行级锁,表级锁4. redis的数据结构5. 怎么测mq,死信队列怎么测6. 高并发场景测那些东西?7. 手撕 一道java,一道sql最后燃尽了,sql没撕出来#测开面试 #秋招 查看6道真题和解析 点赞 评论 收藏 分享 09-23 18:35 已编辑 门头沟学院 管理培训生 字节的出差福利应该是互联网里最好的吧 没想到一入职节子,当了回出差狗,连续两周深度体验出差生活,现在我的感受是“只要不让我出差,啥活我都可以干”但是出差补贴一天150🥹对于一天实习工资150的实习牲来说双倍工资真的很幸福了,而且400以下的酒店是任选的,上下班是打车自由的,这点我必须说公司大气👍但需应对工作的变化也是真的,下班后还特种兵暴走也是精神力拉满,相比于在工位上早10晚10,也算是强度更高一级别了 DonkeyKane:150日薪太低了吧 字节跳动公司福利 1217人发布 点赞 评论 收藏 分享 09-19 12:15 门头沟学院 Java 等阿里和字节的就可以打牌了 猫头夜鹰:请问收到意向要点接受拒绝吗,还是开奖之后再接受拒绝 点赞 评论 收藏 分享 07-31 10:09 滇西科技应用技术大学 招聘专员 求职 求大佬帮帮忙 爱睡觉的冰箱哥:你是我今晚见过的最美的牛客女孩 点赞 评论 收藏 分享 昨天 15:25 西安电子科技大学 嵌入式工程师 海康威视我还是做不到吗 果咩内,海康威视这次还是没能让你尽兴吗 投递海康威视等公司10个岗位 点赞 评论 收藏 分享 评论 点赞成功,聊一聊 >点赞 收藏 分享 评论 提到的真题

返回内容

全站热榜 更多 1 ... 谁偷走了你的大厂梦?个人警示录 2.3W 2 ... 秋招完全失败,想和美团字节爆了😅 9825 3 ... 双非拿下字节转正,我想我做对了这些事情 5268 4 ... 我司冷门但不邪门 4782 5 ... 为了这一切值得嘛? 4572 6 ... 意向开始陆陆续续发出来了,ATMD大满贯 4393 7 ... 秋招南绷 3650 8 ... 字节噩梦手撕难度 3429 9 ... 分享我的秋招之路(芯片上岸版) 3209 10 ... 去哪儿Java一面挂 3134 创作者周榜 更多 正在热议 更多 # 拿到offer之后,可以做些什么 # 19400次浏览 155人参与# 硬件开发岗知多少 # 15127次浏览 121人参与# 思朗科技求职进展汇总 # 33982次浏览 267人参与# 入职跑路最快的一次经历 # 19928次浏览 142人参与# ___岗狗都不干,我干! # 9032次浏览 88人参与# 校招谈薪技巧 # 32236次浏览 464人参与# 携程求职进展汇总 # 605995次浏览 4502人参与# 材料转码还有必要吗? # 26917次浏览 143人参与# 面试时间长是好事吗? # 48857次浏览 374人参与# 你会为了工作牺牲生活吗? # 39599次浏览 297人参与# 小米编程考试 # 5951次浏览 97人参与# 国企秋招,你投了吗? # 6464次浏览 63人参与# 你在职场中沾染到的“坏”习惯 # 7169次浏览 81人参与# 华为工作体验 # 227167次浏览 1274人参与# 如何看待应届生身份? # 166025次浏览 1887人参与# 如果你有一天可以担任公司的CEO,你会做哪三件事? # 36684次浏览 497人参与# 材料人的华为红黑体验 # 31548次浏览 178人参与# 中兴工作体验 # 34541次浏览 298人参与# 提名点击就挂的公司 # 45141次浏览 231人参与# 面试被问第一学历差时该怎么回答 # 183952次浏览 1460人参与# HR问:你期望的薪资是多少?如何回答 # 59180次浏览 617人参与

刷真题、补算法、看面经、得内推

扫一扫,把题目装进口袋

移动版

关于我们 加入我们 意见反馈

企业服务

校企合作 联系我们 免责声明 友情链接 资源导航

付费咨询

扫描二维码,进入QQ群

扫描二维码,关注牛客公众号

公司地址:北京市朝阳区北苑路北美国际商务中心K1座一层-北京牛客科技有限公司

联系方式:010-60728802 投诉举报电话:010-57596212(朝阳人力社保局)

牛客科技©2025 All rights reserved

admin@nowcoder.com 京ICP备14055008号-4 增值电信业务经营许可证 营业执照 人力资源服务许可证 京公网安备 11010502036488号

皇家推荐

抖音内容推广全能解决方案:石青推广大师软件
365平台拒绝提款怎么办

抖音内容推广全能解决方案:石青推广大师软件

📅 06-30 👁️ 4439
快玩游戏盒无法安装如何解决?游戏盒无法安装解决方法图文详解
回忆世界杯夺冠!伊卡尔迪:内心被梅西、天使触动 他们终于成功
癞皮的意思
bt365最新网址

癞皮的意思

📅 08-27 👁️ 5753
为什么现在许多音乐软件下载歌曲或者听歌曲都要钱了?
365平台拒绝提款怎么办

为什么现在许多音乐软件下载歌曲或者听歌曲都要钱了?

📅 08-21 👁️ 9621
冰Z(道具)
bt365最新网址

冰Z(道具)

📅 08-24 👁️ 8396