ICMP报文的格式和种类
ICMP实验报告

ICMP讲解班级:网技111 学号:1132303132 姓名:朱建峰一:ICMP的作用(1)ICMP是“Internet Control Message Protocol”(Internet控制消息协议)的缩写。
它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。
控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。
这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
(2) ICMP存在的意义IP提供的尽力数据报通信服务无连接服务,而并不能解决网络低层的数据报丢失、重复、延迟或乱序等问题,TCP在IP基础建立有连接服务解决以上问题,不能解决网络故障或其它网络原因无法传输的包的问题。
所以,ICMP设计的本意就是希望对IP包无法传输时提供报告,这些差错报告帮助了发送方了解为什么无法传递,网络发生了什么问题,确定应用程序后续操作。
二:ICMP的特征(1)ICMP就像一个更高层的协议那样使用IP(即,ICMP消息被封装在IP 数据报中)。
然而,ICMP是IP的一个组成部分,并且所有IP模块都必须实现它。
(2)ICMP用来报告错误,是一个差错报告机制。
它为遇到差错的路由器提供了向最初源站报告差错的办法,源站必须把差错交给一个应用程序或采取其它措施来纠正问题。
(3)ICMP不能用来报告ICMP消息的错误,这样就避免了无限循环。
当ICMP 查询消息时通过发送ICMP来响应。
(4)对于被分段的数据报,ICMP消息只发送关于第一个分段中的错误。
也就是说,ICMP消息永远不会引用一个具有非0片偏移量字段的IP数据报。
三:ICMP报文格式(1)ICMP本身是网络层协议,但它的报文首先要封装成IP数据报,再传送给下一层。
(IP数据报协议字段为1(2)IMCP报文分为两大类⏹类型一:差错报告报文当路由器或终点主机在处理IP报文时遇到问题⏹类型二:查询报文成对出现,帮助网络管理员从一个路由器或主机得到特定信息。
ICMP协议分析

ICMP协议分析1 ICMP协议协议概述IP协议是一种不可靠的协议,无法进行差错控制。
但IP协议可以借助其他协议来实现这一功能,如ICMP。
ICMP(Internet Control Messages Protocol, 网间控制报文协议)允许主机或路由器报告差错情况和提供有关异常情况的报告。
一般来说,ICMP报文提供针对网络层的错误诊断、拥塞控制、路径控制和查询服务四项大的功能。
如,当一个分组无法到达目的站点或TTL超时后,路由器就会丢弃此分组,并向源站点返回一个目的站点不可到达的ICMP报文。
2 ICMP报文类型2.1 ICMP报文类型ICMP报文大体可以分为两种类型,即ICMP差错报文和ICMP询问报文。
但细分又可分为很多类型,如表1所示。
表1 ICMP报文类型2.2 ICMP回射请求和应答报文头部格式ICMP报文被封装在IP数据报内部传输。
如图1所示,是ICMP回射请求和应答报文头部格式。
图1 ICMP回射请求和应答报文头部格式各种ICMP报文的前32bits都一样,它们是:8bits类型和8bits代码字段:一起决定了ICMP报文的类型。
常见的有:类型8、代码0:回射请求。
类型0、代码0:回射应答。
类型11、代码0:超时。
16bits校验和字段:包括数据在内的整个ICMP数据包的校验和,其计算方法和IP头部校验和的计算方法是一样的。
对于ICMP回射请求和应答报文来说,接下来是16bits标识符字段:用于标识本ICMP进程。
最后是16bits序列号字段:用于判断回射应答数据报。
2.3 ICMP目标不可达报文如图2所示,是ICMP目标不可达报文头部格式。
图2 ICMP目标不可达报文头部格式其中代码字段的不同值又代表不同的含义,如0代表网络不可达、1代表主机不可达等,见表1。
2.4 ICMP超时报文头部格式如图3所示,是ICMP超时报文头部格式。
图3 ICMP超时报文头部格式其中:类型11+代码0:表示传输期间生存时间为0。
个人总结-ICMP的协议详解以及实现

个人总结-ICMP的协议详解以及实现ping 的实现:1.首先查本地arp cache信息,看是否有对方的mac地址和IP地址映射条目记录2.如果没有,则发起一个arp请求广播包,等待对方告知具体的mac地址3.收到arp响应包之后,获得某个IP对应的具体mac地址,有了物理地址之后才可以开始通信了,同时对ip-mac地址做一个本地cache4.发出icmp echo request包,收到icmp echo reply包ICMP在网络层协议,不是用端口来说的,它的功能用类型来区别。
ICMP全称Internet Control Message Protocol(网际控制信息协议)。
在网络体系结构的各层次中,都需要控制,而不同的层次有不同的分工和控制内容。
IP层的控制功能是最复杂的,主要负责差错控制、拥塞控制等,任何控制都是建立在信息的基础之上的。
在基于IP数据报的网络体系中,网关必须自己处理数据报的传输工作,而IP协议自身没有内在机制来获取差错信息并处理。
为了处理这些错误,TCP/IP设计了ICMP协议,当某个网关发现传输错误时,立即向信源主机发送ICMP报文,报告出错信息。
让信源主机采取相应处理措施,它是一种差错和控制报文协议,不仅用于传输差错报文,还传输控制报文。
二、ICMP报文格式ICMP报文包含在IP数据报中,属于IP的一个用户,IP头部就在ICMP报文的前面,所以一个ICMP报文包括IP头部、ICMP头部和ICMP报文(见图表,ICMP报文的结构和几种常见的ICMP报文格式),IP头部的Protocol值为1就说明这是一个ICMP报文,ICMP头部中的类型(Type)域用于说明ICMP报文的作用及格式,此外还有一个代码(Code)域用于详细说明某种ICMP报文的类型,所有数据都在ICMP头部后面。
RFC定义了13种ICMP报文格式,具体如下:类型代码类型描述0 响应应答(ECHO-REPLY) 3 不可到达 4 源抑制 5 重定向 8 响应请求(ECHO-REQUEST)11 超时 12 参数失灵 13 时间戳请求 14 时间戳应答 15 信息请求(*已作废) 16 信息应答(*已作废)17 地址掩码请求 18 地址掩码应答其中代码为15、16的信息报文已经作废。
ICMP_协议

ICMP(Internet Control Message Protocol)用于在IP主机、路由器之间传递控制消息。
控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。
因为IP提供的是不可靠传输,而ICMP则是为了补充IP的不可靠传输,可以说它就是为IP而服务的。
ICMP被封装在IP包内部进行传输。
ICMP帧格式:ICMP不同类型由报文中的类型字段和代码字段来共同决定。
ICMP种类有两种:ICMP差错报告报文,ICMP询问报文。
常见ICMP报文种类:差错报告报文 3 终点不可达4 源点抑制11 时间超时12 参数问题询问报文8或0 回送(Echo)请求或回应13或14 时间戳请求或回答ICMP差错报告报文数据字段都有两样的格式,把收到的需要进行差错报告的IP数据报的首部(一般20个字节)和数据字段的前8个字节取出来(包含了TCP或UDP的端口号),作为ICMP报文的数据字段。
再加上ICMP差错报文的前8个字节,就构成了ICMP差错报告报文。
下面各种情况都不会导致产生I C M P差错报文:1) ICMP差错报文(但是,I C M P查询报文可能会产生I C M P差错报文)。
IC M P差错报文进行响应时,永远不会生成另一份I C M P差错报文(如果没有这个限制规则,可能会遇到一个差错产生另一个差错的情况,而差错再产生差错,这样会无休止地循环下去)2) 目的地址是广播地址或多播地址的I P数据报。
(泛指广播风暴)3) 作为链路层广播的数据报。
4) 不是I P分片的第一片。
5) 源地址不是单个主机的数据报。
这就是说,源地址不能为零地址、环回地址、广播地址或多播地址。
这些规则是为了防止过去允许I C M P差错报文对广播分组响应所带来的广播风暴。
网络安全技术:认识ICMP洪水攻击

