如果UDP不可靠,为什么在传输层使用它

时间:2012-08-14 02:08:00

标签: networking udp tcp-ip osi

抱歉什么是愚蠢的问题。

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

由于

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

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

4 个答案:

答案 0 :(得分:10)

有时更重要的是,数据快速发送且没有暂停,而不是流可靠。 DNS使用UDP,因为DNS服务器和客户端之间的事务每个只包含一个数据包。如果数据包丢失,将根据客户端的请求重新传输。

类似地,流视频通常使用UDP作为传输协议,因为偶尔丢失数据包是可以接受的。优选的是,由于丢失分组而导致图像质量受损,而不是视频流由于TCP同步而遭受抖动或暂停(滞后)。

游戏也经常使用UDP,牺牲引擎精度来提高速度/用户体验。

这些和更多示例可以在wikipedia article.

的相关部分找到

修改

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

传输层协议的可靠性服务可选

答案 1 :(得分:3)

  

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

“可靠性”中有多个维度。值得注意的是,UDP 是可靠的,因为它提供了一个校验和来防止损坏。

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

  

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

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

答案 2 :(得分:2)

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

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

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

答案 3 :(得分: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