当某些协议直接通过IP时,为什么需要UDP呢?

问题描述 投票:3回答:2

据我所知,TCP是拥塞控制和错误恢复或从一个节点到另一个节点的可靠信息传递所必需的,并且它不是传递信息的最快协议。

一些路由协议(如EIGRP和OSPF)直接在IP之上运行。甚至ICMP也直接通过IP。

为什么甚至需要UDP呢?是否只需要开发人员/程序员可以根据数据包中包含的目标端口号识别应该将入站数据包发送到哪个应用程序?

如果是这种情况,那么当没有端口号信息时,如何从直接在IP之上的协议收集的信息发送到适当的进程?

为什么通过UDP发送语音和视频?为什么不直接通过IP?

(请注意,我完全理解TCP的用例。我不是在问为什么使用UDP over TCP,反之亦然。我在问为什么要使用UDP以及一些协议如何直接使用IP层。是什么附加优势或者UDP over IP的目的?)

tcp udp ip
2个回答
1
投票

首先,IP和UDP是不同层上的协议,当UDP是transport layer时,IP定义为Internet层。引入了层以简化网络协议架构并分离关注点。应用层协议应该基于传输层(有一些例外)。

最流行的传输协议(在IP网络中)是UDP和TCP。虽然TCP功能丰富,但有许多权衡,UDP非常简单,但提供了很大的自由度,因此通常是其他协议的基础。

UDP的主要特性是多路复用:允许多个协议实例(也称为套接字)在同一节点上共存的端口。这意味着通过IP而不是UDP实现自己的协议,您将无法在同一台计算机上拥有多个协议实例,或者您必须自己实现多路复用。

还有其他功能,如细分和校验和。这些功能不是强制性的。

正如在另一个答案中提到的那样,有许多中间件,如路由器,NAT和防火墙,可以破坏自定义“正确IP”协议的想法,但它更像是附带损害而不是UDP的功能。


2
投票

就UDP为什么有用(比为什么需要UDP)而言,你的问题更有意义。

UDP是Internet Assigned Numbers Authority公认的协议。如果您想编写基于数据报的网络协议并且想要更好地使用Internet设备,UDP可能非常有用。

路由器可以有规则来执行诸如删除任何无意义的数据包之类的操作。因此,如果您尝试使用一个或多个路由器分隔的主机之间使用未分配的IP协议号发送数据包,则数据包可能永远不会按您的意图传送。来自无法识别的UDP协议的数据包也会发生同样的情况,但至少要少一个人担心您的数据包是否可以通过。

Internet端点(如主机)也可以进行类似的过滤。如果您想编写自己的基于数据报的协议并使用典型的主机操作系统,如果您不想将其作为自己的内核扩展,那么您更有可能需要将软件编写为特权进程IP协议(比如果你将使用UDP)。

希望这个答案很有用!

© www.soinside.com 2019 - 2024. All rights reserved.