【一文读懂】TCP与UDP协议

embedded/2025/2/19 14:10:31/

TCP协议

概述

TCP(Transmission Control Protocol),即传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议,常用于保证数据可靠、按顺序、无差错地传输。TCP 是互联网协议族(TCP/IP)的核心协议之一,通常与 IP 协议配合使用,负责实现数据在计算机网络中的传输。TCP 是一个传输层协议,位于 OSI 模型的第四层。

TCP 提供了一个可靠的通信通道,确保应用程序能够成功、完整地传输数据。

TCP 特性

  1. 面向连接(Connection-Oriented)
    • 在数据传输开始之前,客户端和服务器必须通过 三次握手(Three-Way Handshake)过程建立连接。
    • 数据传输结束时,连接必须通过 四次挥手(Four-Way Handshake)过程进行正常关闭。
  2. 可靠性
    • TCP 通过 确认应答(ACK)机制确保数据可靠传输。如果数据包丢失或发生错误,TCP 会请求重新传输。
    • 采用 序列号校验和 来确保数据按正确顺序到达且无错误。
  3. 数据顺序
    • TCP 会将接收到的数据按顺序排列,即使数据包顺序到达错误,TCP 也会重新排序。
  4. 流量控制(Flow Control)
    • TCP 使用 滑动窗口机制 来控制数据传输速率,避免发送方数据过快,导致接收方缓存溢出。
  5. 拥塞控制(Congestion Control)
    • TCP 通过动态调整数据传输速率来避免网络拥塞,使用 慢启动拥塞避免快速重传快速恢复 等算法。

TCP 连接的建立和关闭

1. 三次握手(Three-Way Handshake)

在 TCP 连接建立过程中,客户端和服务器通过三次握手来确保双方能够通信,并建立起可靠的连接。

  • 第一次握手:客户端向服务器发送一个 SYN(同步)报文,表示客户端请求建立连接。
  • 第二次握手:服务器收到客户端的 SYN 报文后,向客户端发送一个 SYN-ACK(同步-确认)报文,表示服务器同意建立连接,并且返回客户端的序列号确认。
  • 第三次握手:客户端收到服务器的 SYN-ACK 报文后,再次发送一个 ACK(确认)报文给服务器,表示连接建立成功。

此时,客户端和服务器之间的连接建立完成,数据传输可以开始。

2. 四次挥手(Four-Way Handshake)

在连接关闭时,TCP 使用四次挥手来确保数据的传输完成,双方都可以安全关闭连接。

  • 第一次挥手:客户端发送一个 FIN(结束)报文,表示客户端不再发送数据,开始关闭连接。
  • 第二次挥手:服务器收到 FIN 报文后,向客户端发送一个 ACK(确认)报文,表示服务器确认收到关闭连接的请求。
  • 第三次挥手:服务器发送一个 FIN 报文,表示服务器也没有数据发送,准备关闭连接。
  • 第四次挥手:客户端收到服务器的 FIN 报文后,发送一个 ACK 报文,确认连接关闭。

至此,连接完全关闭。

TCP 报文结构

TCP 报文由 TCP 头部数据部分 组成,TCP 头部包含了多个字段,负责控制数据的传输,确保数据按顺序且可靠地到达目标。

1. TCP 头部结构

TCP 头部固定为 20 字节(不含选项字段)。以下是主要字段的说明:

  • 源端口(Source Port):发送方端口号(2 字节)。

  • 目标端口(Destination Port):接收方端口号(2 字节)。

  • 序列号(Sequence Number):数据流的序列号,标识该数据包在整个数据流中的位置(4 字节)。

  • 确认号(Acknowledgment Number):如果 ACK 标志位为 1,该字段表示接收方期望接收的下一个字节序号(4 字节)。

  • 数据偏移(Data Offset):TCP 头部的长度,单位是 4 字节(4 字节)。

  • 标志位(Flags)

    :标识报文的不同状态,常见的标志位包括:

    • SYN:同步位,用于建立连接。
    • ACK:确认位,表示报文是对先前报文的确认。
    • FIN:结束位,表示关闭连接。
    • RST:重置位,表示连接异常。
    • PSH:推送位,表示数据需要立即传输。
    • URG:紧急位,表示数据为紧急数据。
  • 窗口大小(Window Size):表示接收方的缓冲区大小,控制流量的大小(2 字节)。

  • 校验和(Checksum):用于检测数据在传输过程中是否出现错误(2 字节)。

  • 紧急指针(Urgent Pointer):如果 URG 标志位为 1,紧急指针标识紧急数据的结束位置(2 字节)。

  • 选项字段(Options):可选的字段,包含最大报文段长度、时间戳等信息(可选)。

2. TCP 数据部分

TCP 数据部分包含实际传输的数据,数据部分的大小取决于窗口大小和网络条件,通常在 0 到 1460 字节之间。

TCP 的拥塞控制

