7. TCP 和 UDP 的区别

总结

  1. TCP 面向连接,需要三次握手建立连接,UDP 无连接,不需要握手,直接发送数据。
  2. UDP 有较好的实时性,效率比 TCP 高。
  3. TCP 面向字节流,实际上是 TCP 把数据看成一连串无结构的字节流,UDP 是面向报文的,一次交付一个完整的报文,报文不可分割,报文是 UDP 数据报处理的最小单位。
  4. 每一条TCP连接时一对一的,UDP可以一对多,多对一,多对多。
  5. UDP 分组首部开销小,八个字节,TCP 首部开销大约 20 字节。
  6. UDP 适合一次性传输较小数据的网络应用,如 DNS、SNMP。

以下是对你的笔记内容进行丰富和结构化后的 Markdown 版本,涵盖 TCP 与 UDP 的核心区别、适用场景、协议对比等内容:


TCP 和 UDP 的区别详解

TCP(Transmission Control Protocol)和 UDP(User Datagram Protocol)是传输层的两个核心协议,它们在可靠性、连接方式、性能等方面有显著差异。理解它们的区别对于网络编程、系统优化和应用选型至关重要。


一、核心区别对比表

特性 TCP UDP
连接方式 面向连接(需要三次握手建立连接) 无连接(直接发送数据)
可靠性 可靠传输(确认机制、重传机制) 不可靠传输(不保证送达)
流量控制/拥塞控制 支持 不支持
传输方式 面向字节流 面向报文
是否支持多播 不支持(点对点) 支持(可一对多、多对一、多对多)
首部开销 较大(20~60 字节) 小(仅 8 字节)
实时性 较差(延迟较高) 好(低延迟)
应用场景 文件传输、网页浏览、邮件等 视频会议、DNS 查询、游戏、广播

二、详细特性说明

1. 连接方式不同

  • TCP:面向连接

    • 在通信前需通过 三次握手 建立连接。
    • 通信结束后通过 四次挥手 断开连接。
    • 确保通信双方都准备好接收和发送数据。
  • UDP:无连接

    • 发送方无需建立连接,直接发送数据包。
    • 接收方收到数据后也无需确认。
    • 更适合轻量级、快速的数据交互。

2. 数据传输可靠性

  • TCP:可靠传输

    • 提供确认应答、超时重传、滑动窗口等机制保障数据完整性。
    • 适用于要求数据不能丢失的场景(如文件下载、网页加载)。
  • UDP:不可靠传输

    • 不提供确认机制、重传机制。
    • 数据可能丢包、乱序或重复。
    • 但正因为如此,它具备更低的延迟和更高的效率。

3. 数据处理方式不同

  • TCP:面向字节流

    • 数据被视为连续的字节流,没有固定的消息边界。
    • 操作系统自动拆分和拼接数据,可能导致"粘包"问题。
    • 需要应用层自行定义消息格式来区分数据边界。
  • UDP:面向报文

    • 每个 sendto() 调用对应一个完整的报文。
    • 接收端每次调用 recvfrom() 都会获取一个完整的消息。
    • 报文不可分割,是 UDP 处理数据的最小单位。

4. 通信模式

  • TCP:一对一

    • 每条 TCP 连接只能有两个端点(客户端和服务端)。
    • 无法实现广播或多播功能。
  • UDP:支持多播

    • 可以实现:
      • 一对一
      • 一对多(广播/组播)
      • 多对一
      • 多对多
    • 适用于音视频广播、在线游戏等场景。

5. 首部开销对比

  • TCP 首部:至少 20 字节,最多 60 字节(包含选项字段)

    • 包括源端口、目标端口、序列号、确认号、窗口大小、校验和等信息。
  • UDP 首部:固定 8 字节

    • 仅包括源端口、目标端口、长度、校验和。
    • 更加简洁高效,适合小数据包快速传输。

6. 应用场景对比

协议 典型应用场景 示例
TCP 需要可靠传输 HTTP/HTTPS、FTP、SMTP、POP3、SSH
UDP 实时性强、容忍丢包 DNS、SNMP、VoIP、视频会议、在线游戏、IoT 传感器数据上报

三、总结一句话

TCP 是"讲求可靠"的协议,适用于必须确保数据完整性的场景;UDP 是"追求速度"的协议,适用于对实时性要求高、能容忍少量丢包的场景。


四、扩展知识:何时选择 TCP?何时选择 UDP?

场景 推荐协议 原因
文件传输、网页访问 TCP 数据完整性优先
实时音视频通话 UDP 延迟敏感,允许轻微丢包
游戏同步(如 FPS) UDP 快速响应比丢包更重要
DNS 查询 UDP 快速查询,短小精悍
控制指令通信(如无人机遥控) UDP 实时性强,可容忍偶尔丢包

相关推荐
木子n12 小时前
车载以太网与SOME/IP服务化通信实战-01.从字节到服务:SOME/IP报文解析与四通道开销账
网络·网络协议·tcp/ip·车载以太网·some/ip
Escalating_xu4 小时前
【C 语言】数据在内存中的存储:补码、大小端、整型陷阱与 IEEE 754 全解析
java·c语言·网络
爱跳舞的烤冷面4 小时前
Linux篇——网络编程
网络
Knight_AL5 小时前
基于 Netty 实现的 WebSocket 服务端
网络·websocket·网络协议
wuyk5557 小时前
《WiFi 嵌入式物联网开发全套实战》| 第 31 章 休眠唤醒 WiFi 断连、时间同步、网络恢复机制
网络·物联网·php
沫璃染墨7 小时前
从零入门计算机网络系列(一):计算机网络初识——从网络发展史到TCP/IP协议》
linux·网络·网络协议·tcp/ip·计算机网络
王大傻09287 小时前
堆叠注入(Stacked Queries Injection)详解:原理、利用与防御
服务器·网络·数据库·web安全·网络安全
艾芯微科技8 小时前
钰泰 ETA5055V330DD1E|SOT-223 3.3V LDO,低压差、大电流线性稳压选型分享
网络·单片机·嵌入式硬件·集成测试·51单片机
bigcarp8 小时前
安卓模拟器MUMU+tcpdump抓包Socket协议流量
服务器·网络·tcpdump
是个西兰花8 小时前
TCP套接字编程实战:从服务器搭建到多进程处理
服务器·网络协议·tcp/ip