当前位置: 首页 > news >正文

深入浅出理解 TCP 与 UDP:网络传输协议的核心差异与应用

目录

一、UDP:轻量级的无连接协议

核心特性

二、TCP:可靠的面向连接协议

核心特性

三、TCP 通信的函数调用流程

服务器端流程

客户端流程

四、TCP 的三次握手与四次挥手

三次握手(建立连接)

四次挥手(关闭连接)

五、CS 与 BS 架构的区别

总结


在网络通信的世界里,TCP 和 UDP 是两种至关重要的传输层协议,它们支撑着我们日常的各种网络交互。无论是浏览网页、发送消息,还是观看直播、进行视频通话,背后都离不开这两种协议的运作。本文将详细解析 TCP 与 UDP 的特性、工作机制以及典型应用场景,帮助你深入理解它们的核心差异。

一、UDP:轻量级的无连接协议

UDP(用户数据报协议)是一种简单、轻量的传输层协议,其设计理念更注重效率而非可靠性。

核心特性

  1. 无连接

    • 通信双方无需建立连接即可直接发送数据,不需要维护复杂的网络状态,因此网络开销小。
    • 局限性:一方进程关闭时,另一方无法感知,若需告知需主动发送信息。
  2. 不可靠但实时性好

    • 传输过程中可能出现丢包,但因无需等待确认和重传,数据传输延迟低,实时性强。
    • 适用场景:直播、视频传输、音频传输等对实时性要求高而对少量丢包不敏感的场景。
  3. 支持一对多通信

    • 易于实现一个发送方对应多个接收方的通信模式。
  4. 支持组播和广播

    • 可向特定组内所有设备(组播)或同一网络内所有设备(广播)发送数据,适合批量数据分发。

二、TCP:可靠的面向连接协议

TCP(传输控制协议)是一种面向连接、提供可靠传输的协议,通过一系列机制保障数据的有序、完整传输。

核心特性

  1. 有连接

    • 通信前需建立连接,一次会话中连接持续保持;若一方断开,另一方可感知(通过recv()返回 0 判断)。
  2. 可靠性保障

    • 采用应答机制:接收方收到数据后需向发送方返回确认信息。
    • 采用超时重传机制:发送方若超时未收到确认,会重新发送数据。
  3. 流式套接字特性

    • 有序性:数据按发送顺序传输,接收方会重组为连续的数据流。
    • 发送与接收次数不对应:例如发送方分 3 次发送,接收方可 1 次接收全部数据。
    • 可能阻塞send()发送过快时,若对方缓冲区满则会阻塞。
    • 数据无边界:易出现 “黏包” 问题(接收方无法区分连续发送的多个数据包)。
  4. 解决黏包问题的方案

    • 协商边界:双方约定数据分隔符。
    • 固定大小:每次发送固定长度的数据。
    • 自定义协议:例如设计包含 “开始标识 + 长度 + 数据 + 校验 + 结束标识” 的格式,示例:
      AA(开始) 03(长度) 1 2 3(数据) crc(校验) BB(结束)

三、TCP 通信的函数调用流程

TCP 的通信过程需严格遵循连接建立、数据传输、连接关闭的流程,服务器与客户端的函数调用顺序如下:

服务器端流程

  1. socket():打开网络设备,获取监听套接字(listfd),用于处理三次握手。
  2. bind():为套接字绑定 IP(确定主机)和端口(对应进程 PID)。
  3. listen():使监听套接字进入可接收连接的状态。
  4. accept():等待客户端连接,完成三次握手后返回通信套接字(用于后续数据传输)。
  5. recv()/send():通过通信套接字接收 / 发送数据(recv()返回 0 表示对方断开,-1 表示错误)。
  6. close():收到断开请求后,关闭通信套接字。

客户端流程

  1. socket():获取通信套接字。
  2. connect():主动向服务器发起连接,触发三次握手。
  3. send()/recv():与服务器传输数据。
  4. close():完成服务后主动关闭套接字,触发四次挥手。

