TCP 和 UDP 是网络传输层最核心的两个协议,它们之间的区别是网络编程的基础。
简单来说,它们像是两种不同风格的快递服务:
md6rux0n.png

TCP (Transmission Control Protocol): 像顺丰或FedEx的签约快递 📦。

先联系:寄件前,快递员会先给你打电话确认地址和时间(建立连接)。
保送达:有签收回执,保证包裹一定送到你手上(可靠)。
按顺序:如果你寄了三个包裹,会按1、2、3的顺序送达(有序)。
速度慢:因为要确认、要签收、要排序,流程多,所以速度相对较慢,开销也大。
UDP (User Datagram Protocol): 像中通、圆通 ✉️。

直接寄:写上地址就直接扔进邮筒,不用提前联系(无连接)。
不保证:信件可能会在路上丢失,你也不知道对方是否收到(不可靠)。
可能乱序:你连续寄三封信,对方收到的顺序可能是2、1、3(无序)。
速度快:流程简单,没有额外的确认环节,所以速度非常快,开销小。
核心区别详解
它们都位于网络的传输层,都使用端口号来识别不同的应用程序,但它们的设计哲学和工作方式截然不同。

  1. 连接性:面向连接 vs. 无连接
    TCP (面向连接): 在发送数据之前,必须先通过“三次握手”与对方建立一个稳定的连接。数据传输结束后,还需要通过“四次挥手”来断开连接。整个过程像打电话,需要先拨号、通话、再挂机。
    UDP (无连接): 发送数据前不需要建立任何连接,直接把数据打包(称为数据报,Datagram)就往外扔。不管对方是否准备好,是否在线,直接发送。这被称为“即发即忘”。
  2. 可靠性:可靠 vs. 不可靠
    TCP (可靠): TCP 提供了强大的可靠性保障机制。
    确认与重传: 接收方每收到一个数据包,都会发送一个确认(ACK)信息。如果发送方在一定时间内没收到确认,就会重新发送该数据包。
    数据校验: 通过校验和检查数据在传输过程中是否损坏。
    流量控制: 控制发送方的发送速率,防止过快的数据淹没接收方。
    拥塞控制: 当网络拥堵时,会主动减慢发送速率,防止网络崩溃。
    UDP (不可靠): UDP 不提供任何可靠性保证。它只负责把数据尽可能快地发出去,但不保证数据能否到达、何时到达、是否完整。可靠性需要由上层的应用程序自己来保障。
  3. 有序性:有序 vs. 无序
    TCP (有序): TCP 给每个数据包都编了号(序列号),接收方会根据序号对数据包进行排序,确保应用程序读到的数据流是完整且有序的。
    UDP (无序): UDP 不保证数据包的顺序,它们到达的顺序可能与发送顺序完全不同。
  4. 速度与效率:慢 vs. 快
    TCP (较慢): 因为需要建立连接、发送确认、处理排序、进行流量和拥塞控制等,这些可靠性机制带来了额外的延迟和系统开销。
    UDP (非常快): 没有这些复杂的控制逻辑,协议本身非常轻量,因此传输延迟低,效率高。
  5. 头部开销:大 vs. 小
    TCP: 头部较大,至少需要 20字节,包含了序列号、确认号、窗口大小等大量控制信息。
    UDP: 头部非常小,固定为 8字节,只包含源/目的端口、长度和校验和。
    特性
    TCP 适用场景 要求高可靠性:网页(HTTP)、文件传输(FTP)、邮件(SMTP)
    UDP 要求低延迟、可容忍丢包:直播、视频通话、在线游戏、DNS
    何时选择?
    选择 TCP: 当数据完整性和可靠性至关重要,不容许任何差错时。例如,你下载一个文件,绝不能缺少任何一个字节。
    选择 UDP: 当实时性和速度的要求高于一切,并且可以容忍少量数据丢失时。例如,在视频通话中,丢失一两帧画面影响不大,但如果为了等一个丢失的包而导致画面卡顿,是无法接受的。
    ————————————————
最后修改:2025 年 07 月 17 日
如果觉得我的文章对你有用,请随意赞赏