当前位置: 首页 > 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.dtcms.com/a/292481.html

相关文章:

  • 平台端用户管理功能设计全解:从分类管控到审核闭环
  • 基于springboot的疫苗发布和接种预约系统(论文+开题报告)
  • 实现分布式锁
  • 腾讯云SDK
  • 论文笔记:Parameter Competition Balancing for Model Merging
  • MongoDB频繁掉线频繁断开服务的核心原因以及解决方案-卓伊凡|贝贝|莉莉|糖果
  • 在Windows 10/11上使用Qt和SOEM构建EtherCAT主站:工业控制新纪元
  • 【Axure视频教程】形状地图
  • Qt 事件处理机制深入剖析
  • 【OpenCV篇】OpenCV——01day.图像基础
  • 通俗易懂循环神经网络(RNN)指南
  • cookie基本使用
  • 如何用keepAlive实现标签页缓存
  • Samba 共享解决方案:微服务多机共享 `/app` 目录
  • Hugging Face 模型的缓存和直接下载有什么区别?
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 主页-微博基本信息实现
  • 程序代码篇---PID简介
  • 《计算机“十万个为什么”》之 MQ
  • 卷积神经网络:LeNet模型
  • STM32-GPIO理论部分1
  • 如何将iPad中的视频传输到电脑(6种简单方法)
  • 如何构建FunASR的本地语音识别服务
  • 出货奥地利,稳石氢能AEM氢户储应用方案撬动欧洲市场。
  • 智能文本抽取在法院卷宗管理的技术实现及优势
  • 记录解决问题--使用maven help插件一次性上传所有依赖到离线环境,spring-boot-starter-undertow离线环境缺少依赖
  • windows下nvm的安装及使用
  • 清华大学顶刊发表|破解无人机抓取与投递难题
  • 2025年COR SCI2区,基于多种配送模式的无人机自主配送车辆路径问题,深度解析+性能实测
  • 无人机吊舱与遥控器匹配技术解析
  • 【matlab】无人机控制算法开发与应用流程