TCP-IP详解卷1:协议 学习笔记(5) RARP ICMP

2024-03-03 17:58

本文主要是介绍TCP-IP详解卷1:协议 学习笔记(5) RARP ICMP,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

参考:TCP-IP详解卷1:协议

RARP

RARP分组的格式与ARP分组基本一致,它们之间的主要差别是RARP请求或应答的帧类型为0x8035,RARP请求的操作码为3,应答操作码为4。

RARP请求以广播的方式传送,RARP应答一般是单播传送的。

RARP服务器实现的一个复杂因素是RARP请求是在硬件层上进行广播的,这意味着它们不经过路由器进行转发。为了让无盘系统在RARP服务器关机状态下也能引导,通常在一个网络上要提供多个RARP服务器。

当服务器的数目增加时,网络流量也随之增加,因为每个服务器对每个RARP请求都要发送RARP应答。发送RARP请求的无盘系统一般采用最先收到的RARP应答。另外,还有一种可能发生的情况是每个RARP服务器同时应答,这样会增加以太网发送冲突的概率。

RARP协议是许多无盘系统在引导时用来获取IP地址的。RARP分组格式基本上与RAP分组一致,一个RARP请求在网络上进行广播,在分组中标明发送端的硬件地址,以请求相应IP地址的响应。应答通常是单播传送的。

ICMP Internet控制报文协议

ICMP经常被认为是IP层的一个组成部分。传递差错报文以及其他需要注意的信息。ICMP报文通常被IP层或更高层协议(TCP或UDP)使用。一些ICMP报文把差错报文返回给用户进程。

ICMP报文是在IP数据报内部被传输的

ICMP报文的格式如下图所示,所有报文的前4个字节都是一趟的,但是剩下的其它字节则互不相同。

类型字段可以有15个不同的值,以描述特定类型的ICMP报文。某些ICMP报文还使用代码字段的值来进一步描述不同的条件。

检验和字段覆盖整个ICMP报文,ICMP的检验和是必须的。

当发送一份ICMP差错报文时,报文始终包含IP的首部和产生ICMP差错报文的IP数据报的前8个字节。这样,接收ICMP差错报文的模块就会把它与某个特定协议(根据IP数据报首部中的协议字段来判断)和用户进程(根据包含在IP数据报前8个字节中的TCP或UDP报文首部中的TCP或UDP端口号来判断)联系起来。

下面各种情况都不会导致产生ICMP差错报文:

(1)ICMP差错报文(但是,ICMP查询报文可能会产生ICMP差错报文)

(2)目的地址时广播地址或多播地址的IP数据报

(3)作为链路层广播的数据报

(4)不是IP分片的第一片

(5)源地址不是单个主机的数据报。就是说,源地址不能为零地址、环回地址、广播地址或多播地址。

这些规则是为了防止过去匀速ICMP差错报文对广播分组响应所带来的广播风暴。

ICMP地址掩码请求用于无盘系统在引导过程中获取自己的子网掩码。系统广播它的ICMP请求报文(这一过程与无盘系统在引导过程中用RARP获取IP地址时类似的)。无盘系统获取子网掩码的另一个方法是BOOTP协议。ICMP地址掩码请求和应答报文的格式:

ICMP报文中的标识符和序列号字段由发送端任意选择设定,这些值在应答中将被返回。

ICMP时间戳请求允许系统向另一个系统查询当前的时间。返回的建议值是自午夜开始计算的毫秒数。协调的统一时间。这种ICMP报文的好处是它提供了毫秒级的分辨率,而利用其它方法从别的主机获取的时间只能提供秒级的分辨率。由于返回的时间是从午夜开始计算的,因此调用者必须通过其他方法获知当时的日期,这是一个缺陷。

请求端填写发起时间戳,然后发送报文。应答系统收到请求报文时填写接收时间戳,在发送应答时填写发送时间戳。大多数的实现把后面的两个字段都设成相同的值(提供三个字段的原因是可以让发送方分别计算发送的请求时间和发送应答的时间)。

ICMP端口不可达报文,是ICMP目的不可达报文中的一种。

UDP的规则之一是,如果收到一份UDP数据报,而目的端口与某个正在使用的进程不相符,那么UDP返回一个ICMP不可达报文,可以用TFTP强制生成一个端口不可达报文。

ICMP报文是在主机之间交换的,不用目的端口号,而每个20字节的UDP数据报则是从一个特定端口号发送到另一个特定端口。

跟在每个UDP后面的数字20是指UDP数据报中的数据长度。

