跳至主要內容

5. TCP 和 UDP


5. TCP 和 UDP

在互联网数据传输中,两个基本协议占主导地位:TCP(传输控制协议)UDP(用户数据报协议)。理解这两个传输层协议对于软件开发人员至关重要,因为它们构成了互联网数据通信的基础。本文将深入探讨这两种协议,重点介绍它们的特性、区别,以及何时使用它们。

TCP:传输控制协议

TCP 是一种面向连接的协议,旨在确保设备之间的可靠通信。它运行在互联网协议(IP)之上,属于更广泛的 TCP/IP 套件,通常被称为互联网协议套件。以下是 TCP 的主要特点和功能:

1. 可靠性和数据完整性

TCP 以其可靠性而闻名。它确保数据包按正确顺序传输且无误差。假设你发送了多个数据包:

+---+  +---+  +---+  +---+
| 1 |  | 2 |  | 3 |  | 4 |
+---+  +---+  +---+  +---+

TCP 负责确保即使数据包顺序错误,它也能将它们正确重组:

+---+  +---+  +---+  +---+
| 1 |  | 3 |  | 2 |  | 4 |
+---+  +---+  +---+  +---+

TCP 会重组这些包,恢复正确的顺序:

+---+  +---+  +---+  +---+
| 1 |  | 2 |  | 3 |  | 4 |
+---+  +---+  +---+  +---+

2. 错误检测与重传

由于网络本身的不可靠性,数据包在传输过程中可能会丢失。TCP 通过实施错误检测和丢失数据包的重传来减少这种情况:

原始传输:
+---+  +---+  +---+  +---+
| 1 |  | 2 |  | 3 |  | 4 |
+---+  +---+  +---+  +---+

接收到的包:
+---+        +---+  +---+
| 1 |        | 3 |  | 4 |
+---+        +---+  +---+

在上面的例子中,包 2 丢失了,TCP 会检测到这一点并请求重传丢失的包:

重传包:
+---+
| 2 |
+---+

3. 连接建立:三次握手

在传输数据之前,TCP 需要在客户端和服务器之间建立连接,这个过程称为三次握手

  1. SYN:客户端发送同步(SYN)包到服务器。

    客户端 -> 服务器: [SYN]
    
  2. SYN-ACK:服务器通过发送 SYN-ACK 包进行确认。

    服务器 -> 客户端: [SYN, ACK]
    
  3. ACK:客户端响应确认(ACK),完成连接建立。

    客户端 -> 服务器: [ACK]
    

4. 开销与延迟

使得 TCP 可靠的特性也带来了开销。连接的建立、数据排序和错误检查增加了延迟并消耗了额外带宽。对于需要可靠性的应用,如网页浏览(HTTP)、电子邮件(SMTP)和文件传输,这种权衡是可以接受的。

UDP:用户数据报协议

UDP 是一种简单的、无连接的协议,提供了一种快速但不可靠的数据传输方式。它不保证数据包的交付、顺序或错误检测,适用于速度比可靠性更重要的场景。

1. 无需建立连接

与 TCP 不同,UDP 不需要在客户端和服务器之间建立连接。数据包(称为数据报)是独立发送的,无法保证顺序和交付:

+---+  +---+  +---+  +---+
| 1 |  | 2 |  | 3 |  | 4 |
+---+  +---+  +---+  +---+

发送:
+---+  +---+  +---+  +---+
| 1 |  | 2 |  | 3 |  | 4 |
+---+  +---+  +---+  +---+

接收:
+---+        +---+  +---+
| 1 |        | 3 |  | 4 |
+---+        +---+  +---+

在这个例子中,包 2 丢失了,且不会被重传。

2. 应用场景

UDP 通常用于实时应用,其中速度至关重要,且可以接受一些数据丢失:

  • 直播流媒体:对于实时视频或音频流,丢失一两帧是可以接受的,因为重点是保持实时传输。
  • 在线游戏:在快速节奏的多人游戏中,数据到达的速度比顺序更重要。

3. 低开销

由于没有连接建立和重传机制,UDP 的开销远低于 TCP。因此,它的速度更快,但代价是可能会丢失数据。

TCP 和 UDP 的主要区别

以下是 TCP 和 UDP 的简明对比:

特性TCPUDP
连接类型面向连接无连接
可靠性保证(错误检查、重传)不保证
顺序保证不保证
速度由于开销较大,速度较慢较快,开销较小
适用场景网页浏览、电子邮件、文件传输直播流媒体、在线游戏、DNS