一、什么是ICMP协议?ICMP全称Internet Control Message Protocol(网际控制信息协议)。
提起ICMP,一些人可能会感到陌生,实际上,ICMP与我们息息相关。
在网络体系结构的各层次中,都需要控制,而不同的层次有不同的分工和控制内容,IP层的控制功能是最复杂的,主要负责差错控制、拥塞控制等,任何控制都是建立在信息的基础之上的,在基于IP数据报的网络体系中,网关必须自己处理数据报的传输工作,而IP协议自身没有内在机制来获取差错信息并处理。
为了处理这些错误,TCP/IP设计了ICMP协议,当某个网关发现传输错误时,立即向信源主机发送ICMP报文,报告出错信息,让信源主机采取相应处理措施,它是一种差错和控制报文协议,不仅用于传输差错报文,还传输控制报文。
二、ICMP报文格式ICMP报文包含在IP数据报中,属于IP的一个用户,IP头部就在ICMP报文的前面,所以一个ICMP报文包括IP头部、ICMP头部和ICMP报文(见图表,ICMP报文的结构和几种常见的ICMP报文格式),IP头部的Protocol值为1就说明这是一个ICMP报文,ICMP 头部中的类型(Type)域用于说明ICMP报文的作用及格式,此外还有一个代码(Code)域用于详细说明某种ICMP报文的类型,所有数据都在ICMP头部后面。
RFC定义了13种ICMP 报文格式,具体如下:类型代码类型描述0 响应应答(ECHO-REPL Y)3 不可到达4 源抑制5 重定向8 响应请求(ECHO-REQUEST)11 超时12 参数失灵13 时间戳请求14 时间戳应答15 信息请求(*已作废)16 信息应答(*已作废)17 地址掩码请求18 地址掩码应答其中代码为15、16的信息报文已经作废。
下面是几种常见的ICMP报文:1.响应请求我们日常使用最多的ping,就是响应请求(Type=8)和应答(Type=0),一台主机向一个节点发送一个Type=8的ICMP报文,如果途中没有异常(例如被路由器丢弃、目标不回应ICMP或传输失败),则目标返回Type=0的ICMP报文,说明这台主机存在,更详细的tracert 通过计算ICMP报文通过的节点来确定主机与目标之间的网络距离。
第5讲 差错与控制报文协议(ICMP)

