TCP和UDP区别
TCP(Transmission Control Protocol,传输控制协议)和UDP(User Datagram Protocol,用户数据报协议)都是Internet协议套件中的传输层协议,但它们在工作方式、特性和适用场景上有显著区别:
-
连接方式:
- TCP 是面向连接的协议。在数据传输前,TCP会先通过三次握手建立连接,确保双方都准备好进行通信,类似于打电话前需要先拨号接通。
- UDP 是无连接的协议。它不建立正式的连接就可以直接发送数据报,类似于写信并邮寄出去,不确认对方是否在家或能否接收。
-
数据传输可靠性:
- TCP 提供可靠的数据传输服务,确保数据包无差错、不丢失、不重复且按序到达。TCP通过序列号、确认应答、重传机制和流量控制等策略来保证数据的可靠性。
- UDP 不保证数据包的可靠传输,它只是尽可能快地将数据包发送出去,由上层应用负责处理数据完整性、顺序和丢包问题。因此,UDP可能遇到数据丢失、乱序等问题。
-
数据结构:
- TCP 是基于字节流的,它将数据看作一个无界的字节流,并没有明确的数据边界,适合连续数据的传输。【需要对字节流进行分割和组装】
- UDP 是基于数据报的,每个UDP数据报都是一个独立的信息单元,包含完整的源地址、目的地址以及数据,适合一次性传输小块数据。【有明确的数据边界,数据报是独立的实体】
-
资源消耗和延迟:
- TCP 需要维护连接状态和执行复杂的错误检测与恢复机制,因此对系统资源的需求更高,可能导致较高的延迟。
- **UDP 由于无需建立连接和维护连接状态,其头部开销小,处理速度快,延迟较低,更适用于对实时性要求高的应用。
-
应用场景:
- TCP 适用于对数据完整性、顺序和可靠性要求高的应用,如Web浏览器、电子邮件、文件传输(FTP)、远程登录(SSH)等。
- UDP 适用于对实时性要求高、能容忍一定数据丢失的应用,如在线视频、直播、语音通话、在线游戏、DNS查询等。
概念讲解:
错误检查:
假设Alice要通过TCP给Bob发送一连串的数据包,每个数据包都有一个唯一的序列号。
-
发送数据:Alice首先发送数据包1,这个数据包包含了序列号1,表示这是第一个数据包。
-
等待确认:Bob收到数据包1后,他会向Alice发送一个确认应答(ACK),这个ACK中会包含他期望接下来收到的数据包的序列号。既然Bob已经收到了序列号为1的数据包,他的ACK就会声明他下一个期待接收的是序列号为2的数据包。
-
超时重传:如果Alice没有在预期的时间内收到针对数据包1的ACK(可能是因为数据包在网络中丢失了或者ACK在返回途中丢失),Alice会启动一个计时器。当这个计时器到达设定的超时时间后,Alice就会认为数据包1没有成功到达Bob,于是她会重新发送数据包1。
-
接收与排序:一旦Bob收到了重新发送的数据包1,他会再次发送ACK确认收到。这样,即使最初的数据包1丢失了,通过重传机制,Bob最终还是能够完整无误地接收到所有数据包,并且按照序列号对它们进行排序。
重传机制:
假设Alice要通过TCP给Bob发送一连串的数据包,每个数据包都有一个唯一的序列号。
-
发送数据:Alice首先发送数据包1,这个数据包包含了序列号1,表示这是第一个数据包。
-
等待确认:Bob收到数据包1后,他会向Alice发送一个确认应答(ACK),这个ACK中会包含他期望接下来收到的数据包的序列号。既然Bob已经收到了序列号为1的数据包,他的ACK就会声明他下一个期待接收的是序列号为2的数据包。
-
超时重传:如果Alice没有在预期的时间内收到针对数据包1的ACK(可能是因为数据包在网络中丢失了或者ACK在返回途中丢失),Alice会启动一个计时器。当这个计时器到达设定的超时时间后,Alice就会认为数据包1没有成功到达Bob,于是她会重新发送数据包1。
-
接收与排序:一旦Bob收到了重新发送的数据包1,他会再次发送ACK确认收到。这样,即使最初的数据包1丢失了,通过重传机制,Bob最终还是能够完整无误地接收到所有数据包,并且按照序列号对它们进行排序。
重传类型包括:
-
超时重传:TCP为每个发送的数据段设置一个定时器(称为重传定时器或RTO,Retransmission TimeOut)。如果在预期的时间内没有收到对方确认该数据段的ACK(Acknowledgment)报文,就认为数据段丢失或者网络中存在严重延迟,这时会触发超时重传。发送方会重新发送未被确认的数据段。
-
快速重传:这是对超时重传的一种补充。当接收方检测到数据包的顺序混乱(比如收到了序列号更高的数据包但期待的是更低序列号的数据包),它会立即发送重复的ACK,告知发送方某个特定序列号的数据包未到达。如果发送方短时间内收到多个重复确认同一个序列号的ACK,不用等待重传定时器超时,TCP会快速反应并重传被认为丢失的数据包,这样可以更快地恢复数据流,减少延迟。
-
选择性确认(SACK,Selective Acknowledgment):在某些情况下,接收方可能已经收到了数据流中的某些数据包,而另外一些则丢失了。选择性确认允许接收方在ACK中具体指出哪些数据片段已经正确接收到,这样发送方就可以只重传那些确实丢失的数据包,而不是从最后一个确认的数据包开始全部重传,提高了效率。
相关文章:
TCP和UDP区别
TCP(Transmission Control Protocol,传输控制协议)和UDP(User Datagram Protocol,用户数据报协议)都是Internet协议套件中的传输层协议,但它们在工作方式、特性和适用场景上有显著区别ÿ…...

