当前位置: 首页 > 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.xdnf.cn/news/1167337.html

相关文章:

  • JMeter groovy 编译成.jar 文件
  • oracle里面concat函数用法,oracle wm_concat函数用法-
  • python学习-读取csv大文件
  • Apache Ignite实现无死锁特性
  • PHP与Web页面交互:从基础表单到AJAX实战
  • k8s:利用helm离线部署consul v1.21.2
  • 【菜狗学聚类】时间序列聚类主要方法—20250722
  • web3.0怎么入局
  • PePeOnTron上线 Binance Alpha:中文社区正走出自己的Web3之路
  • 内核协议栈源码阅读(一) ---驱动与内核交互
  • 进程优先级切换调度-进程概念(6)
  • Taro 网络 API 详解与实用案例
  • SecretFlow (3) --- 添加合作方并创建项目
  • JavaScript,发生异常,try...catch...finally处理,继续向上层调用者传递异常信息
  • RabbitMQ03——面试题
  • uniapp各大平台导航组件
  • 在 Ubuntu 22.04 上安装并优化 Nginx nginx入门操作 稍难,需要有一定理论 多理解 多实践
  • 《Uniapp-Vue 3-TS 实战开发》自定义时间选择
  • Kafka基础理论速通
  • IDEA全局Maven配置
  • 比特币技术简史 第六章:网络协议 - P2P网络、节点类型与消息传播
  • 未来趋势:LeafletJS 与 Web3/AI 的融合
  • Visual Studio Code 远端云服务器开发使用指南
  • (3)重定向 | 时间相关指令 | 文件查找 | 打包与压缩
  • FastDFS 6.11.0 单机环境搭建与测试(附 Nginx 集成)+ docker构建+k8s启动文件
  • Linux异常与信号处理
  • 浙江大学PTA程序设计C语言基础编程练习题1-5
  • 【论文阅读 | TIV 2024 | CDC-YOLOFusion:利用跨尺度动态卷积融合实现可见光-红外目标检测】
  • 边缘计算网关赋能智慧农业:物联网边缘计算的创新应用与实践
  • 【每日算法】专题九_链表