dhcp(Dynamic Host Configuration Protocol):配置一段共享IP地址,为新上线的机器分配IP地址,回收下线机器的IP地址。

正常情况下主机(DHCP client)和DHCP server交互通过四个数据包完成IP的配置,分为DHCP Discover、DHCP Offer、DHCP request、DHCP ACK四步:

如何为新机器分配IP

不完整的包是无法在网络上传输的

一、客户端申请地址(DHCP Discover)

新的机器上线还没有合法的IP地址时,会使用0.0.0.0255.255.255.255这个地址发送广播包,广播包封装了UDP,UDP封装了BOOTP(Bootstrap Protocol)。这个包发出Boot request,意在告诉局域网中的主机,我还没有IP地址,我的MAC地址是xx:xx:xx:xx:xx:xx,谁能给我一个IP地址?

物理层:包含网卡信息、使用了DHCP协议的UDP包等信息

数据链路层:包含主机MAC地址,广播MAC地址ff:ff:ff:ff:ff:ff等信息

网络层:包含TTL、主机IP地址、广播地址等信息

传输层:udp的端口号等信息

应用层:Boot request中包含当前主机IP地址、DNS服务器地址(此时的主机一无所知,置为0.0.0.0),需要获取的子网掩码、网关、DNS等信息

后续主机和DHCP传输的四个包都是一步一步对以上信息的填补。

二、DHCPserver分配地址(DHCP Offer)

  1. 局域网中的主机收到网络包判断如果不是发给自己的则丢弃,DHCP服务器发现了dhcp类型的包,于是接收并解开分析,发现有一个新主机向自己申请IP地址,于是DHCP server会保留一个IP地址(期间不会分配给别人)。
  2. 新主机还没有分配到IP地址,DHCP server仍然需要使用⁄广播包的方式发送,在数据链路层添加自己的MAC地址,设置广播MAC地址。填充自己的IP地址到网络层,设置UDP端口信息,在Boot reply中设置Boot request请求的内容,并附加租约时间
  3. 发送广播包

三、新主机选择DHCP Offer(DHCP request)

为什么叫选择DHCP Offer?因为如果有多个DHCP server,他们都会发送DHCP Offer广播包,此时新主机(DHCP client)会收到多个包,通常会选择最先到达的DHCP Offer。选择好offer之后此时的客户端仍然没有IP地址,继续发送广播包,称为DHCP request。

  1. 设置MAC地址信息,设置IP信息(0.0.0.0和255.255.255.255),设置UDP信息
  2. 设置Boot request接受的DHCP offer中的IP地址、DHCP server的IP地址、以及要下一次收到ACK的广播或单播模式。
  3. 通过广播包告诉所有DHCP server,我接受了那个DHCP server的Offer,请其他DHCP server撤销提供的IP地址

四、最终确认(DHCP ACK)

DHCP server收到DHCP request后会使用广播或单播的模式发送一个ACK包作为最终确认,完成这一步新机器的IP地址就设置完成了。

  1. 组装MAC头,根据request要求用单播还是广播(Bootp flags:BROADCAST设1为广播,设0为单播),单播设置新机器的MAC地址,广播则仍然是ff:ff:ff:ff:ff:ff,同理组装IP头,UDP头
  2. 组装应用层BOOTP头,包含要分配给主机的IP地址,主机网卡的MAC地址,以及子网掩码、网关、DNS、租期、续约时间等。

DHCP租约更新

通过以上内容我们知道DHCP分配的IP地址有租约一说,租期到了就需要收回地址,如果主机IP在租期到期后还需要继续使用,那么就要主动向DHCP server以单播的形式发送DHCP request来请求续租。

  1. 一般在租期过去1/2时发送请求DHCP request请求。
  2. DHCP server收到请求后会发送DHCP ACK,如果续约成功则返回新的租期给主机;如果DHCP server不允许主机继续使用IP,则DHCP ACK应答会告诉主机。申请失败后主机继续使用该IP,直到7/8时主机再次发送DHCP request请求,如果失败则该地址被释放。

HDCP与PXE

通过DHCP server和PXE server(Pre-boot Execution Environment)、TFTP server可以做到批量安装操作系统。

主机启动是通过BIOS读取MBR(Master Boot Record)来启动GRUB -> 通过GRUB加载内核、initramfs文件 -> 再由内核启动初始化操作系统。所以将PXE client放在BIOS里面,BIOS将PXE client调入内存,通过PXE client与PXE server传输数据和执行指令可以完成操作系统的自动安装

PXE安装过程

  1. 配置DHCP的next-server指向PXE server的地址,再配置filename指向启动文件pxelinux.0
  2. 主机拿到IP地址的同时也会收到PXE server的IP地址和启动文件pxelinux.0路径,主机的PXE client通过TFTP下载pxelinux.0并执行,拿到pxelinux.cfg,该配置文件有内核、initramfs的路径。
  3. PXE client读取配置文件后逐个请求,完成安装后重启并从硬盘启动操作系统。

如果需要一些定制化的配置可以使用kickstart配置文件。

学习自:

《趣谈网络协议》刘超

《图解TCP/IP》

《图解HTTP》

《网络是怎样连接的》

