4.12--计算机网络之TCP篇之TCP 协议的缺陷+如何基于 UDP 协议实现可靠传输?--(复习+大总结)---沉下心来(加油呀)

news2025/2/1 7:16:08

TCP 协议四个方面的缺陷:

1.升级 TCP 的工作很困难;

TCP 协议是在内核中实现的,应用程序只能使用不能修改,如果要想升级 TCP 协议,那么只能升级内核。
而升级内核这个工作是很麻烦的事情

2.TCP 建立连接的延迟;

大多数网站都是使用 HTTPS 的,这说明在 TCP 三次握手之后,还需要经过 TLS 四次握手后,才能进行 HTTP 数据的传输,这在一定程序上增加了数据传输的延迟。

3.TCP 存在队头阻塞问题;

TCP 是字节流协议,TCP 层必须保证收到的字节数据是完整且有序的,如果序列号较低的 TCP 段在网络传输中丢失了,即使序列号较高的TCP 段已经被接收了,应用层也无法从内核中读取到这部分数据

4.网络迁移需要重新建立 TCP 连接;

当移动设备的网络从 4G 切换到 WIFI 时,意味着 IP 地址变化了,那么就必须要断开连接,然后重新建立 TCP 连接。

而建立连接的过程包含 TCP 三次握手和 TLS 四次握手的时延,以及 TCP
慢启动的减速过程,给用户的感觉就是网络突然卡顿了一下,因此连接的迁移成本是很高的

**

QUIC 协议:

基于 UDP 协议实现的可靠传输协议的成熟方案,已经应用在了 HTTP/3。

1.QUIC 是如何实现可靠传输的?

设计好协议的头部字段。

拿 HTTP/3 举例子,在 UDP 报文头部与 HTTP 消息之间,共有 3 层头部:
在这里插入图片描述
1.Packet Header

在这里插入图片描述
Packet Header 细分这两种:

1.Long Packet Header 用于首次建立连接。
2.Short Packet Header 用于日常传输数据。

QUIC 也是需要三次握手来建立连接的,主要目的是为了协商连接 ID。
协商出连接 ID 后,后续传输时,双方只需要固定住连接 ID,从而实现连接迁移功能

Packet Number 单调递增的两个好处:

1.可以更加精确计算 RTT,没有 TCP 重传的歧义性问题;
2.可以支持乱序确认,因为丢包重传将当前窗口阻塞在原地,而 TCP 必须是顺序确认的,丢包时会导致窗口不滑动

2.QUIC Frame Header

在这里插入图片描述

每一个 Frame 都有明确的类型,针对类型的不同,功能也不同,自然格式也不同。
以下为 Stream 类型的 Frame 格式,Stream 可以认为就是一条 HTTP 请求:

在这里插入图片描述

1.Stream ID 作用:多个并发传输的 HTTP 消息,通过不同的 Stream ID 加以区别,类似于 HTTP2 的 Stream ID;
2.Offset 作用:类似于 TCP 协议中的 Seq 序号,保证数据的顺序性和可靠性;
3.Length 作用:指明了 Frame 数据的长度

通过 Stream ID + Offset 字段信息实现数据的有序性,通过比较两个数据包的 Stream ID 与 Stream Offset ,如果都是一致,就说明这两个数据包的内容一致

总结:
QUIC 通过单向递增的 Packet Number,配合 Stream ID 与 Offset 字段信息,可以支持乱序确认而不影响数据包的正确组装,摆脱了TCP 必须按顺序确认应答 ACK 的限制,解决了 TCP 因某个数据包重传而阻塞后续所有待发送数据包的问题

2.QUIC 是如何解决 TCP 队头阻塞问题的?

QUIC 也借鉴 HTTP/2 里的 Stream 的概念,在一条 QUIC 连接上可以并发发送多个 HTTP 请求 (Stream)。

但是 QUIC 给每一个 Stream 都分配了一个独立的滑动窗口,这样使得一个连接上的多个 Stream 之间没有依赖关系,都是相互独立的,各自控制的滑动窗口。

假如 Stream2 丢了一个 UDP 包,也只会影响 Stream2 的处理,不会影响其他 Stream,与 HTTP/2 不同,HTTP/2 只要某个流中的数据包丢失了,其他流也会因此受影响。
在这里插入图片描述
3.QUIC 是如何做流量控制的?

QUIC 实现流量控制的方式:

1.通过 window_update 帧告诉对端自己可以接收的字节数,这样发送方就不会发送超过这个数量的数据。
2.通过 BlockFrame 告诉对端由于流量控制被阻塞了,无法发送数据

QUIC 实现了两种级别的流量控制,分别为 Stream 和 Connection 两种级别:

