ICMP报文

ICMP,即Internet Control Message Protocol,是互联网消息控制协议,用于在IP网络中报告错误和传递控制信息。它包含两种类型的报文:差错报告报文和询问报文,用于网络诊断和故障排查。ICMP报文主要有终点不可达、源站抑制、时间超过、参数问题和重定向等类型。虽然ICMP不纠正错误,但它提供了关于数据包传递问题的反馈,帮助上层协议如TCP调整策略。ICMP还用于ping命令和traceroute功能,协助检测网络连通性和路径信息。
摘要由CSDN通过智能技术生成

一。为什么需要ICMP?

因为IP协议不提供可靠性且不能保证信息传递,因此发生问题时,通知发送人是很重要的。(IP协议是一种不可靠的协议,无法进行差错控制。但IP协议可以借助其他协议来实现这一功能,如ICMP)

二。什么是ICMP? 

ICMP: Internet Control Message Protocol 即Internet消息控制协议。ICMP报文分为两种类型(1)ICMP差错报告报文  (2)ICMP询问报文

 ICMP差错报告报文共有5种

1、终点不可达:终点不可达分为:网络不可达,主机不可达,协议不可达,端口不可达,需要分片但DF比特已置为1,以及源路由失败等六种情况,其代码字段分别置为0至5。当出现以上六种情况时就向源站发送终点不可达报文。

说明:

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

2、 源站抑制:当路由器或主机由于拥塞而丢弃数据报时,就向源站发送源站抑制报文,使源站知道应当将数据报的发送速率放慢。

3、 时间超过:当路由器收到生存时间为零的数据报时,除丢弃该数据报外,还要向源站发送时间超过报文。当目的站在预先规定的时间内不能收到一个数据报的全部数据报片时,就将已收到的数据报片都丢弃,并向源站发送时间超过报文。

4、参数问题:当路由器或目的主机收到的数据报的首部中的字段的值不正确时,就丢弃该数据报,并向源站发送参数问题报文。

5、改变路由(重定向)路由器将改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器。


ICMP定义了一套差错报文控制报文,用于用户主机与路由之间交换不可到达地址、网络拥塞、重定向到更好的路径、报文生命周期超时等信息。

ICMP协议是一种提供(有关阻止数据包传递的)网络故障问题反馈信息的机制。(针对阻止数据包传递或者网络故障。)它让TCP等上层协议能够意识到数据包没有送达目的地。他的主要功能:

支持网络管理PING命令
    报告一个特定的目的地不可到达
    请求一个发送主机减少它的数据流量,以缓解网络拥塞
    报告配置和路由的变化
    报告一个特定的数据报中IP报头参数的问题
    因超时而丢弃一个数据报
    CMP差错报文

差错报告作为ICMP最初始的功能,具有两大特点:

    第一,ICMP作为差错报文传输机制,最根本的功能是提供差错报告,但ICMP并不严格规定对 某种差错应采取什么处理方式。
    第二,ICMP的差错报告都是网关——源机模式的,因为:首先,IP数据报只包含信源地址 和信宿地址(除非选用“记录路径”选项),一旦发生错误,差错情况要么报告信源机, 要么报告信宿机,但报告信宿机首先没有意义(因为传输与信宿机毫无关系),其次也许 根本做不到(因为传输错误可能使信宿机不可到达),于是,差错信息只能传给信源机。(这句话的意思就是,网络层提供的是点对点的服务,就是一个路由给另一个路由发送数据的时候出现错误,这个使用ICMP的差错报告都是网关,都是发送端的网关!它只是报告,并不能采取什么措施)

关于ICMP与TCP的差错控制对比?

比如主机A到主机B的通信,中间Router  r1 到Router  r2 的网络连接断了。

通过ICMP,则可以快速诊断出出错原因,并且报告主机。(差错诊断)

TCP的差错控制,主要是体现在,网络断了,收不到确认回复,TCP会一直再次发送数据包,直到收到确认回复。(差错处理)

 

ICMP提供一组易懂的出错报告信息。发送的出错报文返回到发送原数据的设备,因为只有发送设备才是出错报文的逻辑接受者发送设备随后可根据ICMP报文确定发生错误的类型,确定如何才能更好地重发失败的数据报。但是ICMP唯一的功能是报告问题而不是纠正错误,纠正错误的任务由发送方完成。

三。ICMP协议有哪些数据包?

一个ICMP数据包实际上就是一个(数据部分为ICMP协议数据的)IP数据包。 

IP头

ICMP头

Type

Code

Checksum

ICMP数据


如前所述,ICMP主要分为差错报文控制报文

差错报文包括:目标不可到达(网络、协议、主机、端口不可到达;禁止分割、目标网络不认识、目标主机不认识等等)、超时、参数问题、重定向(网络重定向、主机重定向等)等等

控制报文包括:请求回显(ping请求)、回显应答(ping应答)、地址掩码请求、地址掩码应答等等

如上,我们可以发现,同一类型的错误(不可到达)可能有不同种类(网络不可到达、主机不可到达),因此,我们使用type来code两个标志来确定一个具体的错误。

因为需要指出具体是哪个主机上的哪个程序发出的信息没有到达。

因此,每一个ICMP的错误消息,应该包含:

1.具体的错误类型(Type/code 决定)

2.引发ICMP错误消息的数据包的完全IP包头(哪个主机的数据)

3.数据报的前8个字节----UDP报头或者TCP中的port部分(主机上的哪个程序)

因此,ICMP错误消息的格式应该为如下

Type(8)

Code(8)

Checksum(16)

Unused(32)

Internet Header +64 Bits of Original Data Datagram

 
控制报文因为控制的消息各不相同,所以有所差异。下面分析下请求回显(ping)和回显应答,其他的消息,大家可以触类旁通。

Type

Code

Checksum

Identifier

Sequence Number

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值