TCP 使用多种算法来管理网络拥塞,确保数据能够高效传输:

  • 慢启动(Slow Start):在连接建立初期,TCP 发送方从一个小的窗口大小开始逐渐增加发送窗口大小,以避免过多的数据立即发送导致拥塞。
  • 拥塞避免(Congestion Avoidance):当网络带宽使用达到一定阈值时,TCP 会减慢数据发送速度,避免拥塞发生。
  • 快速重传(Fast Retransmit):如果 TCP 发现某个数据包丢失,它会立即重传该数据包,而不是等待超时。
  • 快速恢复(Fast Recovery):与快速重传一起使用,当丢包事件发生时,TCP 会避免立即进入慢启动阶段,而是通过调整拥塞窗口进行恢复。

应用

​ Web 浏览(HTTP/HTTPS)、电子邮件(SMTP)和文件传输(FTP)

UDP协议

概述

UDP(User Datagram Protocol),即用户数据报协议,是一种无连接的、简单的传输层协议。它在互联网协议族(TCP/IP 协议栈)中与 TCP 一样工作于传输层,负责实现数据包的传输。与 TCP 不同,UDP 是 无连接的,不保证数据的可靠性、顺序性或完整性。因此,它适用于对延迟敏感、能容忍丢包的应用场景,如实时音视频通信、在线游戏等。

UDP 通过提供一种简单且高效的方式来进行数据传输,消除了 TCP 的连接建立、流量控制、拥塞控制等复杂过程,因此它通常具有更低的延迟,但也意味着它牺牲了可靠性和顺序性保障。

特性

  1. 无连接(Connectionless)
    • 在传输数据之前,UDP 不需要进行连接建立。发送方可以随时发送数据包,而接收方也无需建立连接或维持状态。
    • 每个数据包都是独立的,发送方和接收方没有任何状态保持。
  2. 不可靠(Unreliable)
    • UDP 不提供数据包的确认、重传或错误修正。数据包可能在传输过程中丢失、重复或乱序。接收方必须自行处理丢包或错误。
    • 由于没有拥塞控制机制,UDP 适合需要实时传输且能容忍丢包的应用(如视频流、VoIP、在线游戏)。
  3. 低延迟(Low Latency)
    • 由于没有连接建立和数据重传等机制,UDP 比 TCP 更快,适合对实时性要求高的应用。
  4. 简单
    • UDP 的协议开销小,数据包头部较小,仅包含最基本的必要字段。因此,传输效率较高。
  5. 面向数据报(Datagram-Oriented)
    • UDP 传输的数据单位为 数据报(Datagram),每个数据报在传输中独立处理,彼此之间没有顺序关系。

UDP 头部结构

UDP 数据包的头部结构非常简洁,固定长度为 8 字节,包含以下字段:

  1. 源端口(Source Port)(2 字节):指定发送端的端口号。如果发送方没有使用端口,字段可以置为 0。
  2. 目标端口(Destination Port)(2 字节):指定接收端的端口号。
  3. 长度(Length)(2 字节):UDP 数据报的总长度,包括 UDP 头部和数据部分。
  4. 校验和(Checksum)(2 字节):用于错误检测,检查 UDP 数据报在传输过程中是否有错误。校验和不仅覆盖 UDP 数据部分,还包括伪头部,伪头部是 IP 层的一部分,用于校验传输的数据。
    • 校验和是可选的,在 IPv4 中并不是强制要求,但在 IPv6 中是强制要求的。如果不使用校验和,可以设置为 0。
  5. 数据(Data):实际传输的内容,长度由 长度 字段指定。数据部分的长度可以变动,因此 UDP 数据包的总大小不固定。

UDP 头部示例

| Source Port | Destination Port | Length | Checksum | Data |2 bytes        2 bytes          2 bytes    2 bytes

应用场景

由于 UDP 的低延迟和简单性,它适合以下应用场景:

  1. 实时通信
    • VoIP(语音通信):如 Skype、Zoom 等,音频流传输要求低延迟和高效率,而丢包可以容忍。
    • 视频流:例如网络直播、视频会议等,实时性要求高,但对于轻微的丢包,用户体验影响较小。
  2. 在线游戏
    • 网络游戏通常需要高效、实时的数据传输,UDP 用于玩家之间的实时动作和游戏状态同步。
  3. 广播/多播通信
    • UDP 支持广播和多播,适用于数据需要传输给多个接收方的场景,例如 IPTV 广播。
  4. DNS 查询
    • DNS(域名系统)请求和响应通常通过 UDP 协议进行,传输简单、延迟低。
  5. SNMP(简单网络管理协议)
    • 用于网络设备的监控和管理,UDP 用于简单、高效的请求和响应。

总结

TCP 适用于对可靠性要求高的场景,它提供了连接管理、数据顺序、流量控制和拥塞控制等机制,保证了数据的完整性和可靠性,牺牲了一定的传输效率。

