因特网控制报文协议(Internet Control MessageProtocol,ICMP)
用于主机和路由器间沟通网络层信息;
ICMP位于IP之上,ICMP分组由IP分组承载,主机收到一个指明上层协议为ICMP的IP数据报时,它分解出数据报的有效载荷并交付给ICMP;
功能
ICMP支持主机或路由器:
- 差错(或异常)报告
- 网络探询
两类ICMP 报文:
-
差错报告报文(5种)
- 目的不可达
- 源抑制(Source Quench)
- 超时/超期
- 参数问题
- 重定向 (Redirect)
-
网络探询报文(2组)
- 回声(Echo)请求与应答报文(Reply)
- 时间戳请求与应答报文
ICMP报文
- 类型字段
- 编码字段
- 源字段 引起该ICMP报文首次生成的IP数据报的首部和前8字节;
例外
几种不发送 ICMP差错报告报文的特殊情况
- 对ICMP差错报告报文不再发送 ICMP差错报告报文
- 除第1个IP数据报分片外,对所有后续分片均不发送ICMP差错
报告报文 - 对所有多播IP数据报均不发送 ICMP差错报告报文
- 对具有特殊地址(如127.0.0.0 或 0.0.0.0)的IP数据报不发送
ICMP 差错报告报文
几种 ICMP 报文已不再使用
- 信息请求与应答报文
- 子网掩码请求和应答报文
- 路由器询问和通告报文
ICMP应用
Traceroute
- 源主机向目的主机发送一系列UDP数据报
- 第i组IP数据报TTL =i,i = 1,2,3……
- 目的端口号为不可能使用的端口号
- 当第n组数据报(TTL=n)到达第n个路由器时:
- 路由器丢弃数据报
- 向源主机发送ICMP报文(type=11, code=0)
- ICMP报文携带路由器名称和IP地址信息
- 当ICMP报文返回到源主机时,记录RTT
- 停止
- UDP数据报最终到达目的主机
- 目的主机返回“目的端口不可达”ICMP报文 (type=3,code=3)
- 源主机停止
Ping
- ping程序发送一个类型8,编码0的ICMP报文到指定主机;
- 目的主机发回一个类型0,编码0的ICMP回显回答;
源抑制报文
- 最初用于执行拥塞控制的ICMP报文;
- 实践中很少使用;
- 拥塞路由器向主机发送一个源抑制报文以强制该主机减小发送速率;