TCP vs UDP:核心区别、握手过程与应用场景(附对比图)

🌐 引言

在网络通信中,TCP(传输控制协议)和UDP(用户数据报协议)是两大核心传输层协议。它们各有优劣,适用于不同场景。本文将用图文对比+实战示例,帮你彻底理解两者的区别!

🔍 一、核心区别对比表

特性TCPUDP
连接方式面向连接(需握手)无连接(直接发送)
可靠性✅ 可靠(确认重传机制)❌ 不可靠(可能丢包)
数据顺序✅ 保证顺序❌ 不保证顺序
传输效率⚠️ 较低(需额外控制开销)⚡ 极高(无控制字段)
流量控制✅ 滑动窗口机制❌ 无控制
拥塞控制✅ 动态调整速率❌ 无控制
头部大小20-60字节仅8字节
典型应用HTTP/HTTPS、FTP、SSH视频流、DNS、在线游戏

🤝 二、TCP的三次握手与四次挥手(图解)

1. 三次握手建立连接

Client Server SYN=1, seq=x (我要连接) SYN=1, ACK=1, seq=y, ack=x+1 (我准备好了,你呢?) ACK=1, seq=x+1, ack=y+1 (确认!开始通信) Client Server

目的:同步初始序列号(ISN),确保双方收发能力正常。

2. 四次挥手断开连接

Client Server FIN=1, seq=u (我要断开) ACK=1, ack=u+1 (收到请求) FIN=1, seq=v (我也要断开) ACK=1, ack=v+1 (确认断开) Client Server

为什么需要四次?

因为TCP是全双工的,两端需分别确认关闭。

🎯 三、UDP的通信流程(图解)

Sender Receiver 直接发送数据包(无握手) 可能丢失、乱序或重复 Sender Receiver

特点

  • 像寄平信,不关心对方是否收到
  • 头部仅8字节(源端口+目标端口+长度+校验和)

💡 四、如何选择TCP还是UDP?

✅ 用TCP的场景

  • 需要可靠传输(如文件下载、网页访问)
  • 需保证数据顺序(如数据库同步)
  • 容忍一定延迟(如电子邮件)

✅ 用UDP的场景

  • 实时性优先(如视频会议、直播)
  • 高频小数据包(如DNS查询、游戏战斗数据)
  • 广播/组播(如IPTV)

☕ 五、Java实战代码示例

1. TCP客户端/服务端

TCP服务端(接收数据)

import java.io.*;
import java.net.*;
public class TCPServer {public static void main(String[] args) throws IOException {ServerSocket serverSocket = new ServerSocket(8888);System.out.println("TCP Server启动,监听端口 8888...");Socket clientSocket = serverSocket.accept();BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));String inputLine;while ((inputLine = in.readLine()) != null) {System.out.println("收到TCP消息: " + inputLine);}}
}

TCP客户端(发送数据)

import java.io.*;
import java.net.*;
public class TCPClient {public static void main(String[] args) throws IOException {Socket socket = new Socket("localhost", 8888);PrintWriter out = new PrintWriter(socket.getOutputStream(), true);out.println("Hello TCP!");System.out.println("TCP消息已发送");socket.close();}
}

2. UDP客户端/服务端

UDP服务端(接收数据)

import java.net.*;
public class UDPServer {public static void main(String[] args) throws IOException {DatagramSocket socket = new DatagramSocket(9999);byte[] buffer = new byte[1024];System.out.println("UDP Server启动,监听端口 9999...");DatagramPacket packet = new DatagramPacket(buffer, buffer.length);socket.receive(packet);String message = new String(packet.getData(), 0, packet.getLength());System.out.println("收到UDP消息: " + message);}
}

UDP客户端(发送数据)

import java.net.*;
public class UDPClient {public static void main(String[] args) throws IOException {DatagramSocket socket = new DatagramSocket();InetAddress address = InetAddress.getByName("localhost");String message = "Hello UDP!";byte[] buffer = message.getBytes();DatagramPacket packet = new DatagramPacket(buffer, buffer.length, address, 9999);socket.send(packet);System.out.println("UDP消息已发送");}
}

