互联网控制报文协议(ICMP)

来源:互联网 发布:mac上git客户端 编辑:程序博客网 时间:2024/05/18 01:58

1 ICMP(互联网控制消息协议)基本概念

IP缺点

  • 无差错报告和差错纠正机制(ICMP也不具有差错纠正的功能)
  • 缺少一种为主机和管理查询的机制

ICMP

  • ICMP本身是网络层协议。但是,它的报文不是如设想的那样直接传送给数据链路层,实际上,ICMP报文首先封装成IP数据报,然后再传送给下一层
  • 在IP数据报中协议字段值是1就表示其数据是ICMP报文

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

2 ICMP协议

互联网控制报文协议 ICMP (Internet Control Message Protocol)支持主机或路由器:

  • 差错(或异常)报告
  • 网络探询

两类ICMP报文

差错报告报文(5种):ICMP总是把差错报告报文报告给原始的数据源

  • 类型3:终点不可达
  • 类型4:源点抑制(Source Quench)
  • 类型11:超时/超期
  • 类型12:参数问题
  • 类型5:改变路由(路由重定向,Redirect)

查询报文

  • 类型8或0:回送请求或回答
  • 类型13或14:时间戳请求或回答
  • 类型17或18:地址码请求或回答
  • 类型10或9:路由器查询通告

这里写图片描述

ICMP报文格式

ICMP Echo Request(Reply)报文结构

这里写图片描述

  • 类型和代码为8位,校验和为16位
  • 标识符:16位,用来标识ICMP协议。在windows下为LE,在linux下为BE
  • 序列号:16位,请求和回答报文的序列号一样

这里写图片描述

ICMP通用格式

这里写图片描述

ICMP差错报告报文

关于ICMP差错报告报文有以下的一些要点

  • 对于携带ICMP差错报文的数据报,不再产生ICMP差错报文
  • 对于分片的数据报,如果不是第一个分片,则不产生ICMP差错报文
  • 对于具有多播地址(224.0.0.0-239.255.255.255)的数据报,不产生ICMP差错报文
  • 对于具有特殊地址如(127.0.0.0或0.0.0.0,127.0.0.0为回环地址),不产生ICMP差错报文

终点不可达

  • 当路由器不能够给数据报找到路由器或主机不能够交付数据时,就丢弃这个数据报,然后这个路由器或主机就向发出这个数据报的源主机发回终点不可达报文

这里写图片描述

源点抑制

  • IP协议是无连接协议,没有流量控制机制,容易产生:拥塞
  • ICMP源点抑制报文就是给IP增加一种流量控制而设计的,这个报文有两个目的
    • 它通知源点,数据报因拥塞已经被丢弃
    • 它警告源点,在路径中的某处出现了拥塞,因而源点必须放慢(抑制)发送过程

这里写图片描述

超时

超时报文在以下两种情况产生

  • 当路由器发现生存字段值为0的数据报时,就丢弃这个数据报,并向源点发送超时报文
  • 当最后的终点在规定的时间内没有收到所有的分片时,它就丢弃已收到的分片,并向源点发送超时报文
  • 在超时报文中,代码0只给路由器使用,表示生存时间字段值为0。代码1只由目的主机使用,它表示在规定的时间内,不是所有的分片都到达了

这里写图片描述

参数问题

  • 当数据在因特网上传送时,在其首部中出现的任何二义性都可能产生严重的问题
  • 如果路由器或目的主机发现了这种二义性,或在数据报的某个字段中缺少某个值,就丢弃这个数据报,并发送参数问题报文

这里写图片描述

代码0指坏的IP头部,代码1指IP首部缺少选项字段部分。

改变路由

这里写图片描述

这里写图片描述

改变路由(类型:5)

  • 代码:
    • 0:特定网络路由的改变
    • 1:特定主机路由的改变
    • 2:基于指定的服务类型对特定网络路由的改变
    • 3:基于指定的服务类型对特定主机路由的改变

ICMP查询报文

回送请求和回送应答

  • 请求:request,类型8
  • 应答:reply,类型0

这里写图片描述

时间戳请求和回答

  • 发送时间=接收时间戳的值-原始时间戳的值
  • 接收时间=分组返回的时间值-发送时间戳的值
  • 往返时间=分组返回的时间值-原始时间戳的值

这里写图片描述

地址掩码请求和回答

  • 单播
  • 广播

这里写图片描述

路由器询问和通告

  • 广播
  • 多播

这里写图片描述

几种 ICMP 报文已不再使用

  • 信息请求与应答报文
  • 子网掩码请求和应答报文
  • 路由器询问和通告报文

ping

  • 改变字节数: ping -l 1024 www.baidu.com
  • 持续发送数据包:ping -t www.baidu.com

Traceroute(windows用tracert)

  • 源主机向目的主机发送一系列UDP数据报
    • 第1组IP数据报TTL =1
    • 第2组IP数据报TTL=2, etc.
    • 目的端口号为不可能使用的端口号
  • 当第n组数据报(TTL=n)到达第n个路由器时:
    • 路由器丢弃数据报
    • 向源主机发送ICMP报文(type=11, code=0)
    • ICMP报文携带路由器名称和IP地址信息
  • 当ICMP报文返回到源主机时,记录RTT

  • 停止准则:

    • UDP数据报最终到达目的主机
    • 目的主机返回“目的端口不可达” ICMP报文 (type=3,
      code=3)
    • 源主机停止

3 ICMP消息类型及子类型编码

这里写图片描述

这里写图片描述

这里写图片描述

  • 类型3的0、1由路由器发出,2、3由目的主机发出
  • 主机越权指的是数据报的优先级过低,不满足路由发送数据报的最低优先级
  • 优先权中止生效指的是路由器要求数据报设置优先级但数据报本身却无优先级信息

这里写图片描述

这里写图片描述

这里写图片描述