Skip to content
扫码联系作者

TCP和UDP的区别

核心概念

TCP

TCP(Transport Control Protocol)即传输控制协议:是一种面向连接的、可靠的、基于字节流的传输层通信协议,由 IETF 的 RFC 793 定义。在简化的计算机网络 OSI 模型中,它完成第四层传输层所指定的功能。

UDP

UDP(User Datagram Protocol)即用户数据报协议:是一个简单的面向资料包的通信协议,位于 OSI 模型的传输层。该协议由 David P. Reed 在 1980 年设计且在 RFC 768 中被规范。

连接性和握手

TCP

连接性:

  • TCP 是面向连接的协议,通信前需要建立连接,通信结束后需要断开连接。
  • 连接建立和断开过程比较复杂,涉及到三次握手和四次挥手。

握手过程:

  • 三次握手:
    1. 客户端发送一个带有 SYN(同步)标志的数据包,请求建立连接。
    2. 服务器收到后,回复一个带有 SYN 和 ACK(确认)标志的数据包,表示已收到请求并同意建立连接。
    3. 客户端再次回复一个带有 ACK 标志的数据包,确认服务器的回复。连接建立。
  • 四次挥手:
    1. 客户端发送一个带有 FIN(结束)标志的数据包,表示不再发送数据。
    2. 服务器收到后,回复一个带有 ACK 标志的数据包,确认客户端的 FIN。
    3. 服务器发送一个带有 FIN 标志的数据包,表示不再发送数据。
    4. 客户端收到后,发送一个带有 ACK 标志的数据包,确认服务器的 FIN。连接断开。

UDP

连接性:

  • UDP 是无连接的协议,通信前不需要建立连接,通信结束后也不需要断开连接。

握手过程:

  • 由于 UDP 是无连接的,因此没有握手过程。发送方可以直接将数据报文发送给接收方,而不需要进行连接建立操作。
  • 接收方收到数据后,也不会发送确认回复。

数据传输和可靠性

TCP

数据传输:

  • 数据被划分为数据段,每个数据段包含序号和确认号信息,用于保证数据的有序性和可靠性。
  • 发送方按照序号发送数据段,接收方根据序号进行数据重组,确保数据有序。
  • 数据被拆分成数据段后,TCP 头部会包含序号、确认号、窗口大小等字段。

可靠性:

  • TCP 提供可靠的数据传输,通过序号、确认和重传机制保证数据的可靠性。
    • 如果数据段丢失、损坏或乱序,TCP 会自动触发重传机制,确保数据的完整性和顺序性。
    • 接收方会发送确认来告知发送方数据已经接收。

UDP

数据传输:

  • 数据被划分为数据报文(Datagrams),每个数据报文是一个完整的、独立的数据单元。
  • 数据报文之间相互独立,没有序号和确认机制,因此不保证数据的有序性。

可靠性:

  • UDP 不提供可靠性保证,不会自动进行数据重传。
  • 如果数据报文丢失或损坏,接收方不会自动请求发送方重发数据。
  • 应用层需要自行处理数据的确认和重传,如果需要。

​延迟和效率

TCP

延迟:

  • TCP 通常会引入较高的延迟,因为它需要进行握手、确认、重传等机制,以保证数据的可靠性和有序性。
  • 三次握手和四次挥手过程以及拥塞控制机制等,都可能导致数据传输的延迟增加。

效率:

  • TCP 在保证可靠性和有序性的同时,会引入一些额外的开销,如序号、确认、窗口大小等字段,以及握手和挥手的数据交换。
  • 流量控制和拥塞控制机制也会影响数据发送的速率,可能降低效率。

UDP

延迟:

  • UDP 通常具有较低的延迟,因为它没有复杂的连接建立和断开过程,也没有确认和重传机制。
  • 数据可以直接发送,减少了额外的等待时间。

效率:

  • UDP 具有较高的效率,因为它没有确认、重传、流量控制和拥塞控制机制。
  • 数据可以更快速地发送,适用于对实时性要求较高的应用。

应用场景

TCP

  1. 网页浏览:TCP 适用于网页浏览,因为它能够保证数据的可靠性和有序性。在浏览网页时,确保页面的各个元素按正确顺序加载很重要。

  2. 文件传输:TCP 适用于大文件的传输,如文件下载和上传。它的可靠性保证了文件的完整性,重传机制保证了数据不会丢失。

  3. 电子邮件:由于电子邮件的内容往往很重要,需要确保数据的可靠性和有序性。因此,TCP 在电子邮件的传输中得到广泛应用。

  4. 数据库交互:数据库交互需要可靠性,确保查询和更新操作按顺序执行。TCP 提供了保证数据完整性的机制。

  5. 远程登录: 在远程登录和管理系统时,确保命令的顺序和完整性是关键的。TCP 适用于这种场景。

UDP

  1. 实时音视频传输:UDP 适用于实时音视频传输,如在线视频会议、音频通话和实时直播。在这些应用中,实时性和低延迟更为重要,而丢失少量数据是可以接受的。

  2. 在线游戏:在线游戏需要快速的数据传输和实时性,UDP 适合用于传输游戏数据。游戏中的数据包传输速度比可靠性更重要。

  3. DNS:DNS(Domain Name System)解析域名时通常使用UDP。虽然DNS查询也可以使用TCP,但大多数情况下使用UDP以减少延迟。

  4. 物联网设备:物联网设备通常需要快速的数据传输和实时性,而且可以容忍一些数据丢失。因此,UDP 适用于与物联网设备通信。

  5. SNMP:简单网络管理协议(SNMP)用于网络设备的管理和监控。UDP 在这种情况下用于传输SNMP消息。

头部开销

TCP

  • TCP 头部包含以下字段:

    • 源端口号(16位)
    • 目标端口号(16位)
    • 序号(32位)
    • 确认号(32位)
    • 数据偏移(4位)
    • 保留位(6位)
    • 控制标志位(6位)
    • 窗口大小(16位)
    • 校验和(16位)
    • 紧急指针(16位)
    • 选项(可变长度)
    • 填充(可变长度)
  • TCP 头部总长度不固定,最少为20字节,最多为60字节(当选项和填充都存在时)。

TCP 头部开销相对较大,因为它包含了多个字段,如序号、确认号、窗口大小等,以保证数据的可靠性和有序性。此外,TCP 还支持选项和填充字段,使头部长度变化。

UDP

  • UDP 头部包含以下字段:

    • 源端口号(16位)
    • 目标端口号(16位)
    • 长度(16位)
    • 校验和(16位)
  • UDP 头部固定长度为8字节。

UDP 头部开销较小,仅包含基本的源端口、目标端口、长度和校验和字段。它没有连接建立、确认和重传机制,因此头部较为简单。