乐趣区

关于linux: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

退出移动版