据我所知,UDP不使用路径MTU来避免分段,而TCP使用。我正在试着找出这个特殊设计的原因。
TCP需要避免分段,因为即使只有一个分段被丢弃,它也必须重新传输整个数据报。相反,UDP协议不需要重传数据报,而是由应用层来保证数据的完整性。
总之,片段会减慢TCP传输协议的速度,但不会减慢UDP传输协议的速度。
问题来了,对于需要完整性的通信,无论是采用本质上保证完整性的TCP协议,还是开发基于UDP协议的应用层重传协议,如果不使用ACKed协议,都需要重新发送整个数据报。然后,碎片将减慢UDP上的应用层重传协议,就像TCP一样。
我的推理有什么问题?
发布于 2015-02-17 02:32:22
UDP是数据报协议,其中每个分组表示独立于其它分组的单个实体(UDP不检测复制、重新排序等)。相反,TCP是一种流协议,即整个传输由类似于大文件的单个非结构化八位组流组成。为了使该流的传输更有效率,检测连接的MTU并尝试主要发送最大化该MTU的分组是有意义的,从而减少了传输的开销。为了进一步降低开销,TCP将把多个连续写入合并为尽可能少的数据包(具有最大MTU)。
相反,UDP本身无法避免分片,因为它是按原样传输数据报的,即数据报边界由数据包边界决定。任何类型的优化以减少开销都必须由应用程序自己完成。
因此,TCP最适合需要其功能的应用程序,如有保证和有序的传送以及带宽的有效使用。不幸的是,这些特性带来了一些缺点,比如连接建立的速度比较慢,延迟更高(在丢包的情况下)等。但有些应用程序并不需要所有好的部分,但必须避免不好的部分。例如,实时音频和视频可以处理数据包丢失,但需要低延迟,即,如果所有数据都到达,但它们必须快速到达,这并不重要。在这些情况下,更简单的UDP协议更适合。
发布于 2015-02-17 05:33:56
https://stackoverflow.com/questions/28547248
复制相似问题