作者 | 向闲
小编 | 不吃猪头肉
引言
在车载以太网测试中,因为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报头格式如下图:
ICMP报头格式
类型(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报文分类:
应用
ICMPv4最常见的用法是对网络进行测试和故障诊断,常用的程序是Ping 和tracert。
1)Ping
使用ping命令确定本地主机是否能与另一台主机成功交换数据包,再根据返回的信息,就可以推断TCP/IP参数是否设置正确,以及运行是否正常、网络是否通畅等。
2)tracert
tracert 命令主要用来显示数据包到达目的主机所经过的路径。通过执行一个tracert到对方主机的命令,返回数据包到达目的主机所经历的路径详细信息,并显示每个路径所消耗的时间。
总结
ICMP协议是TCP/IP协议簇中不可或缺的一部分。通过理解和应用ICMP协议,可以更好地帮助管理员去收集各种网络信息、诊断和排除各种网络故障。
-
互联网
+关注
关注
54文章
11092浏览量
102861 -
ICMP
+关注
关注
0文章
52浏览量
14910 -
车载以太网
+关注
关注
18文章
218浏览量
22935 -
报文
+关注
关注
0文章
38浏览量
4017
发布评论请先 登录
相关推荐
评论