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

时间:2017-12-21 19:48:02

标签: tcp udp ip

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:2)

您的问题在为什么UDP有用方面更有意义(为什么需要UDP )。

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

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

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

希望这个答案很有用!

答案 1 :(得分:1)

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

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

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

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

正如在另一个答案中提到的那样,很多中间件,如路由器,NAT和防火墙,可能会破坏自定义"对IP"协议,但它更像是附带损害而不是UDP的特征。