Mcj
Mcj
Published on 2025-03-20 / 11 Visits
0
0

Network10-ICMP

ICMP简介

  • 互联网控制消息协议(英语:Internet Control Message Protocol,缩写:ICMP),在 RFC 792 中定义。
  • ICMP协议的主要作用,是检测互联网的各种故障,提供可能发生在通信环境中的各种问题反馈。通过这些信息,使管理者可以对所发生的问题作出诊断,然后采取适当的措施解决。
  • ICMP是基于IP协议的,并不依赖于传输层协议TCP或者UDP,可以直接工作在三层。
  • Ping和traceroute都是基于ICMP实现的网络程序。

ICMP的报文结构

报头

ICMP报头从IP报头的第160位开始(IP首部20字节)(除非使用了IP报头的可选部分)。
image.png

  • Type - ICMP的类型,标识生成的错误报文;
  • Code - 进一步划分ICMP的类型,该字段用来查找产生错误的原因.;例如,ICMP的目标不可达类型可以把这个位设为1至15等来表示不同的意思。
  • Checksum - Internet校验和(RFC 1071),用于进行错误检查,该校验和是从ICMP头和以该字段替换为0的数据计算得出的。
  • Rest of Header - 报头的其余部分,四字节字段,内容根据ICMP类型和代码而有所不同。

填充数据

{% note color:cyan 这个是重点哦! %}

填充的数据紧接在ICMP报头的后面(以8位为一组):

  • Linux的"ping"工具填充的ICMP除了8个8位组的报头以外,默认情况下还另外填充数据使得总大小为64字节。
  • Windows的"ping.exe"填充的ICMP除了8个8位组的报头以外,默认情况下还另外填充数据使得总大小为40字节。
类型 代码 状态 描述 查询 差错
0 -响应回显 0 Echo响应 (被程序ping使用)
1 and 2 未分配 保留
3 - 目的不可达 0 目标网络不可达
1 目标主机不可达
2 目标协议不可达
3 目标端口不可达
4 要求分段并设置DF flag标志
5 源路由失败
6 未知的目标网络
7 未知的目标主机
8 源主机隔离(作废不用)
9 禁止访问的网络
10 禁止访问的主机
11 对特定的TOS 网络不可达
12 对特定的TOS 主机不可达
13 由于过滤 网络流量被禁止
14 主机越权
15 优先权终止生效
4 - 源端关闭 0 弃用 源端关闭(拥塞控制)
5 - 重定向 0 重定向网络
1 重定向主机
2 基于TOS 的网络重定向
3 基于TOS 的主机重定向
6 弃用 备用主机地址
7 未分配 保留
8 -请求回显 0 Echo请求
9 - 路由器通告 0 路由通告
10 - 路由器请求 0 路由器的发现/选择/请求
11 - ICMP 超时 0 TTL 超时
1 分片重组超时
12 - 参数问题:错误IP头部 0 IP 报首部参数错误
1 丢失必要选项
2 不支持的长度
13 - 时间戳请求 0 时间戳请求
14 - 时间戳应答 0 时间戳应答
15 - 信息请求 0 弃用 信息请求
16 - 信息应答 0 弃用 信息应答
17 - 地址掩码请求 0 弃用 地址掩码请求
18 - 地址掩码应答 0 弃用 地址掩码应答
19 保留 因安全原因保留
20 至 29 保留 Reserved for robustness experiment
30 - Traceroute 0 弃用 信息请求
31 弃用 数据报转换出错
32 弃用 手机网络重定向
33 弃用 Where-Are-You(originally meant for IPv6
34 弃用 Here-I-Am(originally meant for IPv6)
35 弃用 Mobile Registration Request
36 弃用 Mobile Registration Reply
37 弃用 Domain Name Request
38 弃用 Domain Name Reply
39 弃用 SKIP Algorithm Discovery Protocol,Simple Key-Management for Internet Protocol
40 Photuris, Security failures
41 实验性的 ICMP for experimental mobility protocols such asSeamoby [RFC4065]
42 到 255 保留 保留
235 实验性的 RFC3692(RFC 4727
254 实验性的 RFC3692(RFC 4727
255 保留 保留

一些ICMP的基础功能

Icmp重定向(默认开启)

  • 当路由不是最优路径时,可以帮助主机选路,但不建议开启此功能
    • 容易被人利用实现中间人攻击
    • 占用主机资源,因为此功能,只能生成基于主机地址的路由
  • 要求
    • 不是路由转发,网关和主机必须在同一网段
    • 必须是单播报文

icmp差错检测

  • ping程序实现,两种报文,其实就是返回咱们上文提到的ICMP的填充数据,帮助我们判断网络中的故障
    • request
    • reply

icmp错误报告

  • tracert来实现,可以检测路由环路(不被限制的情况下)机制如下
    • 连续发送三次ttl=1的报文,如果距离目标地址还有一跳,那么还会发送ttl=2的报文,以此类推
    • 使用udp协议封装,随机使用40000以上的端口号

参考

互联网控制消息协议 - 维基百科,自由的百科全书 (wikipedia.org)


Comment