信宿主机未知
源主机被隔离 与信宿网络的通信被禁止 与信宿主机的通信被禁止 对特定的服务类型(TOS)网络不可达 对特定的服务类型(TOS)主机不可达 因管理者设置过滤而使主机不可达 因非法的优先权而使主机不可达 因报文的优先级低于网络设置的最小优先级而使主机不可达
各代码说明:
数 据 报 参 数 错 报 告
图 6-2 ICM P 报文种类
源 抑 制 报 文
重 定 向 报 文
回 应 请 求 与 应 答 报 文
路 由 器 请 求 与 通 告 报 文
时 间 戳 请 求 与 应 答 报 文
地 址 掩 码 请 求 与 应 答 报 文
返回
5.2 ICMP差错报告
ICMP差错报告的数据段部分:包含出错数据报的首 部及出错数据报的前64位数据(即:端口号(UDP和 TCP)和序号(TCP)),这些信息有助于信源或管 理人员发现错误原因;
类型 报 文 代码 0 12 参数错 1 IP首部参数错 缺少选项所要求的部分 描 述
返回
5.3 ICMP控制报文
ICMP控制报文包括源抑制报文和重定向报文
源抑制报文——用于拥塞控制 重定向报文——用于路径控制
下表给出了这两类报文的类型和作用描述。
类型 4 作 用 拥塞控制 代码 0 0 源抑制报文 网络重定向 主机重定向 描 述
5.2.1 信宿不可达报告
当路由器无法根据路由表转发IP数据报时或主 机无法向上层协议和端口提交IP数据报时,将 丢弃当前的数据报,并产生信宿不可达差错报 告,向信源报告出错; 信宿不可达报文如图所示。
0 8 字节 类 型:3 8 代 码:0-15 未 用(全 0) 出错数据报的部分信息 (IP 数据报首部+数据报数据部分的前 64 位) 图 6-3 ICM P 信宿不可达报文格式 16 校 验 和 首部 31
第6章差错与控制报文协议

20
• 主机开机后在ICMP重定向机制的作用下,经 过不断积累逐渐充实和完善其路由表。
21
6.5 ICMP请求与应答报文对
• 通过ICMP请求与应答报文对,网络管理人员、用 户或应用程序可以对网络进行检测,了解: – 设备的可达性 – 地址掩码的设置 – 时钟的同步等情况
• 目的是利用这些有用的信息,对网络进行故 障诊断和控制。
0
8
16
8
类 型:10
代 码:0
字节 标识符
校验和 序列号
31 首部
图 6-12 ICMP 路由器请求报文格式
0
类 型:9 8
字节
地址数
8
16
代 码:0
地址项大小
路由器地址 1 地址优先 1 路由器地址 2 地址优先 2
……
校验和 生存期
31 首部
数据
图 6-13 ICM P 路由器通告报文格式
32
• 路由器或信宿机发现错误的数据报首部和 错误的数据报选项参数。
11
• 形成ICMP差错报告时有以下例外: 1)ICMP差错报文本身不会再产生ICMP差错
报告。 2)分片报文的非第一个分片不会产生ICMP
差错报告。 3)组播地址报文不会产生ICMP差错报告。 4)特殊地址127.0.0.0和0.0.0.0的报文不会
6
• 信宿不可达报文可能由路由器产生,也可能由信宿机 产生。产生信宿不可达报文的原因的16种可能 :
类型 3
报文 信宿不可达
代码
描述
0 网络不可达
1 主机不可达
2 协议不可达
3 端口不可达
4 数据报无法分片
5 源路由失败
6 信宿网络未知
ICMP

ICMP差错报告的数据段部分:包含出错数据报的首部及出错数据报的 前64位数据(即:端口号(UDP和TCP)和序号(TCP)),这些信息有 助于信源或管理人员发现错误原因。
收到的IP数据报
IP数据报首部 8字节
ICMP差错报告报文
ICMP的前8 个字节
IP数据报 首部
8 字节
首部
ICMP差错报告报文
ICMP首部 ICMP数据
IP数据报首 部
IP数据报数据区
帧首部
帧数据区
因为传输错误的种类多种多样,ICMP 协议要报告这些错 误就必 须根据不同的错误采用不同的格式。但各种ICMP 数据包都有一个共同的ICMP头部。ICMP报文有一个8字节 的首部和一个可变长度的数据部分。如下图1所示。
图1 ICMP报文格式
类型字段值 0
描述 反射应答
3 4
5 8 9 10 11 12 13 14 15
目标不可达 源端关闭
重定向 反射请求
路由器通告
路由器请求 超时 数据包参数错误 时间戳请求 时间戳应答 信息请求(作废)
表1 ICMP 数据包类型
3、各种ICMP报文
ICMP报文可划分为两大类:差错报告报文和查询报文 差错报告报文报告了路由器或者主机在处理IP数据 包时可能遇到的问题。 差错报告报文的类型:目的站不可达(类型3)、 源站抑制(类型4)、时间超过(类型11)、参数 问题(类型12)、改变路由(类型5) 查询报文总是成双成对的出现,他帮助主机或者网 络管理员从某个路由器或者对方主机那里获取特定 的信息。 查询报文类型:回送请求或回答(类型8或0)、 时 间戳请求或回答(类型13或14)、地址掩码请求 或回答(类型17或18)
1、信宿不可达报告
ICMP报文类型

