2013-10-07 72 views
11

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

回答

14

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

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

希望这会有所帮助!

+3

单词'典型'不属于这个答案。要么是或者不是。 – EJP

+0

@ EJP-这是一个很好的观点。更新! – templatetypedef

3

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

更新:

显然,这听起来有点混乱,以飨读者,所以这里是从TCP/IP详解快照由理查德·史蒂文斯解释概念和意图。

从书中引用。

“定位标记ICMP和IGMP始终是一个 挑战。此前,我们发现他们在同一层IP协议的复选框,因为他们真的 是附属品IP。但在这里,我们向他们展示上述IP,重申 ICMP报文,IGMP报文封装在IP数据报”

TCP/IP Layers from RS - TCP/IP Illustrated

教学的概念,即‘一些协议和应用程序’工作方式不同来自每层负责不同任务的标准概念(传输是端到端的,其中网络正在跳跃跳跃)是艰难的并且需要时间来消化。

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

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

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

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

+0

究竟是什么时候“经常与传输层混淆”?除了这个问题之外,我从未见过它。它没有传输层的事实并不是传输层中的任何证据。否则,一切都必须在传输层。你只是在这里增加了混乱。 – EJP

+1

首先,通过OSI模式学习,我看到学生们总是假设某种传输层。没有看到这一点使他们认为ICMP自己处理传输。首先要了解的是,总是有一个端口来识别应用程序,然后了解没有端口的异常是新的。即使是Stevens LISTS ICMP的圣经,在一些混合的领域里也表明它就像一种意义上的交通工具,另一种意义上的交通网络。我脑海中有一张朦胧的照片。会在这里引用。 – fayyazkl

+0

此外,没有看到是什么让你觉得它很混乱。我解释了两个最常见的ICMP工作如何在学生的心目中始终是一个问题 – fayyazkl