📌 六、总结

  • TCP = 电话通话(可靠但慢)
  • UDP = 对讲机喊话(快速但可能听不清)
  • 选择协议时,先问自己:“我更怕数据丢失,还是更怕延迟?”

❓ 互动问题

你在项目中用过UDP吗?遇到了哪些挑战?欢迎评论区讨论!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/903401.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32F103C8T6信息

STM32F103C8T6 完整参数列表 一、核心参数 内核架构‌ ARM Cortex-M3 32位RISC处理器 最大主频:72 MHz(基于APB总线时钟) 运算性能:1.25 DMIPS/MHz(Dhrystone 2.1基准) 总线与存储‌ 总线宽度&#xff…

WPF-遵循MVVM框架创建图表的显示【保姆级】

文章速览 1、技术栈实现步骤1、创建WPF工程项目2、引入框架 Caliburn.Micro、数据可视化库ScottPlot.WPF3、创建文件夹,并创建相应的View & ViewModel4、创建启动类5、将启动类设置为启动项6、编写View7、编写VM8、将VM和View中的图表进行绑定9、备注 示例效果 …

kafka理论学习汇总

基础知识 基本简介 Kafka 是一个分布式流式处理平台,是一种分布式的,基于发布/订阅的消息系统。 Kafka特点: 1. 同时为发布和订阅提供高吞吐量 Kafka 的设计目标是以时间复杂度为 O(1) 的方式提供消息持久化能力,即使对 TB 级以…

【亚马逊云】AWS Wavelength 从理论讲解到实验演练

🪪 本文作者:许业宝 ✍️ 作者信息: 🌞 VSTECS 云解决方案架构师 | AWS Ambassador | 🪪 AWS Community Builder | 亚马逊云科技技能云博主 ⭐ 已获六项 AWS 认证 | CKA、CKS认证 | …

ORACLE DATAGUARD遇到GAP增量恢复方式修复RAC环境备机的实践

ORACLE DATAGUARD技术是一个常用的数据保护机制,在DATAGUARD运行过程中,遇到异常导致备机不同步,而主库的归档日志也被清理,此时出现GAP,无法同步;就需要人工处理;对于小型数据库重新全量同步数…

Java24 抗量子加密:后量子时代的安全基石

一、量子计算威胁与 Java 的应对 随着量子计算机的快速发展,传统加密算法面临前所未有的挑战。Shor 算法可在多项式时间内破解 RSA、ECC 等公钥加密体系,而 Grover 算法能将对称加密的暴力破解效率提升至平方根级别。据 NIST 预测,具备实用价…

day005

文章目录 1. Linux系统核心文件1.1 查看系统版本信息1.1.1 /etc/os-release1.1.2 hostnamectl 1.2 查看主机名并修改1.2.1 hostname1.2.2 cat /etc/hostname1.2.3 hostnamectl 1.3 查看Linux内核版本1.3.1 uname -r1.3.2 hostnamectl 1.4 查看网卡信息并修改1.4.1 nmtui 网络管…

常用财务分析指标列表

财务分析指标是企业财务管理和决策的重要工具,不同需求人群在各自的场景中运用这些指标来做出决策。企业管理者需要通过财务分析指标来评估企业经营状况、制定战略和决策;投资者利用这些指标来评估投资价值和风险;债权人通过财务分析指标来评…

删除非今天日期文件夹--批处理脚本

