ICMPv4协议—互联网控制报文协议
引言
在车载以太网测试中,因为IP协议本身提供的是不可靠传输,所以如果网络出现丢包、网络错误等问题就需要及时向管理者报告错误和状态信息,此时就需要借助ICMP协议来实现这一功能。
什么是ICMPv4协议
ICMP协议全称是Internet Control Message Protocol,即互联网控制报文协议。其中,ICMPv4和ICMPv6分别指用于IPv4和IPv6的ICMP版本。目前在车载以太网里常用到的IP协议是IPv4,所以本文着重介绍ICMPv4,ICMPv6不涉及。
ICMPv4协议是TCP/IP协议簇的一个子协议,封装在IPv4报文中,主要用于在IPv4主机、路由器之间传递控制消息,用于报告网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于收集各种网络信息、诊断和排除各种网络故障以及用户数据的传递起着重要的作用。
ICMPv4报文格式
ICMPv4报文封装在IPv4数据报里,所以一个ICMPv4报文会包括IPv4头部、ICMPv4头部和ICMPv4 Payload。当IPv4头部的Protocol值为1时,表示为一个ICMPv4报文。
ICMPv4报头格式如下图:
类型(Type):ICMPv4报文的类型,如目标不可达报文(Type=3)。
代码(Code):ICMPv4报文类型(Type)下细化的子类型,如对于目标不可达报文(Type=3),code=1表示主机不可达,code=2表示协议不可达。
校验和(Checksum):ICMPv4报文的校验和,校验方法与IP数据报首部校验和算法相同。
报文分类
ICMPv4分为两类报文,1类是查询报文(通过对对端主机发送请求和接收对端主机发送响应的方式去传输消息,可以用来报告网络连通性等消息),1类是差错报文(报告IP数据报在传输过程中出现的错误)。
常见的ICMPv4报文类型如下:
响应请求
平时使用较多的Ping命令就是通过对端主机发送回显请求(Type=8)和接收对端主机发送的回显回答(Type=0)去判断主机之间是否通信连通。
实际测试数据如下:
目标不可达
当路由器无法根据路由表转发IP数据报到指定的目标地址时,会向发送端主机返回一个目标不可达的差错报文,并报告不可达的原因。常见的目标不可达差错报文类型有网络不可达(Code=0)、主机不可达(Code=1)、协议不可达(Code=2)、端口不可达(Code=3)等。
实际测试数据如下:
时间戳
时间戳请求报文(Type=13)和时间戳应答报文(Type=14)用于测试两台主机之间数据报来回一次的传输时间。传输时,主机填充原始时间戳,接收方收到请求后填充接收时间戳后以Type=14的报文格式返回,发送方计算这个时间差。
实际测试数据如下:
参数错误报文
一旦路由器或主机发现错误的数据报首部和错误的数据报选项参数时,便丢弃该数据报,并向源主机发送参数问题(Parameter Problem)报文(Type=12)。代码Code=0表示数据报首部中的某个字段的值有错或不明确,这时ICMP报文首部的指针指向数据报中有问题的字节。
实际测试数据如下:
下表是完整的ICMP报文分类:
表1 ICMP类型
类型(Type) |
代码(Code) |
描述 |
查询 |
差错 |
0 |
0 |
回显回答(Ping应答) |
√ |
|
3 |
0 |
网络不可达 |
√ |
|
1 |
主机不可达 |
√ |
||
2 |
协议不可达 |
√ |
||
3 |
端口不可达 |
√ |
||
4 |
需要进行分片但设置不分片比特 |
√ |
||
5 |
源站选路失败 |
√ |
||
6 |
目的网络未知 |
√ |
||
7 |
目的主机未知 |
√ |
||
8 |
源主机被隔离 |
√ |
||
9 |
目的网络被强制禁止 |
√ |
||
10 |
目的主机被强制禁止 |
√ |
||
11 |
由于服务类型TOS,网络不可达 |
√ |
||
12 |
由于服务类型TOS,主机不可达 |
√ |
||
13 |
由于过滤,通信被强制禁止 |
√ |
||
14 |
主机越权 |
√ |
||
15 |
优先中止生效 |
√ |
||
4 |
0 |
源端被关闭(基本流控制) |
√ |
|
5 |
0 |
对网络重定向 |
√ |
|
1 |
对主机重定向 |
√ |
||
2 |
对服务类型和网络重定向 |
√ |
||
3 |
对服务类型和主机重定向 |
√ |
||
8 |
0 |
回显请求(Ping请求) |
√ |
|
9 |
0 |
路由器通告 |
√ |
|
10 |
0 |
路由器请求 |
√ |
|
11 |
0 |
传输期间生存时间为0 |
√ |
|
1 |
在数据报组装期间生存时间为0 |
√ |
||
12 |
0 |
坏的IP首部(包括各种差错) |
√ |
|
1 |
缺少必需的选项 |
√ |
||
13 |
0 |
时间戳请求 |
√ |
|
14 |
0 |
时间戳应答 |
√ |
|
15 |
0 |
信息请求 |
√ |
|
16 |
0 |
信息应答 |
√ |
|
17 |
0 |
地址掩码请求 |
√ |
|
18 |
0 |
地址掩码应答 |
√ |
应用
ICMPv4最常见的用法是对网络进行测试和故障诊断,常用的程序是Ping 和tracert。
- Ping
使用ping命令确定本地主机是否能与另一台主机成功交换数据包,再根据返回的信息,就可以推断TCP/IP参数是否设置正确,以及运行是否正常、网络是否通畅等。
2.tracert
tracert 命令主要用来显示数据包到达目的主机所经过的路径。通过执行一个tracert到对方主机的命令,返回数据包到达目的主机所经历的路径详细信息,并显示每个路径所消耗的时间。
总结
ICMP协议是TCP/IP协议簇中不可或缺的一部分。通过理解和应用ICMP协议,可以更好地帮助管理员去收集各种网络信息、诊断和排除各种网络故障。
北汇信息是一家专注于汽车电子测试领域的企业,对车载以太网测试有着丰富经验,并可提供相关培训、咨询服务以及测试解决方案,帮助汽车制造商和零部件供应商确保其车载以太网系统的可靠性和安全性。如果需要具体的测试服务或了解更多信息,欢迎大家来联系我们。
参考文献:
【1】《RFC 792》
本文来自博客园,作者:{北汇信息},转载请注明原文链接:{https://www.cnblogs.com/polelink/}