四、TCP 的三次握手与四次挥手

TCP 通过 “三次握手” 建立连接,通过 “四次挥手” 关闭连接,确保通信的有序性。

三次握手(建立连接)

  1. 客户端(C)向服务器(S)发送SYN(连接请求)和初始序列号c_num
  2. 服务器返回SYN(同意连接)、ACK(确认收到请求)和初始序列号s_num
  3. 客户端向服务器发送ACK(确认收到服务器的同意),连接建立。

四次挥手(关闭连接)

  1. 客户端发送FIN(断开请求)和ACK(确认之前数据)。
  2. 服务器返回ACK(确认收到断开请求)。
  3. 服务器准备好后发送FIN(断开请求)和ACK
  4. 客户端返回ACK(确认收到服务器的断开请求),连接关闭。

五、CS 与 BS 架构的区别

除了协议本身,网络应用的架构也与协议选择密切相关,常见的 CS 和 BS 架构有以下差异:

对比维度CS(Client/Server,客户端 / 服务器)BS(Browser/Server,浏览器 / 服务器)
客户端类型专用客户端(需安装特定软件)通用客户端(浏览器)
通信协议可使用标准协议或自定义协议基于 HTTP/HTTPS 超文本传输协议
功能复杂度功能更复杂(可定制化程度高)功能相对简单(受浏览器限制)
资源存储大部分资源在客户端资源集中在服务器,客户端按需加载

总结

TCP 和 UDP 各有侧重:UDP 以轻量、高效、实时性取胜,适合流媒体等场景;TCP 以可靠、有序、面向连接为核心,适合文件传输、支付等对可靠性要求高的场景。理解它们的特性和工作机制,是设计高效网络应用的基础。同时,CS 与 BS 架构的选择也需结合协议特性和业务需求,以实现最佳的用户体验。

http://www.lryc.cn/news/596053.html

相关文章:

  • 基于SpringBoot+Vue的高校特长互助系统(WebSocket实时聊天、协同过滤算法、ECharts图形化分析)
  • JavaScript,发生异常,try...catch...finally处理,继续向上层调用者传递异常信息
  • zabbix“专家坐诊”第295期问答
  • 服务器无法访问公网的原因及解决方案
  • 在 WebSocket 中使用 @Autowired 时遇到空指针异常
  • XML高效处理类 - 专为Office文档XML处理优化
  • 智能制造——解读52页汽车设计制造一体化整车产品生命周期PLM解决方案【附全文阅读】
  • 智慧制造合同解决方案
  • React 项目性能优化概要
  • 客户案例 | Jabil 整合 IT 与运营,大规模转型制造流程
  • 厚铜板载流革命与精密压合工艺——高可靠性PCB批量制造的新锚点
  • 中小制造企业如何对技术图纸进行管理?
  • OneCode 3.0 @FormAnnotation 注解速查手册
  • 漫画版:细说金仓数据库
  • Qt/C++源码/监控设备模拟器/支持onvif和gb28181/多路批量模拟/虚拟监控摄像头
  • 秋招Day17 - Spring - AOP
  • 《基于蛋白质组学的精准医学》:研究进展与未来展望
  • 双指针算法介绍及使用(上)
  • GitHub 上的开源项目 ticktick(滴答清单)
  • MSTP技术
  • 【加解密与C】Rot系列(四)RotSpecial
  • 解决http下浏览器无法开启麦克风问题
  • haproxy七层均衡
  • n1 armbian docker compose 部署aipan mysql
  • 理解后端开发中的API设计原则
  • 清华大学顶刊发表|破解无人机抓取与投递难题
  • 第三章 Freertos物联网实战esp8266模块
  • LIMO:仅需817样本激活大模型数学推理能力,挑战“数据规模至上”传统范式
  • 从零构建智能对话助手:LangGraph + ReAct 实现具备记忆功能的 AI 智能体
  • MatterPort3D 数据集 | 简介 | 多途径下载