当前位置: 首页 > news >正文

《TCP/IP详解 卷1:协议》之第六章:ICMP:Internet控制报文协议

目录

一、ICMP协议

二、ICMP 报文格式

三、ICMP询问报文

四、ICMP 差错报告报文

五、ICMP端口不可达差错


一、ICMP协议

ICMP(Internet Control Message Protocol,互联网控制消息协议)是网络层的一个核心协议,用于在IP主机、路由器之间传递控制消息和错误报告。ICMP消息通常用于诊断网络问题,例如网络不可达、数据包传输超时等。其中:

1、ICMP报文是在IP数据报内部被传输。

2、ICMP 分为两类报文:询问报文 和 差错报告报文。

二、ICMP 报文格式

1、ICMP 报文结构如下:

字段长度(字节)说明
类型 (Type)1ICMP 报文类型,标识报文的种类(如回显请求、目的不可达等)
代码 (Code)1ICMP 报文的子类型,提供关于类型字段的更多详细信息
校验和 (Checksum)2用于检测 ICMP 报文在传输过程中的错误
数据 (Data)可变报文的具体内容,根据类型和代码字段的不同而变化

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

2、常见 ICMP 类型和代码

类型 (Type)代码 (Code)描述
00回显应答 (Echo Reply)
30目的不可达:网络不可达 (Network Unreachable)
31目的不可达:主机不可达 (Host Unreachable)
32目的不可达:协议不可达 (Protocol Unreachable)
33目的不可达:端口不可达 (Port Unreachable)
40源抑制 (Source Quench)
50重定向:网络 (Redirect for Network)
51重定向:主机 (Redirect for Host)
80回显请求 (Echo Request)
110超时:TTL 超过 (Time Exceeded: TTL Exceeded)

三、ICMP询问报文

常见的 ICMP 询问报文有:

1、回显请求(Echo Request)

Type:8,Code:0

用途:用于网络连通性测试,即ping操作。发送方向通常从源主机到目的主机,请求一个回显应答。

2、地址掩码请求(Address Mask Request)

Type:17,Code:0

用途:请求本地网络的子网掩码信息,通常由无盘工作站使用。

3、时间戳请求(Timestamp Request)

Type:13,Code:0

用途:请求远程主机提供时间戳信息,用于时钟同步。

4、信息请求(Information Request)

Type:15,Code:0

用途:请求远程主机提供有关其网络配置的信息,如主机名、IP地址等。

5、路由器询问(Router Solicitation)

Type:10,Code:0

用途:用于路由器发现,主机请求路由器发送路由器通告。

四、ICMP 差错报告报文

主要分为以下五类:

1、目的不可达(Destination Unreachable)

Type:3

Code 可以是以下几种:

  • 0:网络不可达(Network Unreachable)

  • 1:主机不可达(Host Unreachable)

  • 2:协议不可达(Protocol Unreachable)

  • 3:端口不可达(Port Unreachable)

  • 5:需要分片但设置了不分片位(Fragmentation Needed and DF Set)

2、源站抑制(Source Quench)

Type:4

Code:0

用途:通知发送端网络拥塞,需要降低发送速率。

3、时间超过(Time Exceeded)

Type:11

Code 可以是以下几种:

  • 0:在传输过程中生存时间(TTL)超时(TTL Exceeded in Transit)

  • 1:分片重组时生存时间超时(Fragment Reassembly Time Exceeded)

4、参数问题(Parameter Problem)

Type:12

Code:0

用途:报告IP头中存在错误,例如,错误的头部字段值或格式。

5、重定向(Redirect)

Type:5

Code 可以是以下几种:

  • 0:为网络重定向(Redirect for Network)

  • 1:为主机重定向(Redirect for Host)

  • 2:为服务类型和网络重定向(Redirect for Type of Service and Network)

  • 3:为服务类型和主机重定向(Redirect for Type of Service and Host)

另外值得一提的是,关于 ICMP 差错报告报文,在以下情况,不应该发送 ICMP 差错报文

1、对 ICMP差错报告报文,不应该再发送 ICMP 差错报告报文

2、对第一个分片的数据报片的所有后续数据报片都不发送ICMP差错报告报文

3、对具有多播地址的数据报都不发送ICMP差错报告报文

4、对具有特殊地址的数据报不发送 ICMP 差错报告报文,如 127.0.0.1 或 0.0.0.0

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

五、ICMP端口不可达差错

对于原本的解释:“ICMP的一个规则是,ICMP差错报文必须包括生成该差错报文的数据报IP首部(包含任何选项),还必须至少包括跟在该IP首部后面的前8个字节。”

1、ICMP不可达报文的一般格式如下

其中,固定8个字节的ICMP首部,然后ICMP data数据部分由以下组成:

IP首部 + 原始IP数据报中数据的至少前8字节。

2、假设原始IP数据报中IP层负载为 UDP,则对应的 ICMP 差错报告报文如下:

3、假设原始IP数据报总IP层负载为 TCP,则对应的 ICMP 差错报告报文如下:

4、在ICMP差错报文中,只要根据原始IP首部中的协议字段,就可以解析出封装在ICMP data中的原始IP首部后面紧跟着的数据部分。

相关文章:

  • AUTODL关闭了程序内存依然占满怎么办
  • 【氮化镓】同质结GaN PiN二极管的重离子单粒子烧毁SEB
  • K8S安全认证
  • C语言(1)—C语言常见概念
  • Python爬虫实战:获取豆ban网最新电影数据,为51观影做参考
  • 彩虹表攻击与Nest密码存储
  • 一些基本的 Vue 规范
  • NEUOJ网格路径
  • 变量在template里不好使,在setup好使?
  • 从并发问题衍生出的Spring的七种事务传播行为
  • 问题:raw.githubusercontent无法访问
  • 《解锁快速记忆法:开启高效学习的大门》
  • 消息中间件RabbitMQ02:账号的注册、点对点推送信息
  • 4.23学习总结
  • 如何设计一个实时数据同步方案
  • 抱佛脚之学SSM六
  • 集成电路过流保护:基于 hiccup 模式的设计与解析
  • MVCWebAPI使用FromBody接受对象的方法
  • Windows上使用Python 3.10结合Appium-实现APP自动化
  • Apache Flink 深度解析:流处理引擎的核心原理与生产实践指南
  • 视频丨英伟达总裁黄仁勋:美勿幻想AI领域速胜中国
  • 解放日报:让算力像“水电煤”赋能千行百业
  • 金砖国家外长会晤主席声明(摘要)
  • 擦亮“世界美食之都”金字招牌,淮安的努力不止于餐桌
  • 解密62个“千亿县”:强者恒强,新兴产业助新晋县崛起
  • 体坛联播|欧冠半决赛阿森纳主场不敌巴黎,北京男篮险胜山西