起源
前二天项目上在核对外部对接服务的五元组列表的时候,有一位客户提问对于同样的服务同时支持tcp和udp二种方式,有什么优点和缺点,应该如何选择?这个问题突然让我愣了一下,确实好久没有“温故”了,相关的概念都有些模糊了,于是,我整理了一下相关的知识体系,秉承分享的精神,重新复习记录如下,供各位同学有需要的时候参考。
从RFC上来看
从RFC上截的图,UDP(RFC768 User Datagram Protocol)只有源端口和目的端口,长度和校验和,接下来就是数据部分。对比TCP(RFC 9293 Transmission Control Protocol),没有相关的面向连接管理的各种控制字段和标志位。所以,UDP的特点就是快,实时性好,但是不保证传输的可靠性和连接性。
RFC768只有3 pages, RFC9293有98 pages.
关键特性对比列表
这个表格对TCP和UDP协议进行了更详细的对比,包括可靠性、连接性、速度、数据包大小以及应用场景,及这两种协议的特点和差异。
TCP(传输控制协议) | UDP(用户数据报协议) | |
---|---|---|
可靠性 | TCP提供可靠的数据传输服务。它使用序列号对发送的数据包进行排序,确保数据按照正确的顺序到达接收端。同时,TCP还通过确认和重传机制确保每个数据包都被成功接收,如果数据包在传输过程中丢失或损坏,TCP会重新发送丢失的数据包。 | UDP不保证可靠传输。它仅仅将数据封装成数据报并发送出去,不会进行数据包的校验和重传。因此,UDP可能会出现数据包的丢失、乱序或重复等问题,适用于对数据传输可靠性要求不高的场景。 |
连接性 | TCP是面向连接的协议。在数据传输之前,发送方和接收方需要建立连接,包括三次握手过程,以建立可靠的通信通道。数据传输结束后,双方还需要通过四次挥手来释放连接。这种连接方式使得TCP能够控制数据传输的流量和速度,并提供更好的数据传输质量。 | UDP是无连接的协议。发送方在发送数据之前不需要与接收方建立连接,直接发送数据报即可。这种方式减少了建立连接的开销和延迟,使得UDP更适用于实时通信或广播通信等场景。然而,由于没有连接状态的管理,UDP无法提供流量控制和拥塞控制等功能。 |
速度 | 由于TCP需要建立连接、进行数据包确认和重传等操作,相对于UDP来说,其传输速度可能会稍慢一些。尤其是在网络状况不佳或数据包丢失率较高的情况下,TCP的传输效率可能会受到较大影响。 | UDP的传输速度较快。由于不需要建立连接和进行复杂的控制操作,UDP的数据报可以直接发送到网络中,减少了传输延迟。这使得UDP适用于对实时性要求较高的应用场景,如视频流传输、实时游戏等。 |
数据包大小 | TCP在传输数据时,会根据网络状况动态调整数据包的大小,以适应不同的网络环境。TCP会将数据分割成较小的数据块进行传输,并在接收端进行组装,以确保数据的完整性和顺序性。 | UDP没有数据包大小的限制。发送方可以根据需要自由设置数据报的大小,并直接发送到网络中。然而,过大的数据包可能会导致网络拥塞或数据包丢失,因此在实际应用中需要根据网络状况和数据传输需求来合理选择数据包的大小。 |
应用场景 | TCP适用于需要可靠、有序的数据传输的场景。例如,文件传输、网页浏览、电子邮件等应用都依赖于TCP协议来确保数据的完整性和顺序性。 | UDP适用于对实时性要求较高,且对数据的完整性要求不高的场景。例如,实时视频流传输、在线游戏、VoIP(网络电话)等应用常使用UDP协议,因为它们更注重传输速度和实时性,而不是数据的完整性。 |
RFC协议原文本链接参考
UDP链接: RFC768
TCP链接: RFC9293