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

Tcp 当某些协议直接通过IP时,为什么需要UDP?,tcp,udp,ip,Tcp,Udp,Ip,据我所知,TCP是拥塞控制、错误恢复或从一个节点到另一个节点的可靠信息传递所必需的,它不是传递信息最快的协议 一些路由协议,如EIGRP和OSPF,直接位于IP之上。甚至ICMP也直接通过IP传输 为什么甚至需要UDP?是否只要求开发人员/程序员根据数据包中包含的目标端口号确定入站数据包应发送到哪个应用程序 如果是这种情况,那么在没有端口号信息的情况下,如何将从直接位于IP之上的协议收集的信息发送到相应的进程 为什么通过UDP发送语音和视频?为什么不直接通过IP (请注意,我确实完全理解TCP的

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

一些路由协议,如EIGRP和OSPF,直接位于IP之上。甚至ICMP也直接通过IP传输

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

如果是这种情况,那么在没有端口号信息的情况下,如何将从直接位于IP之上的协议收集的信息发送到相应的进程

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


(请注意,我确实完全理解TCP的使用案例。我不是问为什么通过TCP使用UDP,反之亦然。我是问为什么使用UDP,以及一些协议如何直接使用IP层。通过IP使用UDP的附加优势或用途是什么?

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

UDP是一种由用户识别的协议。如果您希望编写基于数据报的网络协议,并且希望更好地使用Internet设备,则UDP非常有用

路由器可以有规则来做一些事情,比如丢弃任何没有意义的数据包。因此,如果您尝试在由一个或多个路由器分隔的主机之间使用未分配的IP协议号发送数据包,那么数据包可能永远不会按照您的预期发送。来自无法识别的UDP协议的数据包也可能发生同样的情况,但这至少少了一个担心数据包能否通过的门

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


希望这个答案有用

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

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

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

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


正如在另一个答案中所提到的,有很多中间件,如路由器、NAT和防火墙,它们可能会破坏自定义“right-over-IP”协议的想法,但这更像是一种附带损害,而不是UDP的功能。

在其他协议中没有“进程”,因此不需要端口号。协议由IP堆栈本身使用。应用程序进程需要具有明确定义语义的面向端口的用户数据报协议。