ICMP(Internet Control Message Protocol,互联网控制消息协议)是TCP/IP协议族的一个重要组成部分,位于网络层,主要用于在IP主机、路由器之间传递控制消息,报告网络错误或提供有关异常情况的通知。ICMP报文格式: ICMP报文封装在IP数据报中,包含类型、代码、检验和以及可能的数据区四个主要部分。
其中:
•类型(Type):定义了ICMP消息的类型,如Echo请求/回复(Ping请求/响应)、目的地不可达、超时、重定向等。
•代码(Code):更细粒度地指定特定类型的ICMP消息的具体情况,如目的地不可达时,可以细分为主机不可达、网络不可达等。
•检验和(Checksum):用于验证ICMP报文在传输过程中是否出错。
•数据区(Data):包含根据不同ICMP类型而变化的具体信息,如在回显请求/回应(Ping)中包含发送的数据,或者在错误消息中包含出错的IP数据报的部分副本。
ICMP的主要功能包括:
1. 错误报告:当IP数据报在传输过程中出现错误时,路由器或主机可以通过发送ICMP差错报告消息来通知源主机。如目的地不可达(Destination Unreachable)、时间超过(Time Exceeded)、参数问题(Parameter Problem)等。
2. 查询和应答:ICMP提供了一种查询和应答机制,如回显请求/回应(Echo Request/Reply,即Ping命令)、时间戳请求/回应(Timestamp Request/Reply)等,用于检测网络可达性、测量延迟和路径MTU(Maximum Transmission Unit)等。
3. 路由器辅助功能:如路由器可以发送ICMP重定向消息(Redirect Message)告诉主机更好的路由信息,帮助主机优化路由选择。
type和code的不同组合可以表示不同功能的ICMP报文
类型 (type) | 编码(code) | 描述 |
---|---|---|
0 | 0 | Echo Reply |
3 | 0 | 网络不可达 |
3 | 1 | 主机不可达 |
3 | 2 | 协议不可达 |
3 | 3 | 端口不可达 |
5 | 0 | 重定向 |
8 | 0 | Echo Request |
ICMP 协议应用在许多网络管理命令中,下面以 ping 和 tracert 命令为例详细介绍 ICMP 协议的应用。
两大应用:
①ping:
使用request和reply
使用功能:差错检测
作用:测试网络连通性
使用方法:
ping + 目的IP(域名) + 选项(-a、-c 等等)
ping -a:指定报文的源IP,默认为出接口IP地址
ping -c:指定报文发送的数量,默认为5
ping -t:持续发送报文
ping -h:指定TTL的值,默认值为255
ping -i:指定发送ICMP报文的接口
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5372E6z5-1601099717174)(https://upload-images.jianshu.io/upload_images/20425542-be76d4b1825d0cb1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
②tracert:
用以跟踪数据包经过的三层设备
使用功能:错误报告
作用:用于跟踪数据包的转发路径。一般用于排障。
使用方法:
tracert + 选项(-a、-f、-m等等) + 目的IP地址
tracert -a 指定源IP
tracert -f 指定初次TTL的值
tracert -q 指定发送单个报文的次数,默认为3
tracert -m 最大的TTL值,默认为30