我正在观看有关网络的视频讲座,讲师提到 ICMP 作为传输层协议。然而,谷歌搜索显示各种论坛将其描述为网络层协议。这让我很困惑。有人可以澄清吗?
2 回答
传输层协议关注从端到端发送数据并确保(或明确不确保)可靠性。TCP 用于将数据从一台计算机发送到另一台计算机,并包含确保数据正确传输所需的逻辑,而 UDP 用于将数据从一台计算机发送到另一台计算机,同时希望获得可靠性。
ICMP 真的不这样做。它的工作是帮助路由器弄清楚互联网的形状以及使用不同协议发送数据包的方向。因此,它被认为是一种网络层协议,因为它的工作是确保将数据路由到正确的位置,但实际上并不路由数据。
希望这可以帮助!
毫无疑问,它是一个网络层协议。它经常与传输层混淆的原因是 ICMP 在没有任何传输层的情况下工作。例如 ping 或 traceroute 没有明确定义的端口。相反,每台机器的 tcp/ip 堆栈负责处理和响应传入的 ICMP 消息(而不是像所有其他应用程序那样查找端口并传递给相应的应用程序)。
更新:
显然这对读者来说听起来很混乱,所以这里是理查德史蒂文斯解释概念和意图的 TCP/IP 插图的快照。
引自书中。
“定位标记为 ICMP 和 IGMP 的协议框始终是一个挑战。之前,我们将它们显示在与 IP 相同的层,因为它们确实是 IP 的附属物。但这里我们将它们显示在 IP 之上,以重申 ICMP 消息和 IGMP 消息封装在 IP 数据报中”
教授“某些协议和应用程序”的工作方式与每一层负责不同任务的标准概念(传输是端到端的,而网络是跳到跳的)的工作方式不同的概念是困难的并且需要时间来消化。
下一个最关键的要学习的是,
即使您使用多个say 控制台从同一台机器ping 到另一台机器,它仍然能够跟踪所有个人,即所谓的连接(只是关联消息交换,否则没有像tcp 这样的连接)。
以上是如何完成的,是特定于操作系统的。Linux 堆栈在 ICMP 的数据字段中放置了 8 个字节,其中包含原始应用层触发的端口。这也在同一本书的 ping 程序下进行了解释。
这同样适用于低层协议,例如 ARP/RARP。