据我所知,UDP不使用路径MTU来避免TCP所做的碎片。我试图找出这个特殊设计的理由。
TCP需要避免碎片,因为即使只丢弃一个碎片,它也必须重新传输整个数据报。相反,UDP不需要重新传输数据报,而是由应用层来确保完整性。
总之,片段会减慢TCP传输协议,但不会减慢UDP传输协议。
问题是,对于需要完整性的通信,无论是采用自然保证完整性的TCP,还是在UDP上开发应用层重传协议,如果没有确认,它将需要重新发送整个数据报。然后,碎片将减慢UDP上的应用层重新传输协议,就像TCP一样。
我的推理出了什么问题?
答案 0 :(得分:1)
UDP是一种数据报协议,其中每个数据包意味着单个实体,独立于其他数据包(UDP未检测到重复,重新排序等)。 TCP代替是一种流协议,即整个传输由一个类似于大文件的单个非结构化八位字节流组成。为了使该流的传输更有效,检测连接的MTU并尝试主要发送最大化该MTU的分组是有意义的,从而减少了传输的开销。为了进一步减少开销,TCP将多个连续写入合并为尽可能少的数据包(具有最大MTU)。
UDP反而无法自行避免碎片,因为它按原样传输数据报,即数据报边界由数据包边界决定。减少开销的任何类型的优化都必须由应用程序本身完成。
因此,TCP最适合需要保证和有序传输以及有效使用带宽等功能的应用。不幸的是,这些功能具有类似的慢速连接设置,更高的延迟(在丢包情况下)等缺点。但是有些应用程序不需要所有好的部件但必须避免坏部件。例如,实时音频和视频可以处理分组丢失但是需要低延迟,即,如果所有数据都到达但是它们必须快速到达并不重要。在这些情况下,更简单的UDP协议更适合。
答案 1 :(得分:0)