news 2026/6/7 16:02:54

【JavaSE】【网络原理】UDP和TCP原理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【JavaSE】【网络原理】UDP和TCP原理

【JavaSE】【网络原理】UDP 和 TCP 的原理详解

在 JavaSE 阶段学习网络编程时,理解 UDP 和 TCP 的核心区别与工作原理是最重要的一环,因为 Java 的SocketServerSocketDatagramSocket等类本质上就是在封装这两种传输层协议。

下面用最清晰的对比 + 图解 + 通俗语言,把它们讲透。

一、TCP 与 UDP 核心对比表(2026年面试必背)

特性TCP(传输控制协议)UDP(用户数据报协议)典型应用场景
连接方式面向连接(三次握手、四次挥手)无连接TCP:HTTP/HTTPS、FTP、SMTP、MySQL
UDP:DNS、视频直播、游戏、语音通话
传输可靠性可靠(丢包重传、乱序重排、流量控制、拥塞控制)不可靠(尽力而为,丢包不重传)
数据传输方式字节流(无边界)数据报(有边界,一发一收)
传输效率较低(头部 20 字节 + 各种确认、重传机制)较高(头部仅 8 字节)UDP 更快,但不可靠
是否提供流量控制有(滑动窗口)
是否提供拥塞控制有(慢启动、拥塞避免、快速重传、快速恢复)TCP 更适合广域网
头部开销20~60 字节(选项字段可变)8 字节UDP 头部极简
是否有序有序(序号 + 确认机制)无序(应用层自己处理)

一句话总结:

  • TCP= 可靠的、面向连接的、字节流的“快递员”(保证送达、按序送达、不丢失、不重复)
  • UDP= 不可靠的、无连接的、数据报的“发射炮”(发出去就不管了,速度快)

二、TCP 核心原理(三次握手、四次挥手、滑动窗口)

1. 三次握手(建立连接)

目的:双方确认对方的发送和接收能力都正常

客户端 服务端 | SYN=1, seq=x | (我能发,你能收吗?) |----------------->| | | SYN=1, ACK=1, seq=y, ack=x+1 | | (我也能发,你也能收) |<-----------------| | ACK=1, seq=x+1, ack=y+1 | (好的,大家都能发能收,开始吧) |----------------->|

为什么是三次而不是两次?
两次无法确认客户端的接收能力(第二次握手确认服务端收发正常,但客户端只确认了服务端能收)

2. 四次挥手(断开连接)

目的:双方都确认数据全部发送完毕,且对方不再发送

客户端 服务端 | FIN=1, seq=u | (我发完了,你呢?) |----------------->| | | ACK=1, ack=u+1 | | (收到,我还在发) |<-----------------| | | FIN=1, seq=v | | (我也发完了) |<-----------------| | ACK=1, ack=v+1 | (好的,结束) |----------------->|

为什么是四次而不是三次?
因为 TCP 是全双工,双方都要独立关闭自己的发送通道。

3. 滑动窗口与流量控制(TCP 高效传输的关键)
  • 窗口大小:接收方告诉发送方“我还能接收多少字节”
  • 滑动窗口:发送方根据窗口大小决定一次能发多少数据
  • 零窗口:接收方窗口为 0 → 发送方停止发送(避免淹没接收方)

三、UDP 核心原理(简单粗暴)

UDP 数据报格式(只有 8 字节头部)

源端口 (16位) | 目的端口 (16位) 长度 (16位) | 校验和 (16位) 数据...

UDP 特点总结

  1. 无连接 → 无三次握手、无四次挥手,开销极小
  2. 无状态 → 不记录连接状态,适合一对多广播、组播
  3. 数据报边界保留 → send 多少,recv 就完整收到多少(不像 TCP 是流)
  4. 无重传、无拥塞控制 → 应用层自己决定是否重传

四、Java 中对应实现(最常考)

