ICMP是传输层协议吗?

时间:2013-10-07 06:48:03

标签: networking icmp

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

2 个答案:

答案 0 :(得分:16)

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

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

希望这有帮助!

答案 1 :(得分:4)

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

<强>更新

显然这对读者来说听起来很混乱,所以这里是理查德史蒂文斯的TCP / IP Illustrated解释概念和意图的快照。

从书中引用。

  

“定位标有ICMP和IGMP的协议框始终是a   挑战。早些时候,我们将它们显示在与IP相同的层上,因为它们确实存在   是知识产权的附属品。但是在这里我们将它们展示在IP之上,重申一下   ICMP消息和IGMP消息封装在IP数据报“

TCP/IP Layers from RS - TCP/IP Illustrated

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

接下来最关键的一点是,

即使您使用从SAME计算机到另一台计算机的多个控制台进行ping操作,它仍然可以跟踪所有单独的,所谓的连接(仅关联消息交换,否则没有像tcp这样的连接)

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

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