TCP/IP详解 卷1:协议 学习笔记 第十六章 BOOTP:引导程序协议

2023-11-18

一个无盘系统在不知道自身IP地址情况下,进行系统引导时能通过RARP协议获取它的IP地址,使用RARP会有两个问题:(1)IP地址是返回的唯一结果;(2)RARP使用链路层广播,RARP请求不会被路由器转发,每个实际网络必须设置一个RARP服务器。

BOOTP使用UDP,通常需要与TFTP协同工作。
在这里插入图片描述
在这里插入图片描述
操作码字段为1时表示请求,为2时表示应答。

硬件类型字段为1时表示10Mb/s的以太网,此字段和ARP请求或应答中同名字段表示的含义相同。

对于以太网,硬件地址长度字段为6。

跳数字段由客户设为0,但也能被代理服务器设置。

事务标识字段是由客户设置并由服务器返回的32bit整数,客户用它对请求和应答进程匹配,对于每个请求,客户应将该字段设为一个随机数。

秒数字段设置为一个时间值,备用服务器在等待此时间值后才会响应客户的请求,这意味着主服务器没有启动。

客户IP地址字段当客户知道自己的IP时,客户将其写入此字段,否则将此字段置0,当置0时,服务器会将客户的IP写入你的IP地址字段。

服务器IP地址字段由服务器填写。

如果使用了某个代理服务器,则该代理服务器填写网关IP地址字段。

客户必须设置它的客户硬件地址字段,尽管这个值与以太网数据帧头中的值相同,因为一个进程通过查看UDP数据报确定以太网帧首部中的硬件地址字段通常是很困难的(或是不可能的)。

服务器主机名字段是一个空值终止的串,由服务器填写,此外,服务器还在引导文件名字段填入用于系统引导的文件名及其所在位置的路径全名。

特定厂商区域字段用于对BOOTP进行扩展。

当一个客户使用BOOTP(操作码为1)进行系统引导时,引导请求通常是采用链路层广播,IP首部中的目的IP地址为255.255.255.255(受限的广播),源IP通常是0.0.0.0(在进行系统自引导时,此IP是一个有效IP地址),因为此时客户还不知道它的IP。

BOOTP有两个熟知端口,BOOTP服务器为67,客户为68,这意味这BOOTP客户不会选择未用的临时端口,选择两个端口的原因是服务器的应答可以进行广播(但通常不广播),如果应答进行了广播,而客户又选择临时端口,那么这些广播也能被其他主机中碰巧使用相同临时端口的应用进程收到,因此,采用临时随机端口对广播来说是一个不好的选择。

如果BOOTP客户也使用67作为熟知端口,则对于每个BOOTP服务器的应答,网络内所有BOOTP服务器都会被唤醒,之后通过检查操作码会发现这是一个应答而非请求,就不用做任何处理,因此BOOTP客户选择一个与BOOTP服务器不同的熟知端口就可以避免以上过程。

如果多个客户同时进行系统引导,并且服务器广播所有应答,这样每个客户都会收到其他客户的应答,此时客户可通过BOOTP首部中的事务标识字段或检查客户的硬件地址进行区分。

用BOOTP引导一个X终端,其中客户名为proteus,服务器名为mercury:
在这里插入图片描述
第一行中,客户的请求来自0.0.0.0:68,发送的目的站是255.255.255.255:67,客户已经填写的字段是秒数(客户通常将秒数设为100秒)和以太网地址,跳数字段和事务标识没有显示出来,因为它们均为0,事务标识0表示客户忽略这个字段,因为如果打算对返回响应进行验证,它将把这个字段设置为一个随机数。

第二行是服务器的应答,服务器填写的字段是你的IP地址(tcpdump将其显示为名字proteus),服务器的IP地址(显示为名字mercury),网关的IP地址(显示为名字mercury)和引导文件名。

收到BOOTP应答后,客户立即发送了一个ARP请求来了解网络中其他主机是否已经占有了此IP地址,跟在who-has后的proteus对应目的IP,第三行和第四行中发送者IP为0.0.0.0,而第五行中发送者变成了proteus,这是一个没有意义的ARP请求。

第六行显示客户等待0.5s后广播了另一个BOOTP请求,这个请求与第一行唯一不同的是它将自己的IP写入IP首部字段中。之后第七行它收到了同一个服务器的相同应答。

