首页 题库 公司真题 专项练习 面试题库 在线编程 面试 面试经验 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 全部评论 推荐最新楼层 暂无评论,快来抢首评~
相关推荐
昨天 17:59 浙江大学 Java 如果你还只刷ACM算法,可能过不了25年的华为机试 昨天进行了华为今年校招笔试的第一场,感兴趣的牛友们可以去牛客->在线编程->华为机试 去感受下今年真题的难度。这里想说的是和之前相比,AI岗位的机试考核变化最大了。从之前的3个算法题,变成了现在的20个选择+2个AI题。选择是150分,AI算法题是150+300分,超过180分才能进入到下一轮。完全抛弃了之前的ACM算法题,那么新的变化,牛友们要怎么准备呢 ?1.选择题。牛客 -> 专项练习 每天定期刷个20-30道题,就当做面试八股的提前练习。2.AI算法题牛客 -> 在线编程 -> AI篇 这里有机器学习、深度学习经典的板子题,华为今年第一次改革,题目应该也不... 投递华为等公司10个岗位 点赞 评论 收藏 分享 08-22 10:40 西北工业大学 DSP工程师 小鹏一面 本人bg985硕。项目比较多(主要是嵌入式软硬件和通信上位机)。岗位是AI软件工程师,整体流程挺快8.10AI面,8.18一面,目前通过了正在约二面自我介绍七分钟,整体根据项目经历去提问,整理了下面几个问题1,DSP中常用的中断的优先级;2,介绍一下FPGA和DSP的性能和规格区别;3,DSP中时钟的使用方法和流程;4,整个项目闭环开发的流程;5,算法设计的具体过程。面试过程中hr很温和,有一个没答上,会引导你去回答或者换一个问题,整体感觉不错 查看5道真题和解析 点赞 评论 收藏 分享 07-11 18:47 已编辑 门头沟学院 后端工程师 六段大厂实习,米哈游秒挂 六段大厂,9硕 难绷开局,秋招出师不利。米哈游你到底想要啥样的人。 在看数据的孤勇者很想...:如果你是在校硕士,六段大厂实习一眼假,假设一段实习两个月,硕一暑假,硕一寒假,大四暑假,大四寒假,大三寒假,大三暑假,哥们,你怎么卷吗,寒假基本两个月在企业实习不现实,所以你可能是日常实习,但是你不可能每段日常实习都是两个月吧,他们日常实习都是三个月起步这样,所以你往前推一下,一段日常实习,就三个月,敢情你大学生课都不上,全在实习吗?你自己问问自己,六段大厂实习,一点没学到,自己说出来会不会笑呀,不管学历,但凡有一段大厂实习都很牛逼了 投递米哈游等公司10个岗位 点赞 评论 收藏 分享 08-27 11:39 门头沟学院 Java 字节,快来蹂躏我吧! 不管你挂我多少次,我还是会默默改好简历,提高面试技巧的,亲爱的字节大人(呜呜,今年怎么这么难) 求份好活:咋投个字节把自己属性还暴露了呢 点赞 评论 收藏 分享 评论 点赞成功,聊一聊 >点赞 收藏 分享 评论 提到的真题
返回内容
全站热榜 更多 1 ... 答应我把你的字节手撕留下来好吗 8395 2 ... 字节三面 不敌 6004 3 ... 小红薯 一面 速战速决版 5080 4 ... 26届秋招 - 快手 - 测开面经 3785 5 ... 美团后端秋招一面 3682 6 ... 那个大家口中的好学生,他延毕了 3642 7 ... 快手HR保温 八月告一段落 3538 8 ... 等团爱团信团,秋招第一个大厂offer 2957 9 ... 27届大厂实习 2767 10 ... 美团后端一面 2710 创作者周榜 更多 正在热议 更多 # 秋招的破防瞬间 # 30174次浏览 456人参与# 康冠科技KTC求职进展汇总 # 15320次浏览 83人参与# 巨人网络求职进展汇总 # 35855次浏览 259人参与# 你投了多少家公司?进展是___ # 19607次浏览 194人参与# 担心入职之后被发现很菜怎么办 # 157845次浏览 877人参与# 一起聊华为 # 26728次浏览 234人参与# 收钱吧秋招 # 226960次浏览 2167人参与# 一起聊美团 # 35184次浏览 310人参与# 蔚来开了,制造业的牛友投递了吗? # 26362次浏览 206人参与# 实习离职怎么跟领导说 # 23024次浏览 185人参与# 暑假倒计时,你都干了些啥? # 11146次浏览 110人参与# 你做过哪些dirty work # 7614次浏览 97人参与# 第X杯敬自己 # 8430次浏览 142人参与# 华为存储OD事变 # 135494次浏览 702人参与# 七夕节你打算怎么过? # 25699次浏览 571人参与# 实习教会我的事 # 10764次浏览 131人参与# 如果公司降薪,你会跳槽吗? # 89497次浏览 616人参与# 汇川技术求职进展汇总 # 135806次浏览 882人参与# 周六调休日,你打算几点下班? # 11311次浏览 55人参与# 校招求职有谈薪空间吗 # 160965次浏览 2064人参与# 聊聊你的职场新体验 # 190359次浏览 1544人参与# 市场营销面经 # 47383次浏览 302人参与
刷真题、补算法、看面经、得内推
扫一扫,把题目装进口袋
移动版
关于我们 加入我们 意见反馈
企业服务
校企合作 联系我们 免责声明 友情链接 资源导航
付费咨询
扫描二维码,进入QQ群
扫描二维码,关注牛客公众号
公司地址:北京市朝阳区北苑路北美国际商务中心K1座一层-北京牛客科技有限公司
联系方式:010-60728802 投诉举报电话:010-57596212(朝阳人力社保局)
牛客科技©2025 All rights reserved
admin@nowcoder.com 京ICP备14055008号-4 增值电信业务经营许可证 营业执照 人力资源服务许可证 京公网安备 11010502036488号