ICMP报⽂类型类型代码类型描写叙述0 响应应答(ECHO-REPLY)3 不可到达4 源抑制5 重定向8 响应请求(ECHO-REQUEST)11 超时12 參数失灵13 时间戳请求14 时间戳应答15 信息请求(*已作废)16 信息应答(*已作废)17 地址掩码请求18 地址掩码应答⽤wireshark查看附:⼏种常见的ICMP报⽂:1.响应请求我们⽇常使⽤最多的ping。
就是响应请求(Type=8)和应答(Type=0)。
⼀台主机向⼀个节点发送⼀个Type=8的ICMP报⽂,假设途中没有异常(⽐如被路由器丢弃、⽬标不回应ICMP或传输失败),则⽬标返回Type=0的ICMP报⽂,说明这台主机存在,更具体的tracert通过计算ICMP报⽂通过的节点来确定主机与⽬标之间的⽹络距离。
2.⽬标不可到达、源抑制和超时报⽂这三种报⽂的格式是⼀样的,⽬标不可到达报⽂(Type=3)在路由器或主机不能传递数据报时使⽤,⽐如我们要连接对⽅⼀个不存在的系统port(port号⼩于1024)时。
将返回Type=3、Code=3的ICMP报⽂,它要告诉我们:“嘿。
别连接了。
我不在家的!”,常见的不可到达类型还有⽹络不可到达(Code=0)、主机不可到达(Code=1)、协议不可到达(Code=2)等。
源抑制则充当⼀个控制流量的⾓⾊。
它通知主机降低数据报流量,因为ICMP没有恢复传输的报⽂。
所以仅仅要停⽌该报⽂,主机就会逐渐恢复传输速率。
最后,⽆连接⽅式⽹络的问题就是数据报会丢失,或者长时间在⽹络游荡⽽找不到⽬标,或者拥塞导致主机在规定时间内⽆法重组数据报分段,这时就要触发ICMP超时报⽂的产⽣。
超时报⽂的代码域有两种取值:Code=0表⽰传输超时,Code=1表⽰重组分段超时。
3.时间戳时间戳请求报⽂(Type=13)和时间戳应答报⽂(Type=14)⽤于測试两台主机之间数据报来回⼀次的传输时间。
传输时,主机填充原始时间戳,接收⽅收到请求后填充接收时间戳后以Type=14的报⽂格式返回,发送⽅计算这个时间差。
icmp协议的报文格式

icmp协议的报文格式
ICMP(Internet Control Message Protocol)是用于在IP网络上发送控制消息的协议。
它通常用于检测主机、路由器或者网络是否可达,以及诊断网络问题。
ICMP报文的格式如下:
1. 类型(Type),占8位,指示ICMP报文的类型,例如回显请求、回显应答、目的不可达等。
2. 代码(Code),占8位,提供有关消息类型的更多细节。
例如,当类型为目的不可达时,代码字段用于指示具体的原因,如网络不可达、主机不可达等。
3. 校验和(Checksum),占16位,用于检测报文中的错误。
校验和字段对整个ICMP报文进行校验,以确保报文在传输过程中没有被损坏。
4. 其他字段,根据不同类型的ICMP报文,可能会包含其他字段。
例如,回显请求和回显应答报文包含标识符和序列号字段,用于匹配请求和应答。
总的来说,ICMP报文的格式简单明了,包含了类型、代码、校验和以及可能的其他字段,这些字段共同构成了ICMP协议的报文格式。
通过解析这些字段,网络设备可以进行故障诊断和错误报告。
ICMP报文详解

第1 页 共 5 页ICMP 报文详解各种ICMP报文的前4个字节(32bits)都是三个长度固定的字段(见上图):type类型字段(8位)、code代码字段(8位)、checksum校验和字段(16位)。
8bits类型和8bits代码字段:一起决定了ICMP报文的类型。
常见的有:类型8、代码0:回显请求;类型0、代码0:回显应答;类型11、代码0:超时。
16bits校验和字段:包括数据在内的整个ICMP数据包的校验和,其计算方法和IP头部校验和的计算方法是一样的。
对于ICMP回显请求和应答报文来说(见上图),接下来是16bits标识符字段:用于标识本ICMP 进程。
最后是16bits序列号字段:用于判断回显应答数据报。
ICMP报文包含在IP数据报中,属于IP的数据,IP头部就在ICMP报文的前面,一个ICMP 报文包括IP头部(20字节)、ICMP头部(8字节)和ICMP报文。
(见上图)IP头部的Protocol值为1就说明这是一个ICMP报文;ICMP头部中的类型(Type)域用于说明ICMP报文的作用及格式;此外还有代码(Code)域用于详细说明某种ICMP报文的类型;所有数据都在ICMP头部后面。
RFC定义了13种ICMP报文格式,具体如下:类型代码类型描述类型代码类型描述0 响应应答(ECHO-REPL Y)13 时间戳请求3 不可到达14 时间戳应答4 源抑制15 信息请求(*已作废)5 重定向16 信息应答(*已作废)8 响应请求(ECHO-REQUEST)17 地址掩码请求11 超时18 地址掩码应答12 参数失灵其中代码为15、16的信息报文已经作废。
下面是几种常见的ICMP报文:1.响应请求我们日常使用最多的ping,就是响应请求(Type=8)和应答(Type=0),一台主机向一个节点发送一个Type=8的ICMP报文,如果途中没有异常(例如被路由器丢弃、目标不回应ICMP或传输失败),则目标返回Type=0的ICMP报文,说明这台主机存在,更详细的tracert通过计算ICMP报文通过的节点来确定主机与目标之间的网络距离。
第6章 差错与控制报文协议

