- 网际控制报文协议(Internet Control Message Protocol)
- 该协议主要是用于辅助IP协议进行数据传输的
- ICMP协议可以报告错误信息或者异常情况
ICMP的报文数据是通过封装在IP数据报中进行数据传输的
**
ICMP报文首部
- 8位类型:主要是指ICMP报文的种类
- 8位代码:不同ICMP报文种类具体有哪些错误
- 16位校验和:校验报文在整个传输中是否有错误
IP协议首部中,有一个8位协议,它表明的是IP数据所携带的具体数据是什么协议的。ICMP的字段值是1.
ICMP协议报文的两个类型
差错报告报文

- 网络不可达:IP地址可以表示一个网络,当主机号全0的时候表示的是某一个网络,如果整个网络不可达,。。。
- 主机不可达:如果A和B要通信而B是离线或者关机状态,就会出现主机不可达
- 网络重定向:传输给某一个网络的数据。可能不能走该网络了需要重定向
-
询问报文

回送请求或应答:验证网络是否通。A给B发送一个空数据,如果B收到,就给一个回应
- 时间戳请求或应答:时间同步
ICMP应用
ping
ping主要是使用ICMP的询问报文**,它会发送回送请求或应答类型的报文。当使用ping命令的时候,他会先组装一个IP协议的报文,然后在IP数据报中组装ICMP的询问报文。然后通过数据链路层**发送出去。①首先ping命令会先发送一个 ICMP Echo Request(请求包)给对端 ②对端接收到之后, 会返回一个ICMP Echo Reply(应答包) ③若没有返回,就是超时了,会认为指定的网络地址不存在。
ping查看本地网络故障
- ping本地回环地址127.0.0.1(如果没有返回说明协议栈问题,重装)
- 如果上一步返回正常,则ping网关地址(路由器地址)。内网则ping 192.168.1.1。不同则表示网线或路由器故障
- 继续ping远程地址如 ping www.baidu.com。不同则表明你家到ISP(互联网供应商,Internet Service Provider)之间网络故障
traceroute/ Tracert
检测IP数据包在网络中的传播路径。计算机连接在虚拟互联网中,不需要关心数据报在网络中的传播路径。但当对网络故障排查时,需要使用traceroute进行寻踪。
差错报告报文
原理:
Traceroute命令用TTL字段和ICMP错误消息来确定从一个主机到网络上其他主机的路由。
- 首先Traceroute送出一个
TTL=1的IP数据包到目的地,当路径上的第一个路由器收到这个数据包时,分组改写将TTL-1.- 此时TTL为0,所以路由器会将此数据包丢掉并送回一个
ICMP time exceeded消息(包括源地址、IP包内容以及路由器IP地址)- Traceroute收到这个消息后便知道这个路由器存在于这个路径上,接着TraceRoute再送出一个
TTL=2的数据包发现第二个路由器…重复直到某个数据包到达目的地- 当数据包到达目的地后,该主机不会送回ICMP time exceeded消息,一旦到达目的地,由于Traceroute通过UDP数据包向不常见端口号33434发送数据包,因此会收到
ICMP port unreachable消息,故可判断到达目的地

