Tcp 为什么UDP不使用路径MTU?

Tcp 为什么UDP不使用路径MTU?,tcp,udp,tcp-ip,Tcp,Udp,Tcp Ip,据我所知,UDP不使用路径MTU来避免碎片,而TCP则使用路径MTU来避免碎片。我正试图找出这个特殊设计的原因 TCP需要避免碎片,因为即使只丢弃一个碎片,它也必须重新传输整个数据报。相反,UDP不需要重新传输数据报,由应用层来确保完整性 总之,fragment会减慢TCP传输协议的速度,但不会减慢UDP传输协议的速度 问题来了,对于需要完整性的通信,无论是采用本质上保证完整性的TCP,还是在UDP上开发应用层重传协议,如果没有确认,都需要重新发送整个数据报。然后,碎片将减慢UDP上的应用层重传

据我所知,UDP不使用路径MTU来避免碎片,而TCP则使用路径MTU来避免碎片。我正试图找出这个特殊设计的原因

TCP需要避免碎片,因为即使只丢弃一个碎片,它也必须重新传输整个数据报。相反,UDP不需要重新传输数据报,由应用层来确保完整性

总之,fragment会减慢TCP传输协议的速度,但不会减慢UDP传输协议的速度

问题来了,对于需要完整性的通信,无论是采用本质上保证完整性的TCP,还是在UDP上开发应用层重传协议,如果没有确认,都需要重新发送整个数据报。然后,碎片将减慢UDP上的应用层重传协议,就像TCP一样


我的推理有什么问题?

UDP是一种数据报协议,其中每个数据包表示单个实体,独立于其他数据包(UDP未检测到重复、重新排序等)。TCP是一种流协议,即整个传输由一个类似于大文件的非结构化八位组流组成。为了使此流的传输更有效,有必要检测连接的MTU,并尝试发送最大化此MTU的大部分数据包,从而减少传输开销。为了进一步减少开销,TCP将把多个连续写入合并成尽可能少的数据包(最大MTU)

UDP本身无法避免碎片,因为它按原样传输数据报,即数据报边界由数据包边界决定。任何减少开销的优化都必须由应用程序本身完成

因此,TCP最适合于需要保证有序传输和高效使用带宽等特性的应用。不幸的是,这些功能都有缺点,比如连接设置速度相当慢,延迟更高(在数据包丢失的情况下)等等。但是有些应用程序不需要所有好的部分,但必须避免坏的部分。例如,实时音频和视频可以处理数据包丢失,但需要较低的延迟,即所有数据是否到达并不重要,但它们必须快速到达。在这些情况下,更简单的UDP协议更适合

  • 因为它对MTU没有任何用处。这是一个数据报协议
  • 因为没有路。这是一个无连接协议

  • 不清楚你的建议是什么。UDP实现将如何处理路径MTU?假设路径MTU为1500字节,应用程序尝试发送1600字节的数据报。目前,数据报被IP层分割。你的建议是什么?UDP有什么不同之处?