ICMP重定向报文的格式:
0 8 字节 类 型:5
8 代 码:0-3
16 校 验 和
31 首部
目标路由器的 IP 地址 引起重定向的数据报的部分信息 (IP 数据报首部+数据报数据部分的前 64 位) 图 6-7 ICMP 重定向报文格式
数据
Page 20
• 注意:
1)产生重定向报文时并不丢弃原始数据报。 2)重定向报文由路由器发给位于同一网络的主机,实 现主机路由表的刷新。 3)主机收到重定向报文后,刷新路由表中去往相应信 宿的路由表项。
报 文
0 10 9 13 14 15 16 17 18
Page 23
路由器请求 路由器通告 时间戳请求 时间戳应答 信息请求 信息应答 地址掩码请求 地址掩码应答
路由器请求与通告
0 0
时间戳请求与应答
0 0
信息请求与应答(已不用)
0 0
地址掩码请求与应答
0
6.5.1 回应请求与应答报文
• 作用:用来测试网络中设备的可达性,以及设备中IP
路 由 器 请 求 与 通 告 报 文
时 间 戳 请 求 与 应 答 报 文
地 址 掩 码 请 求 与 应 答 报 文
Page 5
6.3 ICMP差错报告报文
• 此类报文的数据部分存放出现差错的IP数据报中的首
部及前64比特数据,有助于信源或管理人员对错误进 行分析。
• ICMP差错报告的特点:
1)丢弃出错的数据报;
10
11 12 13
与信宿主机的通信被禁止
对特定的服务类型(TOS)网络不可达 对特定的服务类型(TOS)主机不可达 因管理者设置过滤而使主机不可达
14
ICMP报文的格式和种类

ICMP报文的格式和种类rague | 13 九月, 2007 16:41--------------------------------格式------------------------------------- 各种ICMP报文的前32bits都是三个长度固定的字段:type类型字段(8位)、code代码字段(8位)、checksum校验和字段(16位)8bits类型和8bits代码字段:一起决定了ICMP报文的类型。
常见的有:类型8、代码0:回射请求。
类型0、代码0:回射应答。
类型11、代码0:超时。
16bits校验和字段:包括数据在内的整个ICMP数据包的校验和,其计算方法和IP头部校验和的计算方法是一样的。
下图是一张ICMP回射请求和应答报文头部格式对于ICMP回射请求和应答报文来说,接下来是16bits标识符字段:用于标识本ICMP进程。
最后是16bits序列号字段:用于判断回射应答数据报。
ICMP报文包含在IP数据报中,属于IP的一个用户,IP头部就在ICMP报文的前面一个ICMP报文包括IP头部(20字节)、ICMP头部(8字节)和ICMP报文IP头部的Protocol值为1就说明这是一个ICMP报文ICMP头部中的类型(Type)域用于说明ICMP报文的作用及格式此外还有代码(Code)域用于详细说明某种ICMP报文的类型所有数据都在ICMP头部后面。
RFC定义了13种ICMP报文格式,具体如下:类型代码类型描述0 响应应答(ECHO-REPLY)3 不可到达4 源抑制5 重定向8 响应请求(ECHO-REQUEST)11 超时12 参数失灵13 时间戳请求14 时间戳应答15 信息请求(*已作废)16 信息应答(*已作废)17 地址掩码请求18 地址掩码应答其中代码为15、16的信息报文已经作废。
下面是几种常见的ICMP报文:1.响应请求我们日常使用最多的ping,就是响应请求(Type=8)和应答(Type=0),一台主机向一个节点发送一个Type=8的ICMP报文,如果途中没有异常(例如被路由器丢弃、目标不回应ICMP或传输失败),则目标返回Type=0的ICMP报文,说明这台主机存在,更详细的tracert通过计算 ICMP报文通过的节点来确定主机与目标之间的网络距离。
icmp报文格式 各种

ICMP分析文档说明:由于排版的问题,请在“视图”中选择“Web版式”进行阅读。
目录1 ICMP报文的分类和格式 (2)1.1 ICMP报文格式概要介绍 (2)1.2 各种类型的ICMP报文的格式 (3)1.2.1 ICMP请求和回答报文格式 (3)1.2.2ICMP差错报文格式 (5)1.2.2.1 ICMP重定向报文格式 (5)1.2.2.2 目的不可达差错报文格式 (5)1.2.2.3 ICMP源站抑制差错报文、超时差错报文和参数问题差错报文 (6)2 ICMP函数关系图 (7)3 ICMP流程图 (8)4 ICMP状态机 (10)5 ICMP接口 (13)5.1 数据接口 (13)5.1.1 ICMP模块和下层的接口 (13)5.1.1.1 IP层——>ICMP模块 (13)5.1.1.2 ICMP模块——> IP层 (13)5.1.2 ICMP模块和上层的接口 (14)5.1.2.1 ICMP模块——>上层 (14)5.1.2.1.1 pr_ctlinput函数 (14)5.1.2.1.2 rtredirect函数 (15)5.1.2.1.3 pfctlinput函数 (15)5.1.2.1.4 rip_input函数 (16)5.1.2.2 上层——> ICMP模块 (16)5.1.2.2.1 icmp_error函数 (16)5.1.2.2.2 rip_output函数 (17)5.2 控制接口 (18)5.2.1 概况 (18)5.2.2 rip_ctloutput函数 (18)5.2.3 rip_usrreq函数 (19)5.2.4 icmp_sysctl函数 (19)5.3 OS接口 (20)5.3.1 microtime函数 (20)5.3.2 m_freem函数 (20)5.3.3 m_gethdr函数 (21)5.3.4 m_get函数 (21)6 ICMP指标 (21)6.1 ICMP主机需求指标(RFC1122) (21)6.1.1概要分析(GENERAL ISSUES) (21)6.1.2细节问题(SPECIFIC ISSUES) (23)6.1.2.1 目的不可达 (23)6.1.2.2 重定向 (23)6.1.2.3 源抑制 (24)6.1.2.4 超时 (24)6.1.2.5 参数问题 (24)6.1.2.6 回显 (25)6.1.2.7 信息 (25)6.1.2.8 时间戳 (26)6.1.2.9 地址掩码 (26)6.2 ICMP路由器需求指标(RFC1812) (27)6.2.1简要介绍(INTRODUCTION) (28)6.2.2概要分析(GENERAL ISSUES) (28)6.2.3细节问题(SPECIFIC ISSUES) (31)6.2.3.1 目的不可达 (31)6.2.3.2 重定向 (31)6.2.3.3 源抑制 (32)6.2.3.4 超时 (32)6.2.3.5 参数问题 (32)6.2.3.6 回显 (33)6.2.3.7 信息 (34)6.2.3.8 时间戳 (34)6.2.3.9 地址掩码 (35)6.2.3.10 路由器请求 (35)1ICMP报文的分类和格式1.1 ICMP报文格式概要介绍ICMP报文是在IP数据报内部被传输的,如下图。
ICMP协议

