抱歉什么是愚蠢的问题。
传输层的功能是可靠的消息传递。 UDP本质上是不可靠的,为什么我们在传输层使用它呢?
由于
编辑:只是为了澄清,我已经阅读了Wiki和其他来源。我的问题是
UDP是不可靠的(我知道为什么以及它的优点和使用位置等),为什么不在其他层使用它(UDP),而不是使用暗示可靠性的传输层。
答案 0 :(得分:10)
有时更重要的是,数据快速发送且没有暂停,而不是流可靠。 DNS使用UDP,因为DNS服务器和客户端之间的事务每个只包含一个数据包。如果数据包丢失,将根据客户端的请求重新传输。
类似地,流视频通常使用UDP作为传输协议,因为偶尔丢失数据包是可以接受的。优选的是,由于丢失分组而导致图像质量受损,而不是视频流由于TCP同步而遭受抖动或暂停(滞后)。
游戏也经常使用UDP,牺牲引擎精度来提高速度/用户体验。
的相关部分找到修改强>
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