ICMP协议
Posted lipengfei159263
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ICMP协议相关的知识,希望对你有一定的参考价值。
ICMP 是Internet控制报文协议,工作在网络层,用来在网络设备间传递各种差错和控制信息。它对于收集各种网络信息、诊断和排除各种网络故障具有至关重要的作用。
1、ICMP功能
?ICMP重定向:当数据发送的路径错误的时候,对方发送ICMP纠正协议以使发送端选择正确路径。
ICMP差错检测:检测两台主机之间能否正常的进行收发,使用的命令就是PingICMP Echo Request和ICMP Echo Replay分别用来查询和响应某些信息, 进行差错检测。
ICMP错误报告
当网络设备无法访问目标时,中间设备会自动发送ICMP目的不可达报文到发送端。ICMP定义了各种错误消息,用于诊断网络连接性问题;根据这些错误消息,源设备可以判断出数据传输失败的原因。比如,如果网络中发生了环路,导致报文在网络中循环,最终TTL超时,这种情况下网络设备会发送TTL超时消息给发送端设备。又比如如果目的不可达,则中间的网络设备会发送目的不可达消息给发送端设备。目的不可达的情况有多种,如果是网络设备无法找到目的网络,则发送目的网络不可达消息; 如果网络设备无法找到目的网络中的目的主机,则发送目的主机不可达消息。
2、ICMP数据包格式
ICMP消息封装在IP报文中。ICMP消息的格式取 决于Type和Code字段, 其中Type字段为消息类型,Code字段包含该消息类型的具体参数。后面的校验和字段用于检查消息是否完整。在ICMP Redirect消息中,这个字段用来指定网关IP地址,主机根据这个地址将报文重定向到指定网关。 在Echo请求消息中,这个字段包含标识符和序号,源端根据这两个参数将收到的回复消息与本端发送的Echo请求消息进行关联。尤其是当源端 目的端发送了多个Echo请求消息时,需要根据标识符和序号将Echo 请求和回复进行一一对应。 |
ICMP定义了多种消息类型,用于不同的场景。有些消息不需要Code字段来描述具体类型参数,仅用Type字段表示消息类型。比如,ICMP Echo回复消息的Type字段设置为0。 有些ICMP消息使用Type字段定义消息大类,用Code字段表示消息的具体类型。比如,类型为3的消息表示目的不可达,不同的Code值表示不可达的原因,包括目的网络不可达(Code=0)、目的主机不可达(Code=1) 、协议不可达(Code=2)、目的TCP/UDP端口不可达(Code=3) 等。 其中网络不可达指的是没有这个网段,主机不可达指的是有这个网段,但是网段里头没有这台主机,端口不可达指的是主机没有开放这个端口(最常用),协议不可达指的是不支持这个协议号。 |
3、ICMP应用
ping
Ping是检测网络连通性的常用工具,同时也能够收集其他相关信息。用户可以在Ping命令中指定不同参数,如ICMP报文长度、发送的ICMP报文个数、等待回复响应的超时时间等, 设备根据配置的参数来构造并发送ICMP报文,进行Ping测试。
Ping常用的配置参数说明如下:
1. -a source-ip-address指定发送ICMP ECHO-REQUEST报文的源IP地址。如果不指定源IP地址,将采用出接口的IP地址作为ICMP ECHO- REQUEST报文发送的源地址。
2. -c count指定发送ICMP ECHO-REQUEST报文次数。缺省情况下发送5个ICMP ECHO-REQUEST报文。
3. -h ttl-value指定TTL的值。缺省值是255。
4. -t timeout指定发送完ICMP ECHO-REQUEST后,等待ICMP ECHO- REPLY的超时时间。
Ping每次会发5个包,ping通的情况下会回5个包,每个包显示字节数,序列号。TTL值和延迟
如果丢包,会恢复丢包率,最小延迟平均延迟最大延迟
--10.0.0.2 ping statistics---
5 packet(s) tranamitte
5 packet(s) received
0.00% packet loss
Round-trip min/avg/max=10/88/340 ms
Tracert
Tracert和Ping的区别是 Tracert是一种追踪的状态,可以追踪到数据走的哪个端口
Tracert使用的端口号比较大,大到接受端无法识别
Tracert使用的TTL值从1开始加
Tracert每次发送3个一样的包,以防止丢失,只要回来一个包就可以
主机A向第一个路由器发送TTL值,TTL值为1
第一个路由器A收到TTL值减1,当TTL=0时 代表超时 便不能向前转发,此时返回给主机A 捎带路由器A的地址
主机A下次发数据包 TTL=2 路由器B收到后 TTL减为0 超时返回 捎带路由器B的地址
以此类推 直到主机B
主机B收到一个超大端口 不能识别 回复一个目的不可达的信号 主机A收到这个信号 直到信息已达主机B
以上是关于ICMP协议的主要内容,如果未能解决你的问题,请参考以下文章