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

目录

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

核心特性

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

核心特性

[三、TCP 通信的函数调用流程](#三、TCP 通信的函数调用流程)

服务器端流程

客户端流程

[四、TCP 的三次握手与四次挥手](#四、TCP 的三次握手与四次挥手)

三次握手(建立连接)

四次挥手(关闭连接)

[五、CS 与 BS 架构的区别](#五、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 架构的选择也需结合协议特性和业务需求,以实现最佳的用户体验。

相关推荐
铁锹少年1 小时前
Docker 容器中的 HEAD 请求缺失 header?从 Content-MD5 缺失聊起
经验分享·python·网络协议·阿里云·docker·容器·云计算
小粽子编程3 小时前
pig cloud框架中引入websocket
网络·websocket·网络协议
Chaunceyin4 小时前
OpenHarmony之WebSocket开发
网络·websocket·网络协议·harmonyos
阿沁QWQ10 小时前
HTTPS 协议原理
网络协议·http·https
hzsnone1 天前
Openresty 支持HTTP/3协议和QUIC配置
网络协议·openresty
有没有没有重复的名字1 天前
linux初识网络及UDP简单程序
网络协议·tcp/ip·udp
种时光的人1 天前
IPv4枯竭时代:从NAT技术到IPv6的演进之路
网络·网络协议·tcp/ip·ip
空中湖1 天前
比特币技术简史 第六章:网络协议 - P2P网络、节点类型与消息传播
网络·网络协议·区块链·p2p·比特币
阿维的博客日记1 天前
SSE和WebSocket区别到底是什么
网络·websocket·网络协议
weixin_524749961 天前
RPC(Remote Procedure Call,远程过程调用)介绍
网络·网络协议·rpc