1.Stream 级别的流量控制:Stream 可以认为就是一条 HTTP 请求,每个 Stream 都有独立的滑动窗口,所以每个 Stream 都可以做流量控制,防止单个 Stream 消耗连接(Connection)的全部接收缓冲。
2.Connection 流量控制:限制连接中所有 Stream 相加起来的总字节数,防止发送方超过连接的缓冲容量。
Connection 级别的流量窗口,其接收窗口大小就是各个 Stream 接收窗口大小之和。

4.QUIC 是如何迁移连接的?
QUIC 协议没有用四元组的方式来“绑定”连接,而是通过连接 ID来标记通信的两个端点,客户端和服务器可以各自选择一组 ID 来标记自己,因此即使移动设备的网络变化后,导致 IP 地址变化了,只要仍保有上下文信息(比如连接 ID、TLS 密钥等),就可以“无缝”地复用原连接,消除重连的成本,没有丝毫卡顿感,达到了连接迁移的功能。

5.QUIC 对拥塞控制改进

QUIC 是处于应用层的,应用程序层面就能实现不同的拥塞控制算法,不需要操作系统,不需要内核支持

QUIC 可以随浏览器更新,QUIC 的拥塞控制算法就可以有较快的迭代速度。

QUIC 处于应用层,所以就可以针对不同的应用设置不同的拥塞控制算法,这样灵活性就很高了

6.QUIC 更快的连接建立

HTTP/3 在传输数据前虽然需要 QUIC 协议握手,这个握手过程只需要 1 RTT,握手的目的是为确认双方的「连接 ID」,连接迁移就是基于连接 ID 实现的。

但是 HTTP/3 的 QUIC 协议并不是与 TLS 分层,而是QUIC 内部包含了 TLS,它在自己的帧会携带 TLS 里的“记录”,再加上 QUIC 使用的是 TLS1.3,因此仅需 1 个 RTT 就可以「同时」完成建立连接与密钥协商,甚至在第二次连接的时候,应用数据包可以和 QUIC 握手信息(连接信息 + TLS 信息)一起发送,达到 0-RTT 的效果。

如下图右边部分,HTTP/3 当会话恢复时,有效负载数据与第一个数据包一起发送,可以做到 0-RTT(下图的右下角):

在这里插入图片描述

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

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

相关文章

Linux -- 进程间通信

文章目录1. vscode软件下载和使用1.1 下载1.1.1 解决下载慢问题1.1.2 推荐下载链接1.2 vscode是什么1.3 Windows本地vscode使用1.4 远程连接linux1.5 推荐插件2. 进程间通信目的3. 为什么需要通信4. 匿名管道4.1 原理4.2 代码案例4.3 玩一玩(进程池)4.3.1 模型4.3.2 代码5. 命名…

STM32+W5500实现以太网通信

STM32系列32位微控制器基于Arm Cortex-M处理器,旨在为MCU用户提供新的开发自由度。它包括一系列产品,集高性能、实时功能、数字信号处理、低功耗/低电压操作、连接性等特性于一身,同时还保持了集成度高和易于开发的特点。本例采用STM32作为MC…

【开懂C++】命名空间 函数重载 缺省参数

目录一.命名空间二.缺省参数三.函数重载一.命名空间 在编写C语言代码时,当工程较大时,很容易产生变量命名冲突的情况——一般有两种冲突的情况 1.变量名与库中的函数名、关键字冲突。2.工程模块化搭建时不同文件的命名冲突。 而C为了优化这一缺陷&#…

安装Ubuntu系统后的实用工具配置指南

1. 修改软件源 Ubuntu 默认的软件源是境外的,速度上会有些问题,我们可以在Software & Updates(软件和更新)中选择国内的镜像。 一般我们选择清华源或者阿里云源。 2. 安装chorme浏览器 在ubuntu下我比较习惯用火狐浏览器和谷歌浏览器。 谷歌浏览…

vue 自定义指令directive的使用场景

1. 一个指令定义对象可以提供如下几个钩子函数(均为可选) bind:只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。inserted:被绑定元素插入父节点时调用(仅保证父节点存在,但不一定已被插入文档中)。update:只要当前元素不被…

Leetcode.1971 寻找图中是否存在路径

题目链接 Leetcode.1971 寻找图中是否存在路径 easy 题目描述 有一个具有 n 个顶点的 双向 图,其中每个顶点标记从 0 到 n - 1(包含 0 和 n - 1)。图中的边用一个二维整数数组 edges 表示,其中 edges[i] [ui, vi]表示顶点 ui和顶…

关于maxwell

这里写目录标题什么是Maxwell如何使用MaxwellMaxwell是一个mysql二进制binlog日志分析工具,Java语言编写,功能十分强大,可以将日志转换成json并发送到kafka,redis,rabbitmq等中间组件,因为最近在理解怎样在…

