为什么UDP协议不支持TCP协议之类的流?
其他人给出了非常好的答案,但我认为类比可能会有所帮助.
想象一下,UDP有点像邮递员 - 在人们的门口放置信件,但从不检查他们是否真正看到了这封信,或者该人甚至存在.这很便宜,适用于发送给很多人的垃圾邮件(读取:广播包).
TCP更像是一个信使,他会敲门并亲自传递信息.如果你不在,他会回来试试一下.最终,你会收到消息 - 或者信使会知道他没有交付信息.您还可以通过信使向发件人发送邮件.
不要试图在我的类比中过多地阅读 - 它不像TCP中实际上只有一个"信使" - 但它可能有助于思考事物.特别是,想象一下你要向某人发送一系列信件,他们必须按顺序阅读 - 这对于邮递员来说无法工作(可靠),因为你可能会找到10个字母放在你的门垫上,不知道是什么命令来阅读它们.邮递员也可能在途中放弃了一些 - 而且没有人会知道.这不是可靠流的合适基础.
(另一方面,它是报纸发行的一个很好的模型.如果你碰巧错过了一些,这不是问题 - 你仍然会得到后者,那时你会更有趣.这就是为什么一些流媒体媒体解决方案使用UDP,尽管它没有提供可靠的实际流.)
好 ...
UDP是一种数据报协议.它旨在让应用程序发送不变数据报,而不需要高级协议来控制发生的事情.
"流"是一个高级概念,因此UDP无法支持.
许多应用程序最终在UDP上重新实现TCP的部分,以获得所需的延迟,顺序独立性,错误处理和带宽的特定混合.