Networking 流和UDP

Networking 流和UDP,networking,Networking,为什么UDP协议不像TCP协议那样支持流?那么 UDP是一种数据报协议。它的目的是让应用程序发送双数据报,而不需要高级协议来控制发生的事情 “流”是一个高级概念,因此UDP不可能支持它 许多应用程序最终在UDP上重新实现TCP的一部分,以获得它们所需的延迟、顺序独立性、错误处理和带宽的特殊混合。其他应用程序给出了非常好的答案,但我认为类比可能会有所帮助 想象一下UDP有点像邮递员——把信放进人们的门,但从不检查他们是否真的看到了信,或者这个人是否存在。这是便宜的,并且对于发送给许多人的垃圾邮件(

为什么UDP协议不像TCP协议那样支持流?

那么

UDP是一种数据报协议。它的目的是让应用程序发送双数据报,而不需要高级协议来控制发生的事情

“流”是一个高级概念,因此UDP不可能支持它


许多应用程序最终在UDP上重新实现TCP的一部分,以获得它们所需的延迟、顺序独立性、错误处理和带宽的特殊混合。

其他应用程序给出了非常好的答案,但我认为类比可能会有所帮助

想象一下UDP有点像邮递员——把信放进人们的门,但从不检查他们是否真的看到了信,或者这个人是否存在。这是便宜的,并且对于发送给许多人的垃圾邮件(读:广播包)效果很好

TCP更像是一个信使,他会敲你的门,亲自传递信息。如果你不在,他会回来试一下。最终,你会收到消息——否则信使会知道他还没有发送消息。您还可以通过messenger将消息发送回发件人

不要试图过多地理解我的类比——TCP中实际上没有一个“messenger”——但这可能有助于思考问题。特别是,想象一下,你给某人发送了一系列信件,他们必须按顺序阅读——这对邮递员来说是不可能(可靠的)工作的,因为你可能会发现有10封信放在你的门垫上,不知道以什么顺序阅读。邮递员可能在路上也掉了一些——没有人会知道。这不是可靠流的合适基础


(另一方面,这是一个很好的报纸发行模式。如果你碰巧错过了一些,这不是问题-你仍然会得到后面的,到那时你会更感兴趣。这就是为什么一些流媒体解决方案使用UDP,尽管它没有提供可靠的实际流。)

原因很简单:它没有,因为它不是,因为这不是协议的设计目标之一

使UDP作为流工作意味着添加TCP几乎所有的功能。你会得到两个完全相同的协议。重点是什么


UDP本来是最小的轻量级协议。它是对TCP的补充。

如果将“流”定义为IP(&L4)头的5元组,UDP确实支持流。我猜您要传达的意思是,UDP是否支持连接(在每个流中,也就是5元组,被视为逻辑连接),以及属于该流的数据包的传递可靠性或多或少得到保证。然而,在UDP的情况下,尽管数据包是流(5元组)的一部分,但没有努力确保可靠性,而是依赖底层网络层进行适当的传递。如果失败了,就这样吧。 乔恩·斯基特的类比很有道理