[Shell编程学习路线]——编制第一个shell脚本入门篇
🏡作者主页:点击! 🛠️Shell编程专栏:点击! ⏰️创作时间:2024年6月12日10点23分 🀄️文章质量:93分 目录 ——前言—— 💥常用的几种shell Bash Sh …...
python数据处理分析库(一)
目录 一、NumPy 二、Pandas 三、Matplotlib and Seaborn 一、NumPy 场景:处理大规模数组和矩阵运算,可以用于科学计算、数据预处理简单示例: import numpy as npdata np.array([1, 2, 3, 4, 5]) mean np.mean(data) std_dev np.std(da…...

使用Transformer进行抄袭检测
动机 在许多行业中,尤其是在学术界,抄袭是一个重大问题。随着互联网和开放信息的兴起,这种现象甚至变得更加严重,任何人都可以通过点击访问特定主题的任何信息。 基于这一观察,研究人员一直在尝试使用不同的文本分析…...

基于深度学习的电池健康状态预测(Python)
电池的故障预测和健康管理PHM是为了保障设备或系统的稳定运行,提供参考的电池健康管理信息,从而提醒决策者及时更换电源设备。不难发现,PHM的核心问题就是确定电池的健康状态,并预测电池剩余使用寿命。但是锂电池的退化过程影响因…...

【吊打面试官系列-Mysql面试题】MySQL 如何优化 DISTINCT?
大家好,我是锋哥。今天分享关于 【MySQL 如何优化 DISTINCT?】面试题,希望对大家有帮助; MySQL 如何优化 DISTINCT? DISTINCT 在所有列上转换为 GROUP BY,并与 ORDER BY 子句结合使用。 SELECT DISTINCT t…...

企业IT运维管理体系-总体规划
企业IT运维管理体系-总体规划 企业IT运维管理体系的总体规划通过科学的调研、分析、设计和建设,提升管理成熟度、增强服务能力、实现技术创新和优化资源配置。重点在于建立组织保障体系、制定运维制度、构建运维平台和完善度量指标。通过明确运维治理模式和外包管理…...

RabbitMQ-Stream(高级详解)
文章目录 什么是流何时使用 RabbitMQ Stream?在 RabbitMQ 中使用流的其他方式基本使用Offset参数chunk Stream 插件服务端消息偏移量追踪示例 示例应用程序RabbitMQ 流 Java API概述环境创建具有所有默认值的环境使用 URI 创建环境创建具有多个 URI 的环境 启用 TLS…...
Web前端图片并排显示的艺术与技巧
Web前端图片并排显示的艺术与技巧 在Web前端开发中,图片并排显示是一种常见的布局需求。然而,实现这一目标并非易事,需要掌握一定的技巧和艺术。本文将从四个方面、五个方面、六个方面和七个方面深入探讨Web前端图片并排显示的奥秘。 四个方…...
豆瓣电影信息爬虫【2024年6月】教程
豆瓣电影信息爬虫【2024年6月】教程,赋完整代码 在本教程中,我们将使用以下技术栈来构建一个爬虫,用于爬取豆瓣电影列表页面的信息: 完整代码放到最后 ; 完整代码放到最后 ; 完整代码放到最后 ;…...

Flutter- AutomaticKeepAliveClientMixin 实现Widget保持活跃状态
前言 在 Flutter 中,AutomaticKeepAliveClientMixin 是一个 mixin,用于给 State 类添加能力,使得当它的内容滚动出屏幕时仍能保持其状态,这对于 TabBarView 或者滚动列表中使用 PageView 时非常有用,因为这些情况下你…...
《计算机组成原理》期末复习题节选
第三章–存储系统 3.1 存储器性能指标 核心公式: 存储容量存储字数*字长 ,存储字数表示存储器的地址空间的大小,字长表示一次存取操作的数据量.数据传输率数据宽度/存储周期 1、设机器字长为32位,一个容量为16MB的存储器&…...

NSSCTF中的popchains、level-up、 What is Web、 Interesting_http、 BabyUpload
目录 [NISACTF 2022]popchains [NISACTF 2022]level-up [HNCTF 2022 Week1]What is Web [HNCTF 2022 Week1]Interesting_http [GXYCTF 2019]BabyUpload 今日总结: [NISACTF 2022]popchains 审计可以构造pop链的代码 <php class Road_is_Long{public $…...

量产维护 | 芯片失效问题解决方案:从根源找到答案
芯片失效分析是指对电子设备中的故障芯片进行检测、诊断和修复的过程。芯片作为电子设备的核心部件,其性能和可靠性直接影响整个设备的性能和稳定性。 随着半导体技术的迅速发展,芯片在各个领域广泛应用,如通信、计算机、汽车电子和航空航天等。 因此,对芯片故障原因进行…...
Linux忘记密码的解决方法
1、进入GRUB页面,选择对应的内核按下‘e’键; 2、进入内核修改信息界面,找到Linux这一行,在这一行的末尾加上 init/bin/sh 按下ctrlx进入单用户模式 3、进入单用户后,重新挂载根目录,使其可写࿱…...
数据结构(DS)学习笔记(二):数据类型与抽象数据类型
参考教材:数据结构C语言版(严蔚敏,杨伟民编著) 工具:XMind、幕布、公式编译器 正在备考,结合自身空闲时间,不定时更新,会在里面加入一些真题帮助理解数据结构 目录 1.1数据…...

【C++进阶】模板与仿函数:C++编程中的泛型与函数式编程思想
📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C “ 登神长阶 ” 🤡往期回顾🤡:栈和队列相关知识 🌹🌹期待您的关注 🌹🌹 ❀模板进阶 🧩<&…...

华安保险:核心系统分布式升级,提升保费规模处理能力2-3倍 | OceanBase企业案例
在3月20日的2024 OceanBase数据库城市行的活动中,安保险信息科技部总经理王在平发表了以“保险行业核心业务系统分布式架构实践”为主题的演讲。本文为该演讲的精彩回顾。 早在2019年,华安保险便开始与OceanBase接触,并着手进行数据库的升级…...

佐西卡在美国InfoComm 2024展会上亮相投影镜头系列
6月12日至14日,2024美国视听显示与系统集成展览会将在拉斯维加斯会议中心盛大开幕。这场北美最具影响力的视听技术盛会,将汇集全球顶尖的视听解决方案,展现专业视听电子系统集成、灯光音响等领域的最新技术动态。 在这场科技盛宴中࿰…...

【权威出版/投稿优惠】2024年智慧城市与信息化教育国际会议(SCIE 2024)
2024 International Conference on Smart Cities and Information Education 2024年智慧城市与信息化教育国际会议 【会议信息】 会议简称:SCIE 2024 大会时间:点击查看 大会地点:中国北京 会议官网:www.iacscie.com 会议邮箱&am…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...

Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...