ICMP协议背景知识:●在以太网中,数据帧大小最大为1518字节,最小为64字节(由以太网CSMA/CD决定)以太网中数据帧的封装格式:6 6 2 — 4●IP数据报格式:其中,较常用“协议”的取值有:ICMP数据包格式ICMP协议基于IP协议,ICMP数据包封装在IP数据包内。
ICMP封装格式:20字节ICMP数据包的结构:ICMP头部长度为8bytes。
ICMP查询报文ICMP两种报文形式ICMP差错报文检测连通性ICMP报文作用提示错误信息常见ICMP类型、代码值及应用场景:下面是几种常见的ICMP报文:1).响应请求我们日常使用最多的ping,就是响应请求(Type=8)和应答(Type=0),一台主机向一个节点发送一个Type=8的ICMP报文,如果途中没有异常(例如被路由器丢弃、目标不回应ICMP或传输失败),则目标返回Type=0的ICMP报文,说明这台主机存在,更详细的tracert通过计算ICMP报文通过的节点来确定主机与目标之间的网络距离。
Ping程序的参数如下:C:\Users\qich>ping用法: ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL][-r count] [-s count][-R] [-S srcaddr] target_name选项:-t Ping 指定的主机,直到停止。
若要查看统计信息并继续操作- 请键入Control-Break;若要停止- 请键入Control-C。
-a 将地址解析成主机名。
-n count 要发送的回显请求数。
-l size 发送缓冲区大小。
-f 在数据包中设置“不分段”标志(仅适用于 IPv4)。
-i TTL 生存时间。
-r count 记录计数跃点的路由(仅适用于 IPv4)。
-s count 计数跃点的时间戳(仅适用于 IPv4)。
-S srcaddr 要使用的源地址。
icmp 协议格式

ICMP协议是Internet控制消息协议,用于在IP主机、路由器之间传递控制消息。
它是网络层协议,位于IP协议之上,TCP协议之下。
ICMP协议格式由报文头和报文体组成。
报文头包含8个字节,其中前4个字节表示类型(Type),后4个字节表示代码(Code)。
类型字段表示ICMP报文的类型,如“Echo Request”(回声请求)或“Echo Reply”(回声应答)。
代码字段表示特定类型的子类型或错误代码。
报文体包含数据,其长度取决于ICMP报文的类型和代码。
例如,对于“Echo Request”类型,报文体包含原始的IP数据包;对于“Echo Reply”类型,报文体包含与原始数据包相同的内容。
除了报文头和报文体之外,ICMP报文还包含一个标识符和一个序列号。
标识符用于区分属于同一原始数据包的多个分片。
序列号用于对分片进行重新排序。
ICMP协议还定义了一些特殊类型的报文,如“Destination Unreachable”(目标不可达)、“Time Exceeded”(超时)和“Parameter Problem”(参数问题)。
这些报文用于报告网络故障或错误状态。
综上所述,ICMP协议格式由报文头和报文体组成,其中报文头包含类型和代码字段,报文体包含数据。
此外,ICMP报文还包含标识符、序列号和一些特殊类型的报文。
差错与控制报文协议4