第八行显示,客户在等待2秒后,又广播了一个BOOTP请求,之后在第九行收到了相同服务器的相同应答。

第十行显示,客户等待2秒后,向它的服务器mercury发送一个ARP请求,之后收到了第十一行的ARP应答。

在第十二行,客户收到ARP应答后,发送了一个TFTP读请求,请求读取它的引导文件,之后TFTP服务器和客户传送了2464个TFTP数据分组和确认,传送的数据量为512*2463+224=1261280字节。在传送数据的过程中,由于客户一直使用的都是TFTP服务器的知名端口69,因此tcpdump能用TFTP解释每个分组。由于TFTP服务器作为一个多用户系统,且使用TFTP的知名端口,因此通常TFTP客户不能使用这个端口,但由于系统正处于被引导过程,无法提供一个TFTP服务器,因此允许客户使用TFTP知名端口,这也暗示mercury上的TFTP服务器不关心客户的端口号是什么。

上图中没看到客户广播一个ICMP地址掩码请求来获取它的子网掩码,可认为客户所在网络的子网掩码在返回的BOOTP应答的特定厂商信息字段中,尽管tcpdump没有显示出来,RFC推荐使用BOOTP而非ICMP获取它的子网掩码。

X终端系统引导后,还需使用TFTP传送终端的字体文件、某些DNS名字服务器,然后进行X协议的初始化。

BOOTP客户通常固化在无盘系统的只读存储器中。

BOOTP服务器从它的熟知端口67读取UDP数据报,它不同于RARP服务器(必须读取帧类型字段为RARP请求的以太网帧)。由于BOOTP使用UDP,因此应用很难获取帧头中的客户硬件地址字段,所以BOOTP通过将客户的硬件地址放入BOOTP分组中去,使得服务器很容易获取客户的硬件地址。

对于BOOTP服务器,它发送一个UDP响应给客户时,如果服务器知道客户的IP(可能通过读取服务器上的配置文件),此时服务器可能向客户的IP发送一个ARP请求,但客户不会响应这个ARP请求,因为客户还不知道自己的IP。解决方法有两个:(1)此方法通常被UNIX服务器使用,即服务器发送一个ioctl请求给内核,将该客户的硬件地址和IP地址设置到ARP高速缓存中(与arp -s类似);(2)服务器广播这个BOOTP应答,最好当服务器不能设置ARP缓存时使用(因为通常期望网络广播越少越好),通常只有超级用户权限才能在ARP高速缓存中设置条目。

绝大多数路由器都支持BOOTP协议,使得BOOTP能够由路由器转发。

当路由器(也称BOOTP中继代理)在熟知端口67接收到BOOTP请求时,中继代理将它的IP(收到BOOTP请求的接口的IP地址)填入收到的BOOTP请求中的网关IP地址字段,然后将该请求发送到真正的BOOTP服务器,中继代理还将跳数字段值加1,这是为了防止请求无限地在网络内转发,RFC 951认为跳数达到3就可以丢弃该请求。BOOTP服务器收到这个请求后,产生BOOTP应答,这个应答发送回中继代理而非请求的客户(服务器通过网关IP地址字段不为空就知道了请求是否经过了转发),中继代理收到后,将它发给请求的客户。

64字节的特定厂商信息字段是服务器返回给客户的可选信息,如果有信息要提供,这个区域前4字节被设置为IP地址99.130.83.99,表示该区域包含信息,这称作magic cookie。之后跟一个条目表,其中的每个条目的开始是1字节的标志字段,条目的格式:
在这里插入图片描述
标志为0的条目作为填充字节(为使后面的条目有更好的字节边界)。

标志为255的条目表示结尾条目,结尾条目后剩余的字节都应设为255。

标志为1的条目是子网掩码条目,它的len字段总是4字节。

标志为2的条目是时间偏移条目,它的len字段总是4字节,它显示的是协调世界时(UTC,linux时间戳是从UTC 1970-01-01 00:00:00以来经过的秒数),它是一个二进制补码表示的值,负的偏移量表示一个本初子午线以东的位置,正的偏移量表示一个本初子午线以西的位置。

标志为3的条目是网关条目,它的len字段是4的倍数,它的值是一个或多个供客户使用的客户子网内的网关(路由器)IP地址,第一个是首选的网关。

