news 2026/5/23 17:11:19

【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/21 10:59:39

数组算法分享 | 代码随想录(CPP+LeetCode)

总览[704. 二分查找](https://leetcode.cn/problems/binary-search/)[27. 移除元素](https://leetcode.cn/problems/remove-element/)[977. 有序数组的平方](https://leetcode.cn/problems/squares-of-a-sorted-array/)[209. 长度最小的子数组](https://leetcode.cn/problems/m…

作者头像 李华
网站建设 2026/5/22 7:14:54

基于Python + Django个性化餐饮管理系统(源码+数据库+文档)

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

作者头像 李华
网站建设 2026/5/9 15:00:04

5分钟快速验证:Python创意项目原型搭建

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个Python项目原型生成器&#xff0c;用户选择项目类型(数据分析/网页爬虫/GUI应用等)后&#xff0c;自动生成可运行的最小化原型代码。要求&#xff1a;1.10种项目模板 2.一…

作者头像 李华
网站建设 2026/5/20 19:36:42

业务架构图工具对比:传统vs AI生成

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个业务架构图效率对比工具。用户可以输入相同的业务需求&#xff0c;系统分别生成传统手动绘制的架构图和AI自动生成的架构图&#xff0c;并对比两者的时间消耗、准确性和易…

作者头像 李华
网站建设 2026/5/9 19:32:09

24小时打造产品原型:大模型快速验证创意指南

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个快速原型生成工具&#xff0c;用户输入产品创意描述后&#xff0c;自动生成包含UI设计、核心功能和演示视频的完整原型。支持多模态输入输出&#xff0c;能够快速迭代和修…

作者头像 李华