JavaEE 第18节 TCPUDP优缺点(对比)

news2024/11/27 11:58:02

目录

  • 前言
  • 1、UDP(User Datagram Protocol)
    • 优点
    • 缺点
  • 2、TCP(Transmission Control Protocol)
    • 优点
    • 缺点
  • 3、总结

前言

基于TCP/IP协议栈,TCP和UDP属于传输层协议。在Java生态中也分别提供了相关套接字(Socket)1的API,方便网络编程。
这两种协议各有优势,我们在网络编程中要根据他们的特性,选择合适的协议进行网络编程。
接下来的文章小编会详细讲解UDP/TCP两种协议的优缺点以及相关应用场景。在选择协议时,给大家做个参考。
另外,本文中有一些专业名词带有脚注,点击脚注可以查看详细解释

1、UDP(User Datagram Protocol)

此协议面向数据报2(Datagram)。

优点

  1. 传输速度快:
      • UDP是无连接3的协议,不需要建立连接,数据可以直接发送。由于没有复杂的连接建立和管理过程,UDP传输速度更快。
      • UDP没有重传机制,也没有ACK确认机制,这使得它非常适合需要快速传输的小数据量场景。
  1. 低开销:
      • UDP不维护连接状态,也不进行流量控制和拥塞控制,因此协议头开销较小,数据包处理速度快。
  2. 支持多播和广播:
      • UDP支持将数据包发送给多个接收方(多播)或网络中的所有设备(广播),非常适合视频流、实时音频、在线游戏等需要分发数据的场景。
  3. 实现简单:
      • UDP协议相对简单,容易实现和管理。由于不需要复杂的连接管理和状态维护,开发人员可以更直接地控制数据传输过程。

缺点

  1. 不可靠传输:
      • UDP是无连接通信的,不提供数据包的确认、重传和序列控制,数据包可能会丢失、重复或乱序到达。这意味着应用层必须自行处理这些问题。
      • 对于数据传输可靠性要求高的应用,UDP不合适,除非应用层自行实现可靠性机制。
  2. 无流量控制:
      • UDP不具备流量控制机制,发送方可以以任意速率发送数据。这可能导致网络拥塞或接收方过载,从而丢弃数据包。
  3. 无阻塞控制:
      • UDP没有拥塞控制机制,当网络出现拥塞时,UDP不会自动降低发送速率,可能加剧网络拥塞情况。
  4. 数据包大小限制:
      • UDP的数据报大小受到MTU(最大传输单元)的限制,一般最大为64KB。超过这一限制的数据需要分片传输,增加了数据包丢失的风险。
    适用场景

2、TCP(Transmission Control Protocol)

TCP属于面向字节流4进行通信。

优点

  1. 可靠性高:
      •TCP通过确认机制和重传机制保证数据的可靠传输。如果数据包丢失,TCP会自动重传丢失的数据。

      •TCP保证数据包按序到达,并且不会重复传输数据包。

  2. 流量控制:
      •TCP提供流量控制机制,通过滑动窗口机制确保发送方不会以超过接收方处理能力的速率发送数据,防止网络拥塞。

  3. 阻塞控制:
      •TCP具有拥塞控制机制,通过慢启动、拥塞避免、快速重传和快速恢复等算法,动态调整传输速率,避免网络拥塞。

  4. 连接管理:
      •TCP是面向连接的协议,在数据传输之前需要通过三次握手建立连接,并通过四次挥手关闭连接,确保通信的可靠性。

  5. 数据完整性:
      •TCP提供数据完整性检查,通过校验和(checksum)验证数据在传输过程中是否损坏,确保接收方收到的数据是完整且未被损坏的。

缺点

  1. 开销大:
     •TCP的可靠性、流量控制和拥塞控制机制引入了较大的开销,例如需要维护连接状态、发送和处理ACK、执行重传等。这会增加通信延迟和资源消耗。

  2. 有较大延迟:
     •由于TCP的可靠性机制,数据包的传输顺序和完整性都受到严格控制,可能会导致延迟。这对于实时性要求高的应用(如视频会议、在线游戏等)是不利的。