echo off setlocal enabledelayedexpansion REM ----- 配置部分 ----- set “target_dirK:\360downloads\Software” set “log_file%temp%\delete_folders.log” REM ----- 管理员权限检查 ----- NET FILE >NUL 2>&1 || ( echo 需要以管理员权限运行! …

QT创建软件登录界面(14)

文章目录 一、本章说明二、登录界面设计2.1 添加登录窗口2.2 设置登录窗口布局2.3 主函数中创建登录窗口对象2.4 登录窗口头文件与c文件2.5 源文件添加三、注意四、源码项目文件一、本章说明 注:本节为【基于STM的环境监测系统(节点+云服务器存储+QT界面设计)】项目第14篇文…

小天互连即时通讯音视频功能

小天互连即时通讯的音视频功能是核心功能及优势之一,小天互连即时通讯采用先进的音视频编解码技术,即使在网络环境不好的情况下,也能智能优化保证会议稳定进行。因此可以让远程开会也变得和面对面交流一样的便捷,极大地提升了沟通…

【LInux网络】数据链路层 - 深度理解以太网和APR协议

📢博客主页:https://blog.csdn.net/2301_779549673 📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! &…

【零基础入门】ASP.NET Core快速搭建第一个Web应用

一、为什么选择ASP.NET Core? 跨平台支持:可在Windows/macOS/Linux系统运行 高性能:比传统ASP.NET框架快10倍以上 开源生态:活跃的开发者社区和丰富的NuGet包 云原生支持:完美适配Docker和Kubernetes部署 二、开发…

AT2401C与RFX2401C问题处理资料

1、AT2401C 可以 PIN 对 PIN 替代 RFX2401C 吗? 答:AT2401C 可以 PIN 对 PIN 替换 RFX2401C;同时 CB2401 也可以 PIN 对 PIN 替换 RFX2401C;我们主要推 AT2401C 这款芯片,如果客户产 品需要过认证或者应用于音频产品建…

Redis-缓存应用 本地缓存与分布式缓存的深度解析

Redis缓存场景与策略:本地缓存与分布式缓存的深度解析 在当今高并发、低延迟的互联网架构中,缓存技术是优化系统性能的核心手段之一。Redis作为分布式缓存的标杆,与本地缓存共同构成了缓存体系的两大支柱。然而,两者的适用场景与…

LinuxAgent开源程序是一款智能运维助手,通过接入 DeepSeek API 实现对 Linux 终端的自然语言控制,帮助用户更高效地进行系统运维工作

一、软件介绍 文末提供程序和源码下载 LinuxAgent 开源程序是基于LLM大模型的Linux智能运维助手。通过接入DeepSeek API实现对Linux终端的自然语言控制,帮助用户更高效地进行系统运维工作。 二、版本特性对比 特性v1.4.1 1.4.1 版v2.0.3 2.0.3 版v2.0.4 2.0.4…

Shadertoy着色器移植到Three.js经验总结

Shadertoy是一个流行的在线平台,用于创建和分享WebGL片段着色器。里面有很多令人惊叹的画面,甚至3D场景。本人也移植了几个ShaderToy上的着色器。本文将详细介绍移植过程中需要注意的关键点。 1. 基本结构差异 想要移植ShaderToy的shader到three.js&am…

StarRocks SRCA 考试心得总结

文章目录 前言0 什么是StarRcoks?1. 关于 SRCA 考试2. 备考资料与学习方式2.1 官方文档与教程2.2 在线培训课程2.3 实战演练 3. 重点考试内容3.1 StarRocks 架构与原理3.2 数据导入与导出3.3 SQL 查询优化3.4 性能调优 4. 备考建议4.1 多做实操4.2 注重考试中的细节…

什么是 Spring Profiles 以及如何在 Spring Boot 中使用:配置与实践指南

在现代应用开发中,应用程序通常需要在不同环境(如开发、测试、生产)中运行,每个环境可能有不同的配置(如数据库、日志级别、消息队列)。Spring Profiles 是 Spring 框架提供的一项功能,用于根据…

Spring Cloud Gateway限流:基于Redis的请求限流实现

文章目录 引言一、Spring Cloud Gateway限流基础1.1 限流机制概述1.2 Redis分布式限流原理 二、实现基于Redis的限流方案2.1 环境准备与依赖配置2.2 配置限流策略2.3 自定义限流响应 三、高级应用与最佳实践3.1 动态限流规则调整3.2 优先级与降级策略3.3 监控与告警 总结 引言 …