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