DHCP和PXE是怎么工作的的更多相关文章

  1. DHCP和PXE

    继续学习,Let's go!DHCP和PXE都是什么呢?如果非科班出身,可能一脸懵逼,好多东西需要去学习了,真的,继续学吧,付出不一定会有回报,不付出肯定就是等死了,呵呵! 一.DHCP 真正需要手动 ...

  2. 第4讲 | DHCP与PXE:IP是怎么来的,又是怎么没的?

    第4讲 | DHCP与PXE:IP是怎么来的,又是怎么没的? linux 配置网络IP地址: 使用 net-tools: sudo ifconfig eth1 10.0.0.1/24 sudo ifc ...

  3. DHCP(动态主机配置协议)工作流程

    一.DHCP的作用 我们先来看一下什么是DHCP,DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)它可以为客户机自动分配IP地址.子网掩码以及缺省网 ...

  4. CentOS6下DHCP服务(一)工作原理及安装配置说明

    1.DHCP服务用途 DHCP是Dynamic Host Configuration Protocol的简写,DHCP服务器最主要的工作就是自动地将网络参数分配给网络中的每台计算机,让客户端的计算机在 ...

  5. DHCP服务+PXE自动安装系统

    DHCP服务+PXE自动安装系统 DHCP安装 安装DHCP服务器 yum install dhcp -y 安装完dhcp默认无法启动,需要编辑配置文件设置分配地址范围等相关信息,服务器自身IP地址要 ...

  6. 4 (计算机网络) DHCP与PXE:IP是怎么来的,又是怎么没的?

    如何配置 IP 地址? 那如何配置呢?如果有相关的知识和积累,你可以用命令行自己配置一个地址.可以使用 ifconfig,也可以使用 ip addr.设置好了以后,用这两个命令,将网卡 up 一下,就 ...

  7. [无人值守安装操作系统]__RHEL6__FTP+TFTP+DHCP+Kickstart+PXE

    实验环境 1.实验平台:VMware Workstation 10 2.实验OS:RHEL6 3.服务器A: (1) 10.0.10.158 (2) DHCP/FTP/TFTP (3) 有可使用的yu ...

  8. linux dhcp搭建及pxe无人值守装机

    DHCP动态主机配置协议:由IETF组织制定,用来简化主机ip地址分配管理可以自动分配的入网参数ip地址/子网掩码/广播地址默认网关地址DNS服务器地址 ----------------------- ...

  9. DHCP协议和PXE

    在学习IP地址基本概念之后,需要了解到如果需要和其他机器通讯,我们就需要一个通讯地址,我们需要给网卡配置一个地址. 如何配置 IP 地址? 可以用命令行自己配置一个地址.可以使用 ifconfig,也 ...

  10. dhcp、tftp及pxe简介

    DHCP: 全称:Dynamic Host Configuration Protocol  动态主机配置协议 DHCP配置内容: IP/Netmask Gateway DNS Server bootp ...

随机推荐

  1. 解决Springboot项目打成jar包后获取resources目录下的文件失败的问题

    前几天在项目读取resources目录下的文件时碰到一个小坑,明明在本地是可以正常运行的,但是一发到测试环境就报错了,说找不到文件,报错信息是:class path resource [xxxx] c ...

  2. python3使用PIL添加中文文本水印背景

    环境:Windows10_x64  Python版本 :3.9.2 Pillow版本:9.1.1   写的博客文章被转载且不注明出处的情况时有发生,甚至有部分转载者将文章配图添加自己的水印!为了保护作 ...

  3. 企业级logstash简单使用(ELK)

    企业级logstash简单使用(ELK) 要使用logstash收集到Elasticsearch的方式,需确保logstash版本与es版本一致. 由于我也是刚刚研究使用,所以本文暂不会出现原理性的东 ...

  4. 前端Vue组件之仿京东拼多多领取优惠券弹出框popup 可用于电商商品详情领券场景使用

    随着技术的发展,开发的复杂度也越来越高,传统开发方式将一个系统做成了整块应用,经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改,造成牵一发而动全身.通过组件化开发,可以有效 ...

  5. IIS部署的应用无法自动注册到Nacos

    问题描述: 自己开发的某系统后台API接入nacos,在IIS上部署无法自动注册到nacos服务列表中.其根本原因是网站处于休眠状态,当某请求访问该网站时,网站被激活,nacos注册成功. 但这块有个 ...

  6. 零基础实现Java直播(一):集成

    从泛娱乐的秀场直播,到直播带货潮流中的电商直播,直播已经成为2020年最热的应用技术之一,越来越多的产品希望加入直播功能.下面我们基于即构Express Video SDK,来分享如何从零实现线上直播 ...

  7. 即构SDK支持对焦、变焦、曝光调整,让直播细节清晰呈现

    对焦.变焦.曝光调整,摄影爱好者对这三个术语一定不陌生. 对焦是指通过相机对焦机构变动物距和相距的位置,使被拍物成像清晰的过程:变焦指的是在望远拍摄时放大远方物体,并使之清晰成像 :曝光调整是一种曝光 ...

  8. Git子模块使用说明

    介绍 前端不同应用存在公共的脚本或样式代码,为了避免重复开发,将公共的代码抽取出来,形成一个公共的 git 子模块,方便调用和维护. 软件架构 本仓库代码将作为 git 子模块,被引用到其他仓库中,不 ...

  9. LeetCode 周赛上分之旅 #35 两题坐牢,菜鸡现出原形

    ️ 本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 和 [BaguTree Pro] 知识星球提问. 学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思 ...

  10. Gin中间件开发

    Gin是一个用Go语言编写的Web框架,它提供了一种简单的方式来创建HTTP路由和处理HTTP请求.中间件是Gin框架中的一个重要概念,它可以用来处理HTTP请求和响应,或者在处理请求之前和之后执行一 ...