QtSqlite加密--QtCipherSqlitePlugin的使用

文章目录QtSqlite加密第一步:环境准备第二步:连接数据库第三步:数据库操作第四步:使用新的可视化工具查看数据库数据QtSqlite加密 上次说了QxOrm的数据库连接、映射和基础的增删改查,但是我们在使用数据库的时候并不希…

期刊论文图片代码复现【由图片还原代码】(OriginMatlab)

👨‍🎓个人主页:研学社的博客💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密…

【数据结构】图解八大排序(上)

文章目录一、排序简介二、直接插入排序三、希尔排序四、直接选择排序五、堆排序六、冒泡排序七、冒泡排序与直接插入排序效率对比一、排序简介 生活中,我们经常能看到排序的应用。例如,我们在网购商品的时候,经常按销量从高到低排序。 那么这…

Linux服务器怎么分区

Linux服务器怎么分区 我是艾西,linux系统除了从业某个行业经常要用到的程序员比较熟悉,对于小白或只会用Windows系统的小伙伴还是会比较难上手的。今天艾西简单的跟大家聊聊linux系统怎么分区,让身为小白的你也能一眼看懂直接上手操作感受程序…

【数据结构】用Java实现七大排序算法

目录 🌷1. 排序的概念及引用 1.1 排序的概念 1.2 衡量指标 1.2 十个排序算法 1.3 十个排序性能对比 🌷2. 冒泡排序 2.1 算法描述 2.2 动图 ⭐️代码优化 🌷3. 选择排序 3.1 算法描述 3.2 动图 3.3 代码 🌷4. 插入排序 4.1 算法描述…

(大数据开发随笔9)Hadoop 3.3.x分布式环境部署——全分布式模式

索引完全分布式模式守护进程布局集群搭建准备总纲配置文件格式化集群启动集群集群控制命令集群启停进程查看启动日志查看集群常见问题案例演示:WordCount完全分布式模式 分布式文件系统中,HDFS相关的守护进程也分布在不同的机器上,如&#x…

cgroups是linux内核中限制、记录、隔离进程组(process groups)所使用的物理资源的机制

容器虚拟化 可以实现应用程序的隔离 直接使用物理机的操作系统可以快速响应用户请求 不占用部署时间 占用少量磁盘空间 缺点∶学习成本增加、操作控制麻烦、网络控制与主机虚拟化有所区别、服务治理难。 微服务架构师需要会多门编程语言,才能治理各种服务 三种…

web路径专题+会话技术

目录自定义快捷键1. 工程路径问题及解决方案1.1 相对路径1.2 相对路径缺点1.3 base标签1.4 作业11.5 作业21.6注意细节1.7 重定向作业1.8 web工程路径优化2. Cookie技术2.1 Cookie简单示意图2.2 Cookie常用方法2.2 Cookie创建2.3 Cookie读取2.3.1 JSESSIONID2.3.2 读取指定Cook…

Linux文件目录操作命令

目录 Linux常用的基础命令 使用技巧 1. ls命令:查看当前目录所有内容 ls 命令的多种使用方法: 注:假如执行乱码,则执行以下两步的代码: 2. cd命令:切换当前工作目录,即进入指定目录 3. …

网络-IP地址(嵌入式学习)

IP地址基本概念IPv4 五类:A B C D E特殊地址子网掩码子网号概念IPv6优势举个栗子基本概念 IP地址是Internet中主机的标识 IP地址(Internet Protocol Address 互联网国际地址)是一种在Internet上的给主机编址的方式,它主要是为互…

Java Web 开发技术的演进:从 Servlet、Spring MVC 到 WebFlux 及其竞品分析

前言 随着互联网技术的快速发展,Web 应用程序在处理海量用户访问和大数据时面临着巨大的挑战。在这个过程中,Java Web 开发技术经历了从 Servlet 到 Spring MVC 再到 WebFlux 的演变。在这篇文章中,我们将探讨这三个技术的发展历程、痛点及解…

Go的IO -- Go语言设计与实现

Go合IO的不解之缘 协程是Go的很大的一个优势。Go天然支持高并发,那么我们来研究一下这个高并发的秘诀在哪里? 执行体调度得当。CPU 不停的在不同的执行体( Goroutine )之间反复横跳!CPU 一直在装填和运行不同执行体的…

数字化坚鹏:金融数据治理、数据安全政策解读及银行数字化转型

金融数据治理、数据安全政策解读及银行数字化转型课程背景: 很多银行存在以下问题: 不知道如何准确理解金融数据治理及数据安全相关政策 不清楚金融数据治理及数据安全相关政策对银行有什么影响? 不清楚如何进行银行数字化转型&#xff1f…