5

对不起,这是一个愚蠢的问题。

传输层的功能是可靠地传递消息。UDP本质上是不可靠的,那我们为什么要在传输层使用呢?

谢谢

编辑:为了澄清,我已经阅读了 Wiki 和其他来源。我的问题是

UDP 是不可靠的(我知道为什么和优点以及使用它的位置等),为什么不在其他层使用它(UDP),而不是意味着可靠性的传输层。

4

4 回答 4

13

有时,数据的快速发送和无停顿比流的可靠性更重要。DNS 使用 UDP 是因为 DNS 服务器和客户端之间的事务仅由一个数据包组成。如果数据包丢失,它将根据客户端的请求重新传输。

同样,流视频经常使用 UDP 作为传输协议,因为偶尔丢失数据包是可以接受的。最好是图像质量因丢包而受损,而不是视频流因 TCP 同步而遭受抖动或暂停(滞后)。

游戏也经常使用 UDP,牺牲引擎准确性以提高速度/用户体验。

这些以及更多示例可以在维基百科 文章的相关部分中找到。

编辑

UDP 用于传输层,因为它是传输层协议。它提供“为应用程序提供端到端通信服务”(RFC1122)。

可靠性服务对于传输层协议是可选的。

于 2012-08-14T02:12:11.110 回答
3

...而不是意味着可靠性的传输层

“可靠性”不止一个维度。 有趣的是,UDP是可靠的,因为它提供了一个校验和来防止损坏。

像 TCP 这样的流协议会给延迟敏感的应用程序带来问题。对于延迟敏感的应用程序,UDP 的自然限制(在拥塞期间减少流量)是一个巨大的福音。

为什么不在其他层使用它(UDP)

IP 数据报被设计为足够小以进行下一跳传输。UDP 数据报可以跨越 IP 数据报,因此有一些附加值。但是,如果 TCP 是 UDP 之上的一层,它将受到 UDP 语义的限制(TCP 端口绑定到连接,UDP 数据报则没有)。

于 2012-08-14T02:29:40.633 回答
2

在传输层使用 UDP 的原因是因为这些层的设置方式。UDP本质上是一种将数据从A点传输到B点的协议,而不是作为应用程序或硬件层。

在传输层没有可靠性假设,而是假设 UDP 是一种传输数据的协议。在7层组网方式下,属于网络层和会话层之间的接口。传输层的名称只是说明了它的作用。有关 OSI 模型的更多信息,请参阅wikipedia 。

TLDR UDP 位于传输层的原因是因为它是一种数据传输协议,因此位于传输层。所有处理数据传输的协议都属于这一类

于 2012-08-14T02:21:11.713 回答
0

传输层类

Class 0 - Simple class
Class 1 - Basic error recovery class
Class 2 - Multiplexing class
Class 3 - Error Recovery and multiplexing class
Class 4 - Error detection and recovery class
于 2021-07-14T07:55:01.673 回答