UDP 适用于对实时性要求高、能容忍丢包的场景,如视频通话、在线游戏等。它不提供连接管理、数据重传等保障,减少了协议开销,提高了传输速度,但牺牲了数据的可靠性和顺序性。

相同点

  1. 传输层协议:TCP 和 UDP 都属于 传输层(OSI 模型第4层)协议,负责将数据从源主机传输到目标主机。
  2. 基于 IP 协议:两者都依赖于 IP 协议 来实现数据包的路由和转发,因此在网络通信中都需要通过 IP 地址来寻址。
  3. 数据分段:两者都会将大的数据块分割成较小的数据段,并通过网络传输。这些数据段的大小由应用层决定,但实际传输过程中,IP 协议负责将其进一步分段。

不同点

特性TCPUDP
连接方式面向连接(Connection-Oriented)无连接(Connectionless)
可靠性可靠(数据传输有确认、重传机制)不可靠(数据不保证送达,且可能丢失)
顺序保证保证数据按顺序到达(有序传输)不保证数据顺序(可能乱序到达)
流量控制有流量控制机制(如滑动窗口)无流量控制机制
拥塞控制有拥塞控制机制(如慢启动、拥塞避免)无拥塞控制机制
头部大小20 字节(最小)8 字节
传输效率传输效率较低,因需额外的控制和确认信息传输效率较高,头部较小且无额外控制信息
延迟较高(需要连接建立、流量控制等机制)较低(没有连接建立和重传机制)
用途用于要求高可靠性和数据顺序的应用用于对延迟敏感且能容忍丢包的应用
典型应用场景Web 浏览、文件传输(HTTP、FTP)、电子邮件实时视频、语音通信、在线游戏
连接建立需要三次握手(Three-Way Handshake)无需建立连接,直接发送数据
数据丢失和错误处理会重传丢失的数据,并进行校验不会重传丢失的数据,校验和可选
校验机制校验和是强制的,用于确保数据传输正确校验和可选(但一般会使用)

http://www.ppmy.cn/embedded/162535.html

相关文章

CSS实现单行、多行文本溢出显示省略号(…)

在网页设计中,我们常常遇到这样的情况:文本内容太长,无法完全显示在一个固定的区域内。为了让界面看起来更整洁,我们可以使用省略号(…)来表示内容溢出。这不仅能提升用户体验,还能避免内容溢出…

STM32 HAL库UART串口数据接收实验

1. 实验目标 掌握STM32 HAL库的UART配置方法 实现通过UART接收数据并处理 使用中断方式接收数据 用串口调试工具发送数据1或0,输入为1时板载LED亮,输入为0板载LED熄灭。 2. 硬件准备 STM32开发板(STM32F103C8T6) USB转TTL模块…

DeepSeek全生态接入指南:官方通道+三大云平台

DeepSeek全生态接入指南:官方通道三大云平台 一、官方资源入口 1.1 核心交互平台 🖥️ DeepSeek官网: https://chat.deepseek.com/ (体验最新对话模型能力) 二、客户端工具 OllamaChatboxCherry StudioAnythingLLM …

PostgreSQL统计指定表中各字段的空值、空字符串或零值比例

-- 创建临时表存储结果 CREATE TEMP TABLE IF NOT EXISTS table_analysis (db_name TEXT,table_name TEXT,column_name TEXT,data_type TEXT,null_or_empty_count BIGINT,total_rows BIGINT,percentage NUMERIC );DO $$ DECLAREtarget_tables TEXT[] : ARRAY[table1, table2, t…

soular基础教程-使用指南

soular是TikLab DevOps工具链的统一帐号中心,今天来介绍如何使用 soular 配置你的组织、工作台,快速入门上手。  1. 账号管理 可以对账号信息进行多方面管理,包括分配不同的部门、用户组等,从而确保账号权限和职责…

【工业安全】-CVE-2024-30891- Tenda AC18路由器 命令注入漏洞

1.漏洞描述 2.漏洞复现 2.1 qemu-user 模拟: 2.2 qemu-system模拟: 3.漏洞分析 4.poc代码: 1.漏洞描述 漏洞编号:CVE-2024-30891 漏洞名称:Tenda AC18 命令注入 威胁等级:高危 漏洞详情:Ten…

C# ASP.NET核心特性介绍

.NET学习资料 .NET学习资料 .NET学习资料 在当今的软件开发领域中,C# ASP.NET凭借其强大的功能和丰富的特性,成为构建 Web 应用程序的重要技术之一。以下将详细介绍 C# ASP.NET的核心特性。 多语言支持 ASP.NET 支持多种语言进行开发,这使…

基于 openEuler 构建 LVS-DR 群集

1. 对比 LVS 负载均衡群集的 NAT 模式和 DR 模式,比较其各自的优势 。 LVS-NAT模式的优势 配置简单:NAT模式的配置相对容易,无需复杂的网络设置,适合初学者和小型网络环境。 网络架构灵活:由于使用了NAT技术&#xf…