祈求/应答格式如图。类型13:祈求报文,类型14:应答报文。 初始时间戳字段用于指示祈求方发出祈求旳时间 接受时间戳字段用于指示应答方主机收到祈求旳时间 发送时间戳字段用于指示应答方主机发送应答旳时间
0
8
类 型:5
字节
8
16
代 码:0-3
校验和
目标路由器的 IP 地址
31 首部
引起重定向的数据报的部分信息 数据
(IP 数据报首部+数据报数据部分的前 64 位)
图 6-7 ICMP 重定向报文格式
值得注意旳是:
1)ICMP产生重定向报文旳时候并不丢 弃原数据报。
2)ICMP重定向报文由位于同一网络旳 路由器发送给主机,完毕对主机旳路由 表旳刷新。
6.4.2 重定向报文
因特网上旳路由器和主机中都存有一种路由表,路由 表决定了去往目旳地旳下一跳路由器旳地址。
路由器上旳路由表能够及时地反应网络构造旳变化, 这一特点由路由器之间定时互换路由信息加以确保。
主机因为不能确保全天开机,所以主机中旳路由表 不能及时反应网络构造旳变化情况。另外,因为因 特网上旳主机数量远不小于路由器旳数量,主机假 如参加路由信息旳互换,势必带来大量旳通信开销。 所以主机中与类型
ICMP报文由首部和数据段构成。首部为定 长旳8个字节,前4个字节是通用部分,后4 个字节随报文类型旳不同有所差别。ICMP 报文旳一般格式如图所示。
0
类型 8 字节
8
16
代码
校验和
首部其他部分
31 首部
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ICMP报文的格式和种类rague | 13 九月, 2007 16:41--------------------------------格式------------------------------------- 各种ICMP报文的前32bits都是三个长度固定的字段:type类型字段(8位)、code代码字段(8位)、checksum校验和字段(16位)8bits类型和8bits代码字段:一起决定了ICMP报文的类型。
常见的有: 类型8、代码0:回射请求。
类型0、代码0:回射应答。
类型11、代码0:超时。
16bits校验和字段:包括数据在内的整个ICMP数据包的校验和,其计算方法和IP头部校验和的计算方法是一样的。
下图是一张ICMP回射请求和应答报文头部格式对于ICMP回射请求和应答报文来说,接下来是16bits标识符字段:用于标识本ICMP进程。
最后是16bits序列号字段:用于判断回射应答数据报。
ICMP报文包含在IP数据报中,属于IP的一个用户,IP头部就在ICMP报文的前面一个ICMP报文包括IP头部(20字节)、ICMP头部(8字节)和ICMP报文IP头部的Protocol值为1就说明这是一个ICMP报文ICMP头部中的类型(Type)域用于说明ICMP报文的作用及格式此外还有代码(Code)域用于详细说明某种ICMP报文的类型所有数据都在ICMP头部后面。
RFC定义了13种ICMP报文格式,具体如下:类型代码 类型描述0 响应应答(ECHO-REPLY)3 不可到达4 源抑制5 重定向8 响应请求(ECHO-REQUEST)11 超时12 参数失灵13 时间戳请求14 时间戳应答15 信息请求(*已作废)16 信息应答(*已作废)17 地址掩码请求18 地址掩码应答其中代码为15、16的信息报文已经作废。
下面是几种常见的ICMP报文:1.响应请求我们日常使用最多的ping,就是响应请求(Type=8)和应答(Type=0),一台主机向一个节点发送一个Type=8的ICMP报文,如果途中没有异常(例如被路由器丢弃、目标不回应ICMP或传输失败),则目标返回Type=0的ICMP报文,说明这台主机存在,更详细的tracert通过计算 ICMP报文通过的节点来确定主机与目标之间的网络距离。
2.目标不可到达、源抑制和超时报文这三种报文的格式是一样的,目标不可到达报文(Type=3)在路由器或主机不能传递数据报时使用,例如我们要连接对方一个不存在的系统端口(端口号小于 1024)时,将返回Type=3、Code=3的ICMP报文,它要告诉我们:“嘿,别连接了,我不在家的!”,常见的不可到达类型还有网络不可到达(Code=0)、主机不可到达(Code=1)、协议不可到达(Code=2)等。
源抑制则充当一个控制流量的角色,它通知主机减少数据报流量,由于 ICMP没有恢复传输的报文,所以只要停止该报文,主机就会逐渐恢复传输速率。
最后,无连接方式网络的问题就是数据报会丢失,或者长时间在网络游荡而找不到目标,或者拥塞导致主机在规定时间内无法重组数据报分段,这时就要触发ICMP超时报文的产生。
超时报文的代码域有两种取值:Code=0表示传输超时,Code=1表示重组分段超时。
3.时间戳时间戳请求报文(Type=13)和时间戳应答报文(Type=14)用于测试两台主机之间数据报来回一次的传输时间。
传输时,主机填充原始时间戳,接收方收到请求后填充接收时间戳后以Type=14的报文格式返回,发送方计算这个时间差。
一些系统不响应这种报文。
--------------------------------种类-------------------------------------ICMP报文格式ICMP虽然是网络层的协议,但要将ICMP报文放入IP中发送。
ICMP报文的公共头标由1字节的类型(type)、1字节的代码(code)和2字节的校验和(checksum)组成。
类型域和代码域用来标识各种ICMP报文。
类型域表示ICMP报文的类型,目前已定义了14种,从类型值来看ICMP报文可分为二大类。
第1 类是取值为1~127的差错报文,第2类是取值128以上的是信息(informational)报文。
1不能到达信宿(Destination Unreachable)差错报文2分组过大(Packet Too Big)差错报文3超时(Time Exceeded)差错报文4参数问题(Parameter Problem)差错报文128返回请求(Echo Request)报文129返回应答(Echo Reply)报文130组成员查询(Group Membership Query)131组成员报告(Group Membership Report)132组成员结束(Group Membership Termination)133路由器请求(Router Solicitation)134路由器公告(Router Advertisement)135邻机请求(Neighbor Solicitation)136邻机公告(Neighbor Advertisement)137 重定向(Redirect)注意:ICMP路由重定向报文正常情况下应该是 路由器 发出来,而非主机当I P数据报应该被发送到另一个路由器时,收到数据报的路由器就要发送ICMP重定向差错报文给I P数据报的发送端。
这在概念上是很简单的,正如图9 - 3所示的那样。
只有当主机可以选择路由器发送分组的情况下,我们才可能看到ICMP重定向报文(回忆我们在图7 - 6中看过的例子)1) 我们假定主机发送一份I P数据报给R 1。
这种选路决策经常发生,因为R 1是该主机的默认路由。
2) R1收到数据报并且检查它的路由表,发现R 2是发送该数据报的下一站。
当它把数据报发送给R 2时,R 1检测到它正在发送的接口与数据报到达接口是相同的(即主机和两个路由器所在的L A N)。
这样就给路由器发送重定向报文给原始发送端提供了线索。
3) R1 发送一份ICMP重定向报文给主机,告诉它以后把数据报发送给R 2而不是R 1。
重定向一般用来让具有很少选路信息的主机逐渐建立更完善的路由表。
主机启动时路由表中可以只有一个默认表项(在图9 - 3所示的例子中,为R 1或R 2)。
一旦默认路由发生差错,默认路由器将通知它进行重定向,并允许主机对路由表作相应的改动。
ICMP 重定向允许TCP/IP主机在进行选路时不需要具备智能特性,而把所有的智能特性放在路由器端。
显然,在我们的例子中,R 1和R2 必须知道有关相连网络的更多拓扑结构的信息,但是连在LAN上的所有主机在启动时只需一个默认路由,通过接收重定向报文来逐步学习。
9.5.1 一个例子可以在我们的网络上观察到ICMP重定向的操作过程(见封二的图)。
尽管在拓扑图中只画出了三台主机(aix,solaris和gemini 和两台路由器(gateway和netb),但是整个网络有超过150台主机和10台另外的路由器。
大多数的主机都把gateway指定为默认路由器,因为它提供了Internet的入口。
子网140.252.1上的主机是如何访问作者所在子网(图中底下的四台主机)的呢?首先,如果在SLIP链路的一端只有一台主机,那么就要使用代理ARP(4.6节)。
这意味着位于拓扑图顶部的子网(140.252.1)中的主机不需要其他特殊条件就可以访问主机sun(140.252.1.29)。
位于netb上的代理A R P软件处理这些事情。
但是,当网络位于SLIP链路的另一端时,就要涉及到选路了。
一个办法是让所有的主机和路由器都知道路由器netb是网络140.252.13的网关。
这可以在每个主机的路由表中设置静态路由,或者在每个主机上运行守护程序来实现。
另一个更简单的办法(也是实际采用的方法)是利用ICMP重定向报文来实现。
在位于网络顶部的主机solaris上运行ping程序到主机bsdi(140.252.13.35)。
由于子网号不相同,代理ARP不能使用。
假定没有安装静态路由,发送的第一个分组将采用到路由器gateway 的默认路由。
下面是我们运行ping程序之前的路由表:(224.0.0.0所在的表项是IP广播地址。
我们将在第12章讨论)。
如果为ping程序指定-v选项,可以看到主机接收到的任何ICMP报文。
我们需要指定该选项以观察发送的重定向报文。
在收到ping程序的第一个响应之前,主机先收到一份来自默认路由器gateway发来的ICMP重定向报文。
如果这时查看路由表,就会发现已经插入了一个到主机bsdi的新路由(该表项如以下黑体字所示)。
这是我们第一次看到D标志,表示该路由是被ICMP重定向报文创建的。
G标志说明这是一份到达gateway(netb)的间接路由,H标志则说明这是一个主机路由(正如我们期望的那样),而不是一个网络路由。
由于这是一个被主机重定向报文增加的主机路由,因此它只处理到达主机bsdi的报文。
如果我们接着访问主机svr4,那么就要产生另一个ICMP重定向报文,创建另一个主机路由。
类似地,访问主机slip也创建另一个主机路由。
位于子网上的三台主机(bsdi,svr4和slip)还可以由一个指向路由器sun的网络路由来进行处理。
但是ICMP重定向报文创建的是主机路由,而不是网络路由,这是因为在本例中,产生ICMP重定向报文的路由器并不知道位于140.252.13网络上的子网信息。
9.5.2 更多的细节ICMP重定向报文的格式如图9 - 4所示。
有四种不同类型的重定向报文,有不同的代码值,如图9 - 5所示。
ICMP重定向报文的接收者必须查看三个I P地址:( 1 )导致重定向的I P地址(即ICMP重定向报文的数据位于I P数据报的首部); ( 2 )发送重定向报文的路由器的I P地址(包含重定向信息的I P数据报中的源地址;( 3 )应该采用的路由器I P地址(在ICMP报文中的4 ~ 7字节)。
关于ICMP重定向报文有很多规则。
首先,重定向报文只能由路由器生成,而不能由主机生成。
另外,重定向报文是为主机而不是为路由器使用的。
假定路由器和其他一些路由器共同参与某一种选路协议,则该协议就能消除重定向的需要(这意味着在图9 - 1中的路由表应该消除或者能被选路守护程序修改,或者能被重定向报文修改,但不能同时被二者修改)。
在4 . 4 BSD系统中,当主机作为路由器使用时,要进行下列检查。
在生成ICMP重定向报文之前这些条件都要满足。
1) 出接口必须等于入接口。
2) 用于向外传送数据报的路由不能被ICMP重定向报文创建或修改过,而且不能是路由器的默认路由。