ICMP协议分析

什么是icmp协议

ICMP是(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。

定义

ICMP协议是一种面向无连接的协议,用于传输出错报告控制信息。它是一个非常重要的协议,它对于网络安全具有极其重要的意义。

它是TCP/IP协议族的一个子协议,属于网络层协议,主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。当遇到IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP消息。ICMP报文在IP帧结构的首部协议类型字段(Protocol 8bit)的值=1.

如下图所示,ICMP包有一个8字节长的包头,其中前4个字节是固定的格式,包含8位类型字段,8位代码字段和16位的校验和;后4个字节根据ICMP包的类型而取不同的值。

Understanding Ping Command and ICMP with Examples

What is ICMP type?

Understanding ICMP Packets with Examples

ICMP提供一致易懂的出错报告信息。发送的出错报文返回到发送原数据的设备,因为只有发送设备才是出错报文的逻辑接受者。发送设备随后可根据ICMP报文确定发生错误的类型,并确定如何才能更好地重发失败的数据包。但是ICMP唯一的功能是报告问题而不是纠正错误,纠正错误的任务由发送方完成。

我们在网络中经常会使用到ICMP协议,比如我们经常使用的用于检查网络通不通的Ping命令(Linux和Windows中均有),这个“Ping”的过程实际上就是ICMP协议工作的过程。还有其他的网络命令如跟踪路由的Tracert命令也是基于ICMP协议的。

13fb8ad9562cfcfaa95f15a5fa34bd4d.png

ICMP协议到底属于哪一层

icmp协议是IP层的附属协议,是介于IP层和TCP层之间的协议,一般认为属于IP层协议。IP协议用它来与其他主机或路由器交换错误报文和其他的一些网络情况。在ICMP包重携带了控制信息和故障恢复信息。主要用于路由器主机向其他路由器或者主机发送出错报文的控制信息。

ICMP的功能特点

e33e4657fe4bd28f3aa407685d5be9a4.png

ICMP本身是网络层的一个协议;

ICMP差错报告采用路由器-源主机的模式,路由器在发现数据报传输出现错误时只向源主机报告差错原因;

ICMP并不能保证所有的IP数据报都能够传输到目的主机;

ICMP不能纠正差错,它只是报告差错。差错处理需要由高层协议去完成。

它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不 通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。 ICMP的作用与特点 ICMP的特点: ICMP本身是网络层的一个协议; ICMP差错报告采用路由器-源主机的模式,路由器在发现数据报传输出现错误时只向源主机报告差错原因; ICMP并不能保证所有的IP数据报都能够传输到目的主机; ICMP不能纠正差错,它只是报告差错。差错处理需要由高层协议去完成。 ICMP报文类型 ICMP差错控制 ICMP差错报告报文: 目的站不可达: 源站抑制 超时 参数问题 改变路由 目的站不可到达 网络不可到达(net unreachable) 主机不可到达(host unreachable) 协议不可到达(protocol unreachable) 端口不可到达(port unreachable) 源路由选择不能完成(source route failed) 目的网络不可知(unknown destination network) 目的主机不可知(unknown destination host)

Exploring ICMP Protocol with Examples

Exploring ICMP with Examples

ping命令是什么协议?

维基百科介绍:

ping是一种电脑网络工具,用来测试数据包能否通过IP协议到达特定主机。ping的运作原理是向目标主机传出一个ICMP echo@要求数据包,并等待接收echo回应数据包。程序会按时间和成功响应的次数估算丢失数据包率(丢包率)和数据包往返时间(网络时延,Round-trip delay time)。

可以知道,ping基于ICMP协议。

ICMP属于哪一层?

查阅书籍《TCP/IP协议族》,第9章“网络控制报文协议(ICMP)”,我们可以看到下面这一段话:

IP协议还缺少主机和管理查询所需要的机制。主机有时候需要判断某个路由器或者是对方主机是否活跃。有时网络管理员也需要来自其他主机或路由器的信息。

网络控制报文协议(ICMP)是设计来弥补上述两个遗憾的,它是IP协议的伴侣。图9.1给出了ICMP协议在网络层中的位置,以及它与IP及其他协议之间的关系。

查看《TCP/IP协议详解卷1》,第6章“ICMP:Internet控制报文协议”:

ICMP经常被认为是IP层的一个组成部分。它传递差错报文以及其他需要注意的信息。

ICMP报文通常被IP层或更高层协议(TCP或UDP)使用。

由此可见,ICMP位于网络层,与IP属于同一层。

进一步验证

我们进一步查看权威的资料,找到RFC 792文档:

The Internet Protocol (IP) 1 is used for host-to-host datagram

service in a system of interconnected networks called the

Catenet 2. The network connecting devices are called Gateways.

These gateways communicate between themselves for control purposes

via a Gateway to Gateway Protocol (GGP) 3,4. Occasionally a

gateway or destination host will communicate with a source host, for

example, to report an error in datagram processing. For such

purposes this protocol, the Internet Control Message Protocol (ICMP),

is used. **ICMP, uses the basic support of IP as if it were a higher

level protocol, however, ICMP is actually an integral part of IP, and

must be implemented by every IP module**.

大意就是:

ICMP协议是用于host到host之间的数据报服务,目的host与源host进行通信时,ICMP会用到,比如通过处理数据报报告一个错误。

ICMP基于IP,以至于它看起来像一个上层协议,但是实际上是IP的一部分,而且必须在每个IP模块中实现。

至于ICMP的详细作用以及帧结构定义,这里不再赘述,读者自行了解。

Exploring ICMP Port Number with Example

ICMP差错报文

报告IP数据报在传输中的差错是ICMP报文最基本的功能,ICMP差错报文有如下特点:

ICMP差错报文都是由路由器发送到源主机的,因为IP数据报中含有源主机的IP地址,报告给源主机是最可行的方案,另外,发出IP数据报的源主机最需要知道数据是否到达目标主机。

ICMP差错报文只提供IP数据报在传输过程中的差错报告,并不规定对各类差错应采取什么样的处理措施。具体对差错的处理,由收到ICMP差错报文的源主机将相应的差错与应用程序联系起来才能进行相应的差错处理。

ICMP差错报文不享受任何优先权,也没有特别的可靠性保证措施,与普通的IP数据报一样进行传输,传输过程中可能被丢失、损坏,甚至被抛弃。

ICMP差错报文是伴随着抛弃出错的IP数据报而产生的。

当路由器发送一份参数错误等的ICMP差错报文时,ICMP报文数据区始终包含产生ICMP差错报文的IP数据报的头部和其数据区的前8个字节(64位)。

在有些情况下,为了防止在网络中产生大量的ICMP差错报文(广播风暴),影响网络的正常工作,即使发生差错,也不会产生ICMP差错报文,这些情况包括:

●ICMP报文发生差错。这是为了避免差错报文无休止产生而规定的(但ICMP查询报文可能会产生ICMP差错报文)。

●目的地址是广播地址或多播地址(D类地址)的IP数据报。

●作为链路层广播的数据报。

●不是IP分片的第一片。

●源地址不是单个主机的数据报。这就是说,源地址不能为零地址、回送地址、广播地址或多播地址。

Capture ICMP Packets With Tcpdump

Filtering ICMP ICMPv6 Packets with Tcpdump

原文链接:https://www.howtouselinux.com/post/icmp-port-number

相关文章

  • [linux][network]ICMP协议分析

    前言: ICMP比较基础,说简单不简单,说难不难。 简单在于字段少,不能携带用户数据,没什么地方可以玩出太多花样;一般和它相关的就是ping和tracerout...

    皮振伟
  • ICMP 协议分析

    ICMP是(Internet Control Message Protocol)Internet控制报文协议,它是TCP/IP协议族的一个子协议,用于在IP主机...

    用户8418197
  • ICMP协议分析-ping和traceroute

    日常开发中,我们经常会碰到查询网络是否畅通以及域名对应 IP 地址等小需求,这时候用的最多的应该就是 ping 命令了。 那你知道 ping 命令是怎么工作的吗...

    用户8418197
  • tcpdump分析ICMP协议

    前面20字节是IP协议头,之后就是ICMP协议头:是0800 cbae 472e 0001部分

    十毛
  • [协议]ICMP协议剖析

    1、ICMP简介 ICMP全名为(INTERNET CONTROL MESSAGE PROTOCOL)网络控制消息协议。 ICMP的协议号为1。 ICMP报文就...

    静默虚空
  • ICMP协议

    ICMP(Internet Control Message protocol)互联网信息控制协议,用于实现链路连通性测试和链路追踪,可以实现链路差错报告,属于U...

    233333
  • ICMP协议详解

    ICMP协议详解 ICMP协议是一个网络层协议。 一个新搭建好的网络,往往需要先进行一个简单的测试,来验证网络是否畅通;但是IP协议并不提供可靠传输。如果丢...

    心跳包
  • ICMP协议与ping命令

    (3)根据ping返回的TTL值来判断对方所使用的操作系统及数据包经过路由器数量。

    用户7557625
  • 协议森林06 瑞士军刀 (ICMP协议)

    到现在为止,我们讲解了网络层中最重要的IP协议(参考协议森林)。IP协议的一个重要补充是是ICMP协议。 ICMP协议 ICMP(Internet Contro...

    Vamei
  • 互联网医生-ICMP协议

    在《IP协议详解》入门文章中,IP协议并不是一个可靠的协议,它不保证数据被送达,那么,自然的,保证数据送达的工作应该由其他的模块来完成。其中一个重要的模块就是网...

    用户8611941
  • 协议分析|HTTP协议浅析

    HTTP和HTTPS Cookie、Session HTTP请求方法(Get/Post) 一次HTTP请求的过程 一次请...

    Ms08067安全实验室
  • ICMP timestamp 协议原理和实现

    大量的设备连接到互联网,而设备之间需要通讯以及相互协作,这就要求不同设备之间需要保持时钟同步。然而无论是多么精准的时钟,一旦运行久了后,它指示的时间与真实时间会...

    望月从良
  • 原始套接字打造ping命令

    ping 命令依赖的不是TCP 协议,也不是UDP 协议,它依赖的是ICMP协议。ICMP是IP层的协议之一,它传递差错报文以及其他需要注意的信息。IC...

    码农UP2U
  • 从0到1用java再造tcpip协议栈:ICMP协议的原理和实现

    绝大多数TCPIP传输协议基于IP寻址协议,然后建造在IP之上的TCP和UDP两种协议用于控制数据包的传输。问题在于这些协议只关注数据传输,在传输过程中如果出现...

    望月从良
  • 对于Ping的过程,你真的了解吗?

    对于ping命令,想必只要是程序员都知道吧?当我们检查网络情况的时候,最先使用的命令肯定是ping命令吧?一般我们用ping查看网络情况,主要是检查两个指标,第...

    周三不加班
  • TLS协议分析 (三) record协议

    record协议做应用数据的对称加密传输,占据一个TLS连接的绝大多数流量,因此,先看看record协议 图片来自网络:

    用户8964349
  • 当你 ping 的时候,你知道背后发生了什么吗?

    对于 ping命令,想必只要是程序员都知道吧?当我们检查网络情况的时候,最先使用的命令肯定是 ping命令吧?一般我们用 ping查看网络情况,主要是检查两个指...

    挨踢小子部落阁
  • Python3实现ICMP远控后门(上)

    七夜安全博客
  • 教你学木马攻防 | 隧道木马 | ICMP反弹shell

    在上一篇文章中,我们讲解了木马中常用的端口转发技术,这一节讲解一下木马通信协议中的ICMP协议,并通过ICMP实现一个反弹shell。

    七夜安全博客

扫码关注云+社区

领取腾讯云代金券