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

目录

  • 前言
  • 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.rhkb.cn/news/409909.html

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

相关文章

C++资料电子书资源PDF免费分享

C电子书 这里写目录标题 C电子书目录资源获取 目录 《数据结构(C语言版)》(严蔚敏 吴伟明编著).pdf 7.6MB 《C程序设计题解与上机指导》(第二版).谭浩强.pdf 7.0MB 《C程序设计(第四版)学习辅导》.谭浩强.扫描版.pdf 13.1MB 《C程序设计》第一版(谭浩强&#xff09…

反汇编快速定位内核OOPS

前言 简单的说,出现内核奔溃,我们可以通过串口日志提供的信息;使用gdb反汇编出问题函数所在的文件,然后使用《disassemble /m 函数名》查看具体函数的源码和汇编码;这样能直观的看到源代码对应的汇编码干了什么&#…

大数据基础:数仓架构演变

文章目录 数仓架构演变 一、传统离线大数据架构 二、​​​​​​Lambda架构 三、Kappa架构 四、​​​​​​​​​​​​​​混合架构 五、湖仓一体架构 六、流批一体架构 数仓架构演变 20世纪70年代,MIT(麻省理工)的研究员致力于研究一种优化的技术架构&…

海明码的基本原理

海明码 一、什么是海明码二、校验位的分布方式1、奇偶校验2、海明码校验位 三、检错原理四、纠错原理 一、什么是海明码 首先来看一下百度的介绍: ‌‌海明码(‌Hamming Code)‌是一种具有检错和纠错能力的编码方式,由‌理查德汉…

下载(win10-win11)微软官方ISO镜像方法

下载Win11安装镜像。 官方下载win10地址:下载 Windows 10 官方下载win11地址:Download Windows 11 下载完成后,运行 MediaCreationTool_Win11_23H2.exe 等待完成100%跳转页面后,关闭界面即可。

IDEA工具设置默认使用maven的settings.xml文件

第一步:打开idea工具,选中 File ——> New Projects Setup ——> Settings for New Projects 第二步:先设置下自动构建项目这个选项 第三步:选中 Build Tools ——> Maven,让后就可以设置自己安转的maven和se…

鸿蒙开发5.0【基于CameraKit,通过avrecorder进行录像】

1 场景描述 录像是相机应用的最重要功能之一,录像是循环帧的捕获。本文通过CameraKit自定义相机并通过avrecorder进行录像。 2 效果图 3 自定义相机录像流程图 4 方案描述 4.1 整体描述: 总体可分为:1、相机输入,2、同时输出预览流录像流…

探索全球设计灵感:六大海外设计平台

海外设计网站对于设计师而言,不仅是灵感的源泉,更是专业成长的加速器。这些平台聚集了全球创意人士,提供了一个分享和发现最新设计趋势的环境。设计师可以通过这些网站学习行业内的创新技术,参与设计挑战,提升个人设计…

基于Python的顾客购物数据可视化分析

数据可视化分析实验 数据集简介 本文在实验中考虑到实验使用设备的性能和环境的局限性,采用了kaggle官网上的的消费者购物数据集,数据地址: https://www.kaggle.com/datasets/iamsouravbanerjee/customer-shopping-trends-dataset。 此数据…

Stable Diffusion AI绘画工具的安装与配置(MAC用户)

AI绘画的热潮席卷了整个创意行业,Stable Diffusion作为其中的翘楚,让艺术创作变得前所未有的简单。然而,对于使用Mac电脑用户来说,安装和配置Stable Diffusion可能显得有些棘手。别担心,这份详细的教程将手把手教你如何…

多功能秒达工具箱全开源源码,可自部署且完全开源的中文工具箱

简介: 多功能秒达开源工具箱源码,,可自部署且完全开源的中文工具箱,永远的自由软件,轻量级运行,全平台支持(包括ARMv8),完全类似 GPT 的支持,与高效的 UI 高…

【Java】—— Java面向对象基础:编程实例(学生信息管理)

目录 场景描述 定义学生类 创建学生对象并处理需求 代码解析 总结 在Java中,面向对象编程(OOP)是一种常用的编程范式,它允许我们创建基于现实世界的模型,通过类和对象来模拟这些模型。今天,我们将通过…

刘海屏的优雅回归?华为Mate 70 Pro定义新美学

在智能手机的发展历程中,华为Mate系列一直是高端旗舰的代表。而今,华为Mate 70 Pro的神秘面纱终于揭开,其回归的刘海屏设计和独特的寰宇舷窗设计,再次将华为的设计理念推向了新的高度。 刘海屏的回归:经典与创新的融合…

后端微服务与分布式系统

编写一篇关于后端微服务和分布式系统的文档,需要详细讨论微服务架构的核心概念、优缺点、关键技术,以及在分布式系统中的应用。以下是文档的大纲和内容概述: 后端微服务与分布式系统 1. 简介 微服务架构是一种将大型应用程序分解为一系列小…

【AI绘画】Midjourney前置/imagine与单图指令详解

文章目录 💯Midjourney前置指令/imagine什么是前置指令?/imaginepromptUpscale(放大)Variations(变化)🔄(重新生成一组图片) 💯单张图片指令Upscale (细节优化)Vary(变体…

COMSOL工业碱性电解槽(3D、双欧拉模型)

本案例通过改写COMSOL官方案例获得,使用了碱性电解槽和欧拉-欧拉(湍流)模型,阳极室和阴极室带有乳突状的结构,模型进行了人为缩小,仅供参考。其中一些参数可参考如下链接文章的说明。COMSOL碱性电解槽参数解…

public继承

三种继承的方法:public 继承/private继承/protected继承详解及区别_public继承-CSDN博客 公有继承的特点是基类的公有成员和保护成员作为派生类的成员时,它们都保持原有的状态,而基类的私有成员仍然是私有的,不能被基类的子类所访问。 错误…

关键点检测——HRNet原理详解篇

🍊作者简介:秃头小苏,致力于用最通俗的语言描述问题 🍊专栏推荐:深度学习网络原理与实战 🍊近期目标:写好专栏的每一篇文章 🍊支持小苏:点赞👍🏼、…

Windows上安装 nodejs,npm 和 yarn详细教程

1、下载Node.js 访问Node.js 官网下载,下载需要版本版本,具体操作如下 2、安装Node.js 具体安装可参考以下知乎教程 https://www.zhihu.com/question/591831850/answer/3423661990 3、配置淘宝镜像 npm config set registry https://registry.npmmirror…

UWB Tag钥匙防丢器,精准定位测距,一键找回!告别钥匙遗失焦虑

在这个快节奏的时代,我们每天穿梭于家、办公室、商场之间,手中的钥匙串仿佛成了连接生活各个角落的纽带。但你是否也曾有过这样的经历:匆忙间,那串沉甸甸的钥匙似乎在某个不经意的瞬间与你“不辞而别”,留下的是无尽的…