ICMP的一个规则是,ICMP差错报文,必须包括生产该差错报文的数据报IP首部(包含任何选项),还必须至少包括跟在该IP首部后面的前8个字节。

一个重要的事实是包含在UDP首部中的内容是源端口号和目的端口号。就是由于目的端口号才导致产生了ICMP端口不可达的差错报文。接受ICMP的系统可以根据源端口号把差错报文来把差错报文与某个特定用户进程相关联。

导致差错的数据报中的IP首部要被送回的原因是IP首部中包含了协议字段,使得ICMP可以知道如何解释后面的8个字节。

有16种不同类型的ICMP不可达报文,代码分别从0到15。ICMP端口不可达差错代码是3。

 

 

 

这篇关于TCP-IP详解卷1:协议 学习笔记(5) RARP ICMP的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/770449

相关文章

MySQL 中的 CAST 函数详解及常见用法

《MySQL中的CAST函数详解及常见用法》CAST函数是MySQL中用于数据类型转换的重要函数,它允许你将一个值从一种数据类型转换为另一种数据类型,本文给大家介绍MySQL中的CAST... 目录mysql 中的 CAST 函数详解一、基本语法二、支持的数据类型三、常见用法示例1. 字符串转数字2. 数字

SpringBoot中SM2公钥加密、私钥解密的实现示例详解

《SpringBoot中SM2公钥加密、私钥解密的实现示例详解》本文介绍了如何在SpringBoot项目中实现SM2公钥加密和私钥解密的功能,通过使用Hutool库和BouncyCastle依赖,简化... 目录一、前言1、加密信息(示例)2、加密结果(示例)二、实现代码1、yml文件配置2、创建SM2工具

MyBatis-Plus 中 nested() 与 and() 方法详解(最佳实践场景)

《MyBatis-Plus中nested()与and()方法详解(最佳实践场景)》在MyBatis-Plus的条件构造器中,nested()和and()都是用于构建复杂查询条件的关键方法,但... 目录MyBATis-Plus 中nested()与and()方法详解一、核心区别对比二、方法详解1.and()

Spring IoC 容器的使用详解(最新整理)

《SpringIoC容器的使用详解(最新整理)》文章介绍了Spring框架中的应用分层思想与IoC容器原理,通过分层解耦业务逻辑、数据访问等模块,IoC容器利用@Component注解管理Bean... 目录1. 应用分层2. IoC 的介绍3. IoC 容器的使用3.1. bean 的存储3.2. 方法注

MySQL 删除数据详解(最新整理)

《MySQL删除数据详解(最新整理)》:本文主要介绍MySQL删除数据的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、前言二、mysql 中的三种删除方式1.DELETE语句✅ 基本语法: 示例:2.TRUNCATE语句✅ 基本语

Python内置函数之classmethod函数使用详解

《Python内置函数之classmethod函数使用详解》:本文主要介绍Python内置函数之classmethod函数使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 类方法定义与基本语法2. 类方法 vs 实例方法 vs 静态方法3. 核心特性与用法(1编程客

Python函数作用域示例详解

《Python函数作用域示例详解》本文介绍了Python中的LEGB作用域规则,详细解析了变量查找的四个层级,通过具体代码示例,展示了各层级的变量访问规则和特性,对python函数作用域相关知识感兴趣... 目录一、LEGB 规则二、作用域实例2.1 局部作用域(Local)2.2 闭包作用域(Enclos

Python实现对阿里云OSS对象存储的操作详解

《Python实现对阿里云OSS对象存储的操作详解》这篇文章主要为大家详细介绍了Python实现对阿里云OSS对象存储的操作相关知识,包括连接,上传,下载,列举等功能,感兴趣的小伙伴可以了解下... 目录一、直接使用代码二、详细使用1. 环境准备2. 初始化配置3. bucket配置创建4. 文件上传到os

Java内存分配与JVM参数详解(推荐)

《Java内存分配与JVM参数详解(推荐)》本文详解JVM内存结构与参数调整,涵盖堆分代、元空间、GC选择及优化策略,帮助开发者提升性能、避免内存泄漏,本文给大家介绍Java内存分配与JVM参数详解,... 目录引言JVM内存结构JVM参数概述堆内存分配年轻代与老年代调整堆内存大小调整年轻代与老年代比例元空

Python中注释使用方法举例详解

《Python中注释使用方法举例详解》在Python编程语言中注释是必不可少的一部分,它有助于提高代码的可读性和维护性,:本文主要介绍Python中注释使用方法的相关资料,需要的朋友可以参考下... 目录一、前言二、什么是注释?示例:三、单行注释语法:以 China编程# 开头,后面的内容为注释内容示例:示例:四