news 2026/2/5 3:21:27

【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/2/2 7:20:57

不用背理论!5 个新手设计技巧,快速提升作品质感

新手做设计&#xff0c;总怕自己没基础做不出好作品——要么版面乱成一团&#xff0c;要么配色丑到辣眼&#xff0c;要么重点根本不突出。其实不用学PS高级功能&#xff0c;不用背配色理论&#xff0c;抓住这5个能直接落地的技巧&#xff0c;几分钟就能做出有质感的作品。 技巧…

作者头像 李华
网站建设 2026/2/4 21:36:41

【大数据毕设全套源码+文档】基于Djangod+协同过滤算法的经济型酒店推荐系统大数据的设计与实现(丰富项目+远程调试+讲解+定制)

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

作者头像 李华
网站建设 2026/2/3 14:16:49

快速验证:用中文Cursor一小时打造天气APP

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个基于Python的天气查询应用原型&#xff0c;要求&#xff1a;1. 全程使用中文版Cursor 2. 展示AI生成代码过程 3. 包含API调用和UI设计 4. 可一键运行的完整项目。使用Flas…

作者头像 李华
网站建设 2026/2/4 15:25:13

企业级SVN解决方案:TORTOISESVN下载与团队协作实战

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个企业SVN环境配置演示应用&#xff0c;包含以下场景&#xff1a;1) TORTOISESVN多版本并行下载 2) Visual Studio集成配置 3) 典型分支策略实施 4) 权限模板生成器 5) 变更…

作者头像 李华
网站建设 2026/2/4 3:44:05

零基础入门:10分钟学会Postman在线测试API

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个面向新手的Postman在线版交互式教程&#xff0c;从创建第一个请求开始&#xff0c;逐步讲解如何发送请求、查看响应、使用环境变量、编写简单测试脚本等基础功能。教程包含…

作者头像 李华
网站建设 2026/2/1 3:23:38

企业级Proxmox集群部署实战:从裸机到高可用

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个企业级Proxmox集群部署指南&#xff0c;包含&#xff1a;1.3节点服务器硬件规格建议 2.详细的Ceph分布式存储配置流程 3.CorosyncPacemaker高可用方案 4.虚拟机迁移测试步…

作者头像 李华