ICMP报文的格式和种类
- 格式:pdf
- 大小:157.53 KB
- 文档页数:6
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协议分析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的协议详解以及实现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(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全称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报文通过的节点来确定主机与目标之间的网络距离。
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(Internet Control Message Protocol)是用于在IP网络上发送控制消息的协议。
它通常用于检测主机、路由器或者网络是否可达,以及诊断网络问题。
ICMP报文的格式如下:
1. 类型(Type),占8位,指示ICMP报文的类型,例如回显请求、回显应答、目的不可达等。
2. 代码(Code),占8位,提供有关消息类型的更多细节。
例如,当类型为目的不可达时,代码字段用于指示具体的原因,如网络不可达、主机不可达等。
3. 校验和(Checksum),占16位,用于检测报文中的错误。
校验和字段对整个ICMP报文进行校验,以确保报文在传输过程中没有被损坏。
4. 其他字段,根据不同类型的ICMP报文,可能会包含其他字段。
例如,回显请求和回显应答报文包含标识符和序列号字段,用于匹配请求和应答。
总的来说,ICMP报文的格式简单明了,包含了类型、代码、校验和以及可能的其他字段,这些字段共同构成了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报文通过的节点来确定主机与目标之间的网络距离。
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重定向报文创建或修改过,而且不能是路由器的默认路由。