3、总结

  • UDP的优势在于速度快、延迟低、开销小,适用于实时性要求高、不需要保证数据可靠性的场景,如视频流、在线游戏、语音通信等。但由于它不保证数据的可靠性和顺序性,因此不适用于数据完整性要求高的应用。
  • TCP提供了可靠的数据传输、顺序控制、流量控制和拥塞控制,适用于需要保证数据完整性和可靠性的场景,如文件传输、电子邮件、网页浏览等。但由于其较高的开销和延迟,它在实时性要求高的场景中表现不如UDP。

另外还有一点需要注意,两个协议都支持全双工:
在同一时刻既可以传输数据,也可以接收数据。
反之,半双工指的就是单向传输,轮流通信。
以上是两种不同的通信模式。

在这里插入图片描述


  1. 什么是套接字(Socket)?
    Socket,英文原意是“插座”。这是网络编程中的一个重要的概念,由操作系统内核以及相关网络协议栈实现。它是一种用于在计算机网络中进行通信的端点(Endpoint)。换句话说,它就是一个“插座”,不同设备连接统一的“插座”就可以实现通信。 ↩︎

  2. 面向数据报(Datagram-Oriented)是一种网络通信方式,在这种方式中,数据以独立的、无连接的数据包(称为数据报,Datagram)形式进行传输。每个数据报是一个独立的消息单元,包含了完整的发送和接收信息。数据报的传输过程不需要建立或维护一个持久的连接。 ↩︎

  3. 在通信中有连接和无连接是两种相反的通信方式。连接指的是通信双方通过“协商”,规定好通信时间以及通信方式,在开始进行数据传输。因此有链接意味着数据传输是可靠的。无连接则相反,在进行数据传出前,通信双方不会事先进行通信,这种传输方式效率高,但是传输数据可能出现错误,是不可靠的。 ↩︎

  4. 面向字节流是一种数据传输方式,指的是数据以连续的字节序列进行传输,数据流没有明确的消息或记录边界。换句话说,发送方和接收方通过一条“流”来连续地发送和接收字节,如何对这些字节进行分割和解释完全由应用程序自行决定。 ↩︎

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

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

相关文章

基于OpenCV+MFC的KCF测速软件

