news 2026/4/18 8:03:18

【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/4/11 12:49:42

智慧交通数据治理中的典型“四重困境”:**异构性、时效性、关联性、质量性**四大瓶颈,共同导致数据价值难以释放

智慧交通数据治理中的典型“四重困境”&#xff1a;异构性、时效性、关联性、质量性四大瓶颈&#xff0c;共同导致数据价值难以释放。要系统性破局&#xff0c;需构建“一底座、两引擎、三闭环”的新型交通数据智能中枢架构&#xff1a; 一底座&#xff1a;建设统一时空基准的数…

作者头像 李华
网站建设 2026/4/17 12:23:37

Gitee领跑2026年项目管理工具市场:技术驱动与本土化优势双轮驱动

Gitee领跑2026年项目管理工具市场&#xff1a;技术驱动与本土化优势双轮驱动 在数字化转型浪潮席卷全球的背景下&#xff0c;项目管理工具已成为企业提升效率、优化资源配置的关键基础设施。2026年的项目管理工具市场呈现出明显的技术驱动特征&#xff0c;其中Gitee作为中国最大…

作者头像 李华
网站建设 2026/4/8 6:42:53

了解Agent Skills,这一篇就够了

一、Skills 简介 Skill 是一种模块化、可复用的能力包&#xff0c;用于将特定任务的专业知识、工作流程和可执行逻辑进行结构化封装&#xff0c;使 AI 在执行该类任务时具备稳定、一致且可持续演进的行为能力。 Agent 在执行任务时&#xff0c;会自主决策&#xff0c;会根据P…

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

基于Python 图书管理系统(源码+数据库+文档)

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

作者头像 李华
网站建设 2026/4/16 16:19:52

基于Python 超市在线销售与分析系统(源码+数据库+文档)

超市在线销售与分析 目录 基于PythonDjango超市在线销售与分析系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 基于PythonDjango超市在线销售与分析系统 一、前言 博…

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

对比评测:中文Cursor vs 英文版的开发效率差异

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个Python脚本&#xff0c;使用统计方法比较中英文版Cursor的开发效率。要求&#xff1a;1. 设计标准编码任务&#xff1b;2. 记录完成时间&#xff1b;3. 分析错误率&#x…

作者头像 李华