厂商说明区域大小被限制为64字节,这对某些应用是个约束,一个新的协议称为动态主机配置协议DHCP(Dynamic Host Configuration Protocol)已经出现,它不是代替BOOTP的,DHCP将这个区域长度扩展到312字节。

假设路由器也转发RARP请求,路由器将RARP请求转发到路由器连接的其他网络中,这样路由器还要转发RARP应答,由于RARP只使用了链路层地址,路由器不会知道没有连接到路由器上的网络中的主机的链路层地址。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TCP/IP详解 卷1:协议 学习笔记 第十六章 BOOTP:引导程序协议 的相关文章

  • 小学二三年级入门信奥赛,如何从Scratch进入C++的学习

    小学生几年级适宜开始学习C 这是讨论的比较热烈 也是比较热门的话题 小学生适宜几年级开始学C 小学生适宜几年级开始学C CSDN博客 simple happiness 信息学规划 北京二年级学生图形化过二级想往信奥靠拢如何准备 信息学规划
  • 1.常用单词学习

    1 1 听力练习 第一课 Av264771740 P1 Av736460000 P1 哔哩哔哩 bilibili 有推荐的吗 这个和这个都很推荐 这个多少钱 请给我这个 全部 这些一共多少钱 卫生间在哪呢 一度 願 麻烦再来一次 英語話 会
  • 阿里云2核4G服务器优惠价格30元3个月?小心坑

    2024年阿里云2核4G服务器优惠价格30元3个月 活动 https t aliyun com U bLynLC 配置为云服务器ECS经济型e实例ecs e c1m2 large 3M固定带宽 系统盘为40GB ESSD Entry 活动打
  • Nexus5596交换机支持3层需要的子卡

    3层子卡 nexus5596如果没有这块子卡 无法支持3层特性 TEST Cisco N5596 1 show modu Mod Ports Module Type Model Status 1 48 O2 32X10GBase T 16X
  • 在阿里云ECS云服务器上部署和使用开源的应用程序容器引擎Docker

    Docker 是一个开源的应用程序容器引擎 具有可移植性 可扩展性 高安全性和可管理性等优势 它允许开发人员将应用程序和依赖项打包到可移植容器中 从而在 Linux 机器上高效构建 部署和管理应用程序 阿里云提供Docker镜像仓库 用于快
  • 网络基础面试题(二)

    11 什么是网桥 防火墙的端口防护是指什么 网桥是一种网络设备 用于连接两个或多个局域网 LAN 并转发数据包 它能够根据MAC地址来识别和转发数据 提高网络的传输效率和安全性 防火墙的端口防护是指对防火墙上的各个端口进行保护和限制 只允许
  • 虚拟主机操作系统 Windows、Linux

    操作系统将直接影响服务器的性能 安全性和可用性 因此确保选择合适的操作系统对于成功运行您的网站或应用程序至关重要 以下是一些考虑因素 可帮助您选择适合您需求的虚拟主机操作系统 1 熟悉度和技术支持 如何选择操作系统应该考虑您的经验水平和熟悉
  • pandas用法整理

    处理表格数据的时候经常用到pandas 每次用的时候都要去查函数 每次记不住 每次都查 哈哈哈 自己整理一下 码住 一 Pandas的数据类型 进行数据分析时 如何正确使用数据类型 这非常重要 在pandas中的数据类型和python原生数
  • 服务器集群是如何提高计算性能的?

    服务器集群是一种将多台服务器连接起来协同工作的技术 通过集群配置 可以提高计算性能 可靠性和可扩展性 以下是服务器集群如何提高计算性能的详细解释 一 并行处理能力 服务器集群的核心优势在于其并行处理能力 通过将多个服务器组成一个集群 可以将
  • 使用Hypothesis生成测试数据

    Hypothesis是Python的一个高级测试库 它允许编写 测试用例 时参数化 然后生成使测试失败的简单易懂的测试数据 可以用更少的工作在代码中发现更多的bug 安装 pip install hypothesis 如何设计 测试数据 通
  • 小白也能学会的创建Git仓库实操

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 2k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 用户数据中的幸存者偏差

    幸存者偏差 Survivorship bias 是一种常见的逻辑谬误 意思是没有考虑到筛选的过程 忽略了被筛选掉的关键信息 只看到经过筛选后而产生的结果 先讲个故事 二战时 无奈德国空防强大 盟军战机损毁严重 于是军方便找来科学家统计飞机受
  • 白帽子如何快速挖到人生的第一个漏洞 | 购物站点挖掘商城漏洞

    本文针对人群 很多朋友们接触安全都是通过书籍 网上流传的PDF 亦或是通过论坛里的文章 但可能经过了这样一段时间的学习 了解了一些常见漏洞的原理之后 对于漏洞挖掘还不是很清楚 甚至不明白如何下手 可能你通过 sql labs 初步掌握了sq
  • 2024年金三银四网络安全考试试题

    2023年金三银四网络安全考试试题 1 关于数据使用说法错误的是 A 在知识分享 案例中如涉及客户网络数据 应取敏感化 不得直接使用 B 在公开场合 公共媒体等谈论 传播或发布客户网络中的数据 需获得客户书面授权或取敏感化 公开渠道获得的除
  • 【VUE毕业设计】基于SSM的在线课堂学习设计与实现(含源码+论文)

    文章目录 1 项目简介 2 实现效果 2 1 界面展示 3 设计方案 3 1 概述 3 2 系统流程 3 3 系统结构设计 4 项目获取
  • 【计算机毕业设计】OA公文发文管理系统_xtv98

    近年来 人们的生活方式以网络为主题不断进化 OA公文发文管理就是其中的一部分 现在 无论是大型的还是小型的网站 都随处可见 不知不觉中已经成为我们生活中不可或缺的存在 随着社会的发展 除了对系统的需求外 我们还要促进经济发展 提高工作效率
  • 一台java服务器可以跑多少个线程?

    一台java服务器可以跑多少个线程 一台java服务器能跑多少个线程 这个问题来自一次线上报警如下图 超过了我们的配置阈值 打出jstack文件 通过IBM Thread and Monitor Dump Analyzer for Java
  • 搞懂 三次握手四次挥手

    计算机网络体系结构 在学习TCP 三次握手四次挥手之前 让我们先来看下计算机网络分层 主要分为OSI模型和TCP IP模型 OSI模型比较复杂且学术化 所以我们实际使用的TCP IP模型 以连接Mysql服务器为例理解这五层 应用层 应用层
  • 为什么我强烈推荐大学生打CTF!

    前言 写这个文章是因为我很多粉丝都是学生 经常有人问 感觉大一第一个学期忙忙碌碌的过去了 啥都会一点 但是自己很难系统的学习到整个知识体系 很迷茫 想知道要如何高效学习 这篇文章我主要就围绕两点 减少那些罗里吧嗦的废话 直接上干货 CTF如
  • 【GRNN-RBFNN-ILC算法】【轨迹跟踪】基于神经网络的迭代学习控制用于未知SISO非线性系统的轨迹跟踪(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 2 1 第1部分 2 2 第2部分

随机推荐

  • json数据如何存入到cookie中,如何获取

    1 引入相对应的cookie js插件如下 例如 button click function var username input name username val var password input name password val
  • scrapy爬虫爬取多网页内容

    摘要 此案例是爬取目标网站 https tipdm com 的新闻中心板块的公司新闻中所有新闻的标题 发布时间 访问量和新闻的文本内容 1 创建scrapy项目 我使用的是 Anaconda prompt 我们使用如下命令创建scrapy项
  • 视线估计、凝视目标估计相关评价指标

    1 TP TN FP FN qquad T F表示待分类目标的GT值 qquad P N表示预测到目标的正反例 在目标检测类任务中 qquad TP 表示正确检测到待检测目标
  • vcruntime140_1.dll丢失怎么办?vcruntime140_1.dll丢失最新解决方法

    如果您在使用某些软件或游戏时遇到了 vcruntime140 1 dll丢失 的错误提示 那么您需要采取一些措施来解决这个问题 以下三种解决方案都能解决vcruntime140 1 dll丢失问题 第一种解决方法 直接使用dll修复程序进行
  • C语言 mktime() gmtime()实现——亲测正确性

    前言 写此文章是因为有的嵌入式设备编程时不支持
  • node_modules安装及卸载

    1 安装 npm install 安装tb镜像 npm install g cnpm registry https registry npm taobao org 2 卸载 1 npm install rimraf g 2 rimraf n
  • Vue3 + Element-UI 搭建一个后台管理系统框架模板

    概述 本文将介绍如何基于Vue3和element ui搭建一个后台管理系统框架模板 我们将详细讲解代码流程 并提供详细的说明 技术栈 Vue3 Element ui Axios 前置知识 本文假设读者已经熟悉Vue3和Element ui的
  • Bootstrap插件(六)——警告框(alert.js)

    bootstrap中的alert和原本的alert弹框可不太一样 原来我们熟悉的弹框是在执行某个动作的时候 浏览器和我们弹出来的一个提示框 比如下面这样 而我们这里的警告框是在html内容之间的提示内容 只是他有着醒目的颜色 以此来达到提醒
  • h5标签上实现文字空格

    在vue项目中实现文字之间的空格 div class top p class groupLeader 组 xa0 xa0 xa0 长 span xxx span p p class standingGroupLeader 副组长 span
  • [YOLO专题-23]:YOLO V5 - ultralytics代码解析-网络子结构详解

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 122369993 目录 第1章 网络总
  • [QT编程系列-2]:C++图形用户界面编程,QT框架快速入门培训 - 1- 预备知识

    目录 概述 1 前置条件 1 1 C 1 2 图形界面 1 3 图形程序集成开发环境 1 4 图形程序开发框架 1 5 跨平台特性 1 6 QT快速感知 1 6 1 QT的典型应用 1 6 2 QT的特点 1 6 3 QT跨平台集成开发环境
  • Qt QProcess

    目录 概述 实 现 一 函数接口 二 执行命令 三 管 道 概述 本文介绍 在Linux环境下 使用Qt中的QProcess类执行shell命令并获取输出 头文件 include
  • 区块链数字签名详解

    有一点比较难以理解的答案就是 私钥加密公钥可以解密 公钥加密私钥可以解密 RSA的原理 两个大质数 p q 乘积 n 难以逆向求解 所以pq是对等的 公钥和私钥也是对等的 区块链 从数字货币到信用社会 读书笔记 这张图来自于新生大学的周兵
  • 【Vue项目实战】Vue3动画神操作!教你如何实现PPT一样的动画效果!

    文章目录 前言 一 Animate css是什么 二 安装和使用 1 安装 2 基本用法 3 JavaScript用法 三 动画制作 1 弹入动画 总结 前言 最近写界面的时候 发现一个前端组件很好玩 他就是鼎鼎大名的 Animate cs
  • 海康工业摄像头调用(linux基于python和opencv)

    1 下载官网客户端 其中包含SDK 官方网站 海康机器人 机器视觉 下载中心 安装deb文件 sudo dpkg i deb文件名 2 运行客户端 cd opt MVS bin MVS sh 如果连不上 看看是不是usb3 0的接口 3 调
  • ThinkPHP 日志信息泄露漏洞复现

    ThinkPHP 日志信息泄露漏洞复现 漏洞简介 ThinkPHP在开启DEBUG的情况下会在Runtime目录下生成日志 而且debug很多网站都没有关 ThinkPHP默认安装后 也会在Runtime目录下生成日志 THINKPHP3
  • 基于SSM 和 layui 的增删查改

    开发工具 IDEA 2021 WebStorm 2021 Mysql 8 0 开发环境 JDK 8 TomCat 8 5 81 apache maven 3 6 1 技术点 Spring SpringMVC Mybatis Mysql Ht
  • express使用简介

    框架搭建 1 安装脚手架 npm install g express generator 2 创建项目 express myapp 查看项目目录 可以知道启动文件www作用是提供http服务 express是一个全栈环境 所以有views
  • 维普期刊 瑞数5

    郑重声明 本项目的所有代码和相关文章 仅用于经验技术交流分享 禁止将相关技术应用到不正当途径 因为滥用技术产生的风险与本人无关 加载流程 url aHR0cDovL2xpYi5jcXZpcC5jb20vUWlrYW4vU2VhcmNoL0l
  • TCP/IP详解 卷1:协议 学习笔记 第十六章 BOOTP:引导程序协议

    一个无盘系统在不知道自身IP地址情况下 进行系统引导时能通过RARP协议获取它的IP地址 使用RARP会有两个问题 1 IP地址是返回的唯一结果 2 RARP使用链路层广播 RARP请求不会被路由器转发 每个实际网络必须设置一个RARP服务