news 2026/5/26 6:38:12

【Linux网络基础】详解 TCP 面向连接 vs UDP 无连接

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Linux网络基础】详解 TCP 面向连接 vs UDP 无连接

详解 TCP 面向连接 vs UDP 无连接

本文详细解析计算机网络传输层两个最重要的协议:TCP (Transmission Control Protocol)UDP (User Datagram Protocol),重点阐述“面向连接”与“无连接”的核心区别、工作原理及应用场景。


1. 核心概念:什么是“连接”?

在计算机网络中,“连接”并不是一条物理的网线。
“连接”是一种逻辑状态,是通信双方为了保证数据可靠传输而维护的一组状态信息

  • 状态信息包括:Socket 四元组(源IP、源端口、目的IP、目的端口)、序列号 (Sequence Number)、窗口大小 (Window Size)、重传定时器等。
  • 面向连接:通信前必须建立连接(分配资源、初始化状态),通信结束必须释放连接。
  • 无连接:不需要预先建立逻辑通路,直接发送数据包。

2. TCP:面向连接 (Connection-Oriented)

TCP 是一个可靠的、面向流的传输协议。就像打电话,必须先拨通对方,对方接听后才能开始说话。

2.1 核心特点

  1. 三次握手 (Three-Way Handshake):在传输数据前,必须通过三次握手建立连接,同步双方的序列号 (ISN) 和窗口大小。
  2. 可靠性 (Reliability)
    • 确认机制 (ACK):接收方收到数据后必须回复确认。
    • 重传机制 (Retransmission):发送方如果在超时时间内未收到 ACK,会重传数据。
    • 排序 (Ordering):数据包乱序到达时,TCP 会根据序列号重新排序。
  3. 流式传输 (Byte Stream):TCP 把数据看作一连串无结构的字节流,没有边界。
  4. 流量控制与拥塞控制:防止接收方缓冲区溢出,防止网络拥塞。

2.2 工作流程图解

下图展示了 TCP 的连接建立与数据传输过程:

Mermaid 流程示意:

ClientServer建立连接 (三次握手)SYN (SEQ=x)SYN (SEQ=y), ACK (x+1)ACK (y+1)数据传输Data (SEQ=x+1)ACK (SEQ=x+1+len)ClientServer

3. UDP:无连接 (Connectionless)

UDP 是一个简单的、不可靠的、面向数据报的传输协议。就像寄信广播,写好地址直接扔进邮筒,不知道对方是否收到,也不保证顺序。

3.1 核心特点

  1. 无连接:不需要握手,想发就发。发送方不会维护连接状态。
  2. 不可靠 (Unreliable)
    • 没有 ACK 确认。
    • 没有重传机制(丢了就丢了)。
    • 不保证顺序(先发的可能后到)。
  3. 面向报文 (Datagram):UDP 保留应用层报文的边界,发多少接多少。
  4. 高效与实时:没有连接建立的时延,头部开销小(TCP 20字节,UDP 8字节),适合实时应用。

3.2 工作流程图解

下图展示了 UDP 的“发射即忘” (Fire and Forget) 模式:


4. 深度对比:TCP vs UDP

特性TCP (Transmission Control Protocol)UDP (User Datagram Protocol)
连接性面向连接(需要3次握手,4次挥手)无连接(直接发送)
可靠性可靠(保证不丢、不重、有序)不可靠(尽最大努力交付,可能丢包、乱序)
传输模式字节流(Stream,无边界)数据报(Datagram,有边界)
速度/效率较慢 (握手、ACK、重传消耗资源)(无控制开销)
头部开销20-60 字节8 字节
拥塞控制有 (慢启动、拥塞避免等)无 (网络拥堵时依然全速发送)
应用场景网页(HTTP), 邮件(SMTP), 文件(FTP)视频直播, 语音通话(VoIP), DNS, 游戏(FPS)

5. 代码层面的区别 (Socket API)

在编程实现上,两者的主要区别在于 Socket 的类型和发送/接收函数。

TCP Socket 伪代码

# Servers=socket(AF_INET,SOCK_STREAM)# SOCK_STREAM 代表 TCPs.bind((ip,port))s.listen()conn,addr=s.accept()# 阻塞等待连接data=conn.recv(1024)# 基于连接接收# Clients=socket(AF_INET,SOCK_STREAM)s.connect((ip,port))# 必须先建立连接s.send(data)# 基于连接发送

UDP Socket 伪代码

# Servers=socket(AF_INET,SOCK_DGRAM)# SOCK_DGRAM 代表 UDPs.bind((ip,port))data,addr=s.recvfrom(1024)# 接收数据,同时获取发送者地址# Clients=socket(AF_INET,SOCK_DGRAM)# 不需要 connects.sendto(data,(ip,port))# 发送时指定目标地址

6. 总结

  • TCP 是“管家”:细致入微,做事有条理,保证任务一定完成,但办事流程繁琐,速度慢。
  • UDP 是“邮差”:简单粗暴,只管送,不管丢没丢,但速度快,开销小。

选择建议

  • 如果你的应用不允许数据丢失(如转账、传文件),请用TCP
  • 如果你的应用追求速度,能容忍少量丢包(如视频聊天、实时竞技游戏),请用UDP

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/25 4:34:26

企业架构之TOGAF 方法论入门与实战指南(2)

在当今数字化转型的浪潮中,企业 IT 系统变得越来越复杂。系统之间不仅要打通,还要灵活应对业务的快速变化。作为技术管理者或架构师,我们经常面临这样的灵魂拷问:如何确保 IT 建设不偏离业务战略?如何避免系统重复建设…

作者头像 李华
网站建设 2026/5/26 3:17:12

12月18号阿里云ACP线上考试成绩单~

🗓先说一下:2025年剩最后一次阿里云ACP线上考试(12月25号),准备在2025年前拿证同学们抓紧时间报名喽~12月18号考试仍然稳定发挥:✅10位同学参加ACP云计算考试,全部通过(7位同学在90分…

作者头像 李华
网站建设 2026/5/26 6:14:31

Xgboost-shap模型解释分析:揭开模型黑箱的面纱

Xgboost-shap模型解释分析,Xgboost有分类器和回归器两种,shap用于对各种特征重要性可视化,用于对机器模型的解释分析 自带数据集在机器学习领域,我们常常使用各种模型来进行预测和分析。然而,很多时候这些模型就像一个…

作者头像 李华
网站建设 2026/5/25 15:03:27

NPM_配置的补充说明

原来的registry.npm.taobao.org已替换为registry.npmmirror.com npm config set registry https://registry.npmmirror.com确认配置已经生效 npm config get registry若需要恢复默认的官方源,可以执行以下命令 npm config set registry https://registry.npmjs.o…

作者头像 李华