基于OpenCVMFC的KCF测速软件 引言原理介绍使用介绍(1)主界面(2)打开视频(3)点击KCF测速(4)框选待检测目标(5)测速结果 资源链接(包含源码&#xf…

How do I do function calling in Azure Openai using the javascript sdk

题意:如何使用 JavaScript SDK 在 Azure OpenAI 中进行函数调用? 问题背景: I want to be able to call functions based on the user input, I could do this with the openai library but cant find a way to do so in the azure openai l…

uniapp中$off没写正确引发的问题~

你们好,我是金金金。 场景 我正在使用uniapp开发微信小程序,涉及到几个页面之间的事件通信,采用的是uniapp里面的$on和&off来达到页面之间的互相通信功能如下:有一个选择城市的页面,当选择了某个城市,另…

树数据结构(Tree Data Structures)的全面指南:深度解析、算法实战与应用案例

树数据结构(Tree Data Structures)的全面指南:深度解析、算法实战与应用案例 引言 树数据结构(Tree Data Structures)作为计算机科学中的基石之一,以其独特的层次结构和分支特性,在众多领域发…

Hive SQL

一、基本数据类型 tinyint 1byte 有符号整数 smallint 2byte 有符号整数 int 4byte 有符号整数 bigint 8byte 有符号整数 boolean 布尔类型,true或者false float 单精度浮点数 double 双精度浮点数 decim…

系统数据迁移脱敏方案(word)

数据脱敏工作不仅要确保敏感信息被去除,还需要尽可能的平衡脱敏所花费的代价、使用方的业务需求等多个因素。因此,为了确保数据脱敏的过程、代价可控,得到的结果正确且满足业务需要,在实施数据脱敏时,应从技术和管理两…

stm32之I2C通信协议

文章目录 前言一、I2C通信协议二、I2C硬件电路三、I2C时序基本单元3.1 起始与终止信号3.2 发送与接收一个字节3.3 发送与接收应答 四、I2C时序分析4.1 指定地址写4.2 当前地址读4.3 指定地址读 前言 提示:本文主要用作在学习江科大自化协STM32入门教程后做的归纳总…

刷机维修进阶教程-----紫光展讯芯片修改参数 修复基带 信号的一种步骤解析【二】

上期解析了一款紫光芯片机型 改写参数的步骤。今天来讲解另外一款紫光新机型修改参数的具体步骤。同类紫光展讯 展锐芯片机型可以参考尝试 通过博文了解; 1---紫光芯片机型新款机型改写参数的步骤解析 2----了解同类芯片修改参数的常用步骤 3----列举一些紫光芯片机型开启…

OpenStack常见模块详解

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

“NoSQL数据库技术及其应用”写作框架,软考高级,系统架构设计师

论文真题 随着互联网web2.0网站的兴起,传统关系数据库在应对web2.0 网站,特别是超大规模和高并发的web2.0纯动态SNS网站上已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展…

Zookeeper的watch机制是如何工作的?

ZooKeeper Watch 概述 ZooKeeper Watch 机制类似于 Java 设计模式中的观察者模式或者监听模式,唯一的不同是不再基于线程间通信,而是基于进程间通信。 ZooKeeper Watch 机制是指,客户端在所有的读命令上告知服务端:这个节点或者…

windows 提权方式汇总

windows 提权 一、土豆(potato)家族提权 原理 土豆提权就是通过 windows 的 COM(Component Object Model,组件对象模型)类。向指定的服务器端口发送 NTLM 认证,捕获认证数据包,并修改数据包内…

【C++】—— 内存管理

【C】—— 内存管理 1 C/C 的内存划分 1.1 C/C 的内存分布1.2 C/C 的内存分布练习 2 C语言 中动态内存管理方式:malloc/calloc/realloc/free3 C 内存管理方式3.1 new / delete 操作内置类型3.2 new 和 delete 操作自定义类型3.2.1 new 和 delete 操作自定义类型基础…

layui栅格布局设置列间距不起作用

layui栅格布局支持设置列间距,只需使用预置类layui-col-space*即可。不过实际使用时却始终看不到效果。   根据layui官网文档的说明,只需要在行所在div元素的class属性中增加layui-col-space*即可出现列间距。如下图所示:   但是实际使用…

【MySQL】MySQL 表的增删改查(进阶)

欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎指出~ 目录 约束类型 not null 非空 unique 唯一 default 指定默认值 primary key 主键 foreign key 外键 check字句 检查 表设计 确定实体 实体之间的关系 聚合查询 聚合函数…

基于SSM的学生信息管理系统的设计与实现 (含源码+sql+视频导入教程+文档+VISIO图)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于SSM的学生信息管理系统12拥有三种角色:学生、教师、管理员 学生:选课、查看已选课程、查看成绩 教师:成绩管理 管理员:课程管理、学生…

ai变声:视频怎么变音?分享6个语音变声器,视频变声不再难!

想过如何让自己的直播内容更吸引人吗?你是否希望通过变声器来打造独特的声音效果?或者,如何用创意声音提升观众的互动体验呢?随着直播行业的不断发展,每位主播都在努力寻找吸引观众的独特方式,而变声器正是…

【电脑使用耳机录音注意事项】

文章目录 电脑音设置 电脑音设置 打开声音设置:右键小喇叭 → 选择“声音(S)”→选择 “录制”: 选择 “阵列麦克风” 调整声音大小: 音频增强设置

AI大模型编写多线程并发框架(六十二):限流和并发度优化

系列文章目录 文章目录 系列文章目录前言一、项目背景二、第三轮对话-补充异步执行代码三、第四轮对话-增加限流器四、第五轮对话-抽取限流器接口五、第六轮对话-修改并发度三、参考文章 前言 在这个充满技术创新的时代,AI大模型正成为开发者们的新宠。它们可以帮助…

何为MethodHandles?

最近在梳理ThreadPoolExecutor,无意间看到其内部类Worker实现了一个名字叫做AbstractQueuedSynchronizer的抽象类。看到它,我便想起当年为了面试而疯狂学习这个知识点的场景。不过这种临时抱佛脚的行为,并未给我带来即时的收益。也是这次的疯…