news 2026/6/23 11:09:22

【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/6/23 5:07:30

Langchain-Chatchat如何评估问答质量?指标体系构建

Langchain-Chatchat如何评估问答质量?指标体系构建 在企业知识管理日益智能化的今天,一个常见的困境是:员工每天要花数小时查找文档、邮件或内部系统中的信息,而客服面对客户提问时却常常无法快速调取准确答案。尽管大语言模型&am…

作者头像 李华
网站建设 2026/6/23 5:23:38

springboot在线教育系统(11528)

有需要的同学,源代码和配套文档领取,加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码(前后端源代码SQL脚本)配套文档(LWPPT开题报告)远程调试控屏包运行 三、技术介绍 Java…

作者头像 李华
网站建设 2026/6/21 19:29:46

测了多款AI自动生成PPT工具,真正能用的不到一半

告别PPT制作难题!轻竹办公让汇报高效出彩在职场中,年终总结、项目汇报等工作如同一座座大山,压得职场人喘不过气来。为了一份完美的报告,我们常常熬夜修改,好不容易搭建好框架,内容却缺乏亮点;精…

作者头像 李华
网站建设 2026/6/20 22:20:17

springboot星之语明星周边产品销售网站的设计与实现(11529)

有需要的同学,源代码和配套文档领取,加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码(前后端源代码SQL脚本)配套文档(LWPPT开题报告)远程调试控屏包运行 三、技术介绍 Java…

作者头像 李华
网站建设 2026/6/22 21:19:31

毕设救星:Spring Boot + Neo4j 打造“医疗知识问答”——基于知识图谱的智能导诊平台

🏥 前言:为什么选“医疗问答”? 现在毕设题目里带个“智能”二字才好过。但真正的“医疗大模型”训练成本极高,且容易胡说八道。 “基于知识图谱的问答 (KBQA)” 是完美的替代方案: 准确性高:基于图谱查询,不会产生幻觉(医生说吃药 A,它绝不会说吃药 B)。 可视化强…

作者头像 李华
网站建设 2026/6/21 9:23:41

华为网络设备基本配置命令

1、恢复出出厂设置<Huawei>reset saved-configuration This will delete the configuration in the flash memory.The device configuratio ns will be erased to reconfigure.Are you sure? (y/n)[n]:yClear the configuration in the device successfully. <Huawe…

作者头像 李华