协议Java 类特点典型代码片段
TCPServerSocket / Socket面向连接、可靠、流式server.accept()socket.getInputStream()
UDPDatagramSocket / DatagramPacket无连接、不可靠、数据报socket.send(packet)/socket.receive(packet)

UDP 经典代码示例(广播/组播常见)

// 发送端DatagramSocketsocket=newDatagramSocket();Stringmsg="Hello UDP";byte[]data=msg.getBytes();DatagramPacketpacket=newDatagramPacket(data,data.length,InetAddress.getByName("255.255.255.255"),9999);// 广播socket.send(packet);// 接收端DatagramSocketsocket=newDatagramSocket(9999);byte[]buffer=newbyte[1024];DatagramPacketpacket=newDatagramPacket(buffer,buffer.length);socket.receive(packet);Stringreceived=newString(packet.getData(),0,packet.getLength());

五、2025-2026 年面试高频问题(建议背熟)

  1. TCP 和 UDP 的区别?分别适用于什么场景?
  2. 为什么 UDP 比 TCP 快?(无连接、无状态、无重传、无拥塞控制)
  3. 三次握手为什么是三次而不是两次?
  4. 四次挥手为什么是四次?TIME_WAIT 状态有什么作用?(防止延迟数据包干扰新连接)
  5. TCP 如何保证可靠传输?(确认应答、超时重传、滑动窗口、流量控制、拥塞控制)
  6. UDP 什么时候会丢包?(网络拥堵、接收方缓冲区满)
  7. Java 中实现 UDP 广播/组播要注意什么?(设置setBroadcast(true),组播地址 224.0.0.0~239.255.255.255)

一句话总结:

TCP是“稳重可靠的大哥”,适合需要数据完整、顺序的场景(网页、文件传输、数据库)。
UDP是“速度至上的小弟”,适合实时性要求高、丢包可容忍的场景(直播、游戏、DNS)。

如果你正在准备 JavaSE 网络编程面试,或者想看具体代码案例(TCP 聊天室、UDP 广播、组播实现),可以告诉我,我继续给你展开~

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

【大数据毕设全套源码+文档】基于Django+协同过滤算法的电影个性化推荐系统的设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/6/5 10:00:11

基于Python 医药信息管理系统(源码+数据库+文档)

医药信息管理 目录 基于PythonDjango医药信息管理系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 基于PythonDjango医药信息管理系统 一、前言 博主介绍&#xff1a…

作者头像 李华
网站建设 2026/6/5 17:11:07

1小时搞定:用PLAYWRIGHT快速验证产品创意

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个快速验证产品创意的PLAYWRIGHT原型&#xff0c;功能包括&#xff1a;1.自动采集竞品关键页面截图 2.提取核心功能点对比 3.生成可视化对比报告 4.模拟用户旅程。要求支持配…

作者头像 李华
网站建设 2026/5/23 1:11:33

nTopology平台自动生成适配不同热源分布的流道拓扑。

&#x1f393;作者简介&#xff1a;科技自媒体优质创作者 &#x1f310;个人主页&#xff1a;莱歌数字-CSDN博客 &#x1f48c;公众号&#xff1a;莱歌数字&#xff08;B站同名&#xff09; &#x1f4f1;个人微信&#xff1a;yanshanYH 211、985硕士&#xff0c;从业16年 从…

作者头像 李华
网站建设 2026/5/20 17:23:07

传统调试vsAI辅助:修复SyntaxError的效率对比

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个对比测试工具&#xff0c;能够&#xff1a;1. 生成包含SyntaxError的测试代码样本&#xff1b;2. 记录人工修复这些错误所需的时间&#xff1b;3. 使用AI自动修复同样的错…

作者头像 李华
网站建设 2026/6/5 7:49:16

网上超市系统(源码+数据库+文档)

网上超市 目录 基于springboot vue网上超市系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 基于springboot vue网上超市系统 一、前言 博主介绍&#xff1a;✌️大…

作者头像 李华