ICMP是传输层协议吗?

chi*_*may 12 networking icmp

我正在进行关于网络的视频讲座,讲师提到ICMP作为传输层协议.但是,谷歌搜索显示各种论坛将其描述为网络层协议.这让我很困惑.有人可以澄清吗?

tem*_*def 16

传输层协议涉及从端到端发送数据并确保(或明确不确保)可靠性.TCP用于将数据从一台计算机发送到另一台计算机,并包括确保数据正确传输所必需的逻辑,而UDP用于将数据从一台计算机发送到另一台计算机,同时希望获得可靠性.

ICMP真的不这样做.它的工作是帮助路由器找出互联网的形状以及使用不同协议发送数据包的方向.因此,它被认为是网络层协议,因为它的工作是确保数据路由到正确的位置,但实际上并不路由数据.

希望这可以帮助!

  • "通常"这个词不属于这个答案.它是或不是. (3认同)
  • [RFC792](https://tools.ietf.org/html/rfc792) 的第一段,该文档概述了 ICMP 协议:_“ICMP,使用 IP 的基本支持,就好像它是更高级别的协议一样,* *然而,ICMP实际上是IP的一个组成部分,并且必须由每个IP模块实现“_**。 (3认同)

fkl*_*fkl 7

毫无疑问,它是一个网络层协议。它经常与传输层混淆的原因是 ICMP 在没有任何传输层的情况下工作。例如 ping 或 traceroute 没有明确定义的端口。相反,每台机器的 tcp/ip 堆栈负责处理和响应传入的 ICMP 消息(而不是查找端口并将其传递给相应的应用程序,就像所有其他应用程序的情况一样)。

更新:

显然,这听起来让读者感到困惑,所以这里是理查德史蒂文斯解释的 TCP/IP 插图的快照,解释了概念和意图。

引自书中。

“定位标记为 ICMP 和 IGMP 的协议框始终是一个挑战。早些时候,我们将它们展示在与 IP 相同的层,因为它们确实是 IP 的附属物。但在这里我们将它们展示在 IP 之上,重申 ICMP 消息和 IGMP 消息封装在 IP 数据报中”

RS 中的 TCP/IP 层 - TCP/IP 图解

教授“某些协议和应用程序”的工作方式与每一层负责不同任务(传输是端到端的,而网络是跳到跳的)的标准概念不同的概念很困难,需要时间来消化。

下一个要学习的最关键的事情是,

即使您使用多个控制台从同一台机器 ping 到另一台机器,它仍然能够跟踪所有个人,所谓的连接(仅与消息交换有关,否则没有像 tcp 这样的连接)。

以上是如何完成的,是特定于操作系统的。Linux 堆栈在 ICMP 的数据字段中放置了 8 个字节,其中包含原始应用层触发的端口。这也在同一本书的 ping 程序下进行了解释。

这同样适用于低层协议,例如 ARP/RARP。

  • @holgac,我听到一位斯坦福大学教授添加了一个警告“严格来说它是一个传输层协议,但它确实是为网络层服务的”,但我会接受创建者的话;再加上以下内容更有意义,并且可能也适合您。[RFC792](https://tools.ietf.org/html/rfc792),概述 ICMP 协议的文档:_“ICMP,使用 IP 的基本支持,就好像它是更高级别的协议一样,**但是,ICMP实际上是IP的一个组成部分,并且必须由每个IP模块来实现_"**。我倾向于相信,因为每个 IP 模块都需要它,所以它是一个网络协议。 (3认同)
  • “Linux 内核网络”一书(在 ch3 中)说 ICMP 是第 4 层(传输层)协议。不过,在这个困境中,我会站在史蒂文斯一边。http://www.amazon.com/Linux-Kernel-Networking-Implementation-Experts/dp/143026196X (2认同)