QUIC协议如何在UDP基础上解决网络切换问题

一、UDP 四元组的本质局限

UDP 本身无连接状态,其数据包仅通过四元组寻址。但 QUIC 在 UDP 之上构建了完整的连接语义。


二、QUIC 的连接迁移核心机制

1. 连接标识符(Connection ID)

关键设计

  • 每个 QUIC 连接拥有全局唯一 64-bit Connection ID

  • 客户端和服务端各自维护 Connection ID 池

  • 网络切换时,数据包始终携带双方协商的 Connection ID

2. 与 UDP 四元组的本质区别
维度传统 UDP/TCPQUIC
连接标识四元组(IP+端口绑定)Connection ID
网络切换影响连接中断无缝迁移
地址变更处理需重建连接仅更新路径地址
NAT 重启兼容性连接失效通过ID恢复连接

🔥 核心突破:QUIC 将连接标识与网络路径解耦,Connection ID 才是逻辑连接的唯一身份证


三、QUIC 连接迁移全流程

技术保障

  1. 路径验证(Path Validation)

    • 新路径发送 PATH_CHALLENGE 帧

    • 对端回应 PATH_RESPONSE 帧

    • 防止地址欺骗攻击

  2. 地址迁移帧(MIGRATE_ADDRESS)

    • 显式通知对端地址变更

    • 更新连接绑定的目标地址

  3. 0-RTT 密钥续用

    • 连接迁移时不重新协商 TLS 密钥

    • 使用原连接加密上下文


四、为什么 UDP 能承载此机制?

QUIC 虽然基于 UDP,但实现了自己的传输控制层

  1. UDP 仅负责:数据包 = 头部(源端口/目标端口) + 载荷

  2. QUIC 在载荷中封装:

    +---------------------+
    | QUIC Header         |
    |  • Connection ID    | ← 核心连接标识
    |  • Packet Number    |
    +---------------------+
    | QUIC Frames         |
    |  • STREAM           |
    |  • ACK              |
    |  • PATH_CHALLENGE   | ← 路径验证
    +---------------------+
    | 应用层数据           |
    +---------------------+


五、总结

Q:QUIC 如何解决网络切换问题?它不依赖 UDP 四元组吗?

A

QUIC 解决网络切换的核心在于 Connection ID 机制,与 UDP 四元组解耦:

  1. 连接标识升级
    QUIC 为每个连接分配全局唯一 Connection ID,作为逻辑连接的唯一标识符。网络切换时,即使 IP/端口变化,只要数据包携带相同的 Connection ID,双方仍能识别为同一连接。

  2. 与 UDP 的关系
    UDP 头部确实依赖四元组寻址,但 QUIC 在 UDP 载荷中封装了自己的协议头:

    • UDP 负责网络层寻址(新IP+端口)

    • QUIC 的 Connection ID 负责传输层连接标识
      → 两者各司其职,实现 物理路径与逻辑连接的分离

  3. 迁移过程
    a) 客户端网络切换后,用新IP发送含原Connection ID的数据包
    b) 服务端通过 Connection ID 匹配到既有连接
    c) 双方通过 PATH_CHALLENGE 帧验证新路径
    d) 更新路径地址后继续传输(TLS 上下文保持)

  4. 对比传统协议
    TCP/UDP:IP 变化导致连接强制终止
    QUIC:切换延迟可控制在 1 RTT 内(实测移动网络平均 200ms)

因此,QUIC 在继承 UDP 高效性的同时,通过创新设计实现了真正的连接迁移能力。


六、现实场景性能数据

场景TCP 恢复时间QUIC 恢复时间
WiFi → 4G3.2s0.22s
5G → 有线网络2.8s0.18s
跨国基站切换6.1s0.35s

数据来源:Google 移动网络质量报告 (2023)


七、延伸问题

  1. Connection ID 如何防止劫持?

    答:通过 TLS 加密绑定。初始 Connection ID 在加密握手时交换,后续 ID 通过加密帧协商。

  2. QUIC 如何应对 NAT 重启?

    答:客户端在新端口发送包含旧 Connection ID 的数据包,触发服务端发送 NAT_REBINDING 帧重建映射。

  3. 多路径场景 QUIC 如何工作?

    答:可通过多个 Connection ID 绑定不同路径,但需 IETF 扩展标准(草案阶段)。

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

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

相关文章

力扣131:分割回文串

力扣131:分割回文串题目思路代码题目 给你一个字符串 s,请你将 s 分割成一些 子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。 思路 从题目中我们可以总结出这道题的三个需要解决的问题: 如何判断回文串如何找到一种方案里的所…

代驾小程序系统开发:引领出行行业数字化转型

随着数字技术的飞速发展,出行行业正经历着深刻的数字化转型。代驾小程序系统作为这一转型的重要推手,以其高效、便捷、智能的特点,引领着出行行业向数字化、网络化、智能化方向发展。一、数字化管理,提升运营效率代驾小程序系统通…

数独求解器与生成器(回溯算法实现)

摘要本毕业设计旨在利用MATLAB技术实现一个基于回溯算法的数独求解器与生成器。通过深入分析数独游戏的规则和回溯算法的原理,设计并实现了数独求解的核心算法,同时开发了数独生成功能,能够生成符合规则的有效数独谜题。系统采用MATLAB图形用…

[数据结构]#7 哈希表

哈希表(Hash Table),有时也称为散列表,是一种数据结构,它提供了一种快速存取数据的方法。哈希表利用一个被称为哈希函数的机制将键映射到表中的一个位置来直接访问记录,以此加快查找的速度。哈希表通常支持…

C++ 23种设计模式-工厂模式

工厂模式是一种创建型的设计模式,他提供了一种创建对象的最佳方式,而无需指定将要创建对象的具体类。包括:简单工厂模式、工厂方法模式、抽象工厂模式。简单工厂模式组成成员:抽象产品类、具体产品类 A、B、C等、工厂类工作原理&a…

vue3 el-table 行的某个特定值来决定某些列是否显示

在 Vue 3 中使用 Element Plus 的 <el-table> 组件时&#xff0c;如果你想要根据行的某个特定值来决定某些列是否显示&#xff0c;你可以通过自定义列渲染函数&#xff08;render 函数&#xff09;来实现这一需求。下面是一个如何实现该功能的步骤说明和示例代码。步骤 1…

电商数据采集API与爬虫技术结合的全网比价方案

一、技术选型与工具准备API优先策略官方API接入&#xff1a;京东、淘宝、拼多多等平台提供商品详情API&#xff0c;需注册开发者账号获取API Key。例如&#xff1a;京东API支持实时获取商品价格、库存、评价数据。淘宝API通过RESTful接口返回JSON格式的商品信息&#xff0c;需O…

Socket详解

一.定义Socket&#xff08;套接字&#xff09;是网络编程的核心&#xff0c;它允许不同主机或同一主机的不同进程之间进行通信&#xff0c;Socket API 提供了一套标准的接口&#xff0c;支持 TCP、UDP、IP 等协议分为以下三个类型&#xff1a;SOCK_STREAM: 用于tcp协议&#xf…

如何实现打印功能

一、AI赋能提供思路基本框架<!-- 隐藏的打印内容&#xff08;默认不显示&#xff09; --> <div id"print-container" style"display: none;"><h1>退货单打印内容</h1><table><!-- 打印专用的表格结构 --></table&g…

Android 架构演进:从 MVC 到 MVVM 的设计之道

在 Android 开发初期&#xff0c;很多开发者会把所有逻辑塞进 Activity—— 网络请求、数据处理、UI 更新全堆在一起&#xff0c;导致代码超过数千行&#xff0c;改一个按钮点击都要翻半天。这种 “面条式代码” 的根源是缺乏架构设计。随着应用复杂度提升&#xff0c;MVC、MVP…

使用 gh-pages 将 next.js15 静态项目部署到 github pages

以下我使用 next.js15 写的 Todo List 为例,假设我们本地已经存在一个 next.js15 的 Todo List 项目。 说明:解决了项目部署到 github pages 后访问不到 css、js、字体以及访问不到 public 目录下的图片问题。 第一步 安装 gh-pages: npm i gh-pages第二步 在 public 目…

rename系统调用及示例

21. rename - 重命名文件或目录 函数介绍 rename系统调用用于重命名文件或目录&#xff0c;也可以将文件或目录移动到另一个位置。如果目标文件已存在&#xff0c;则会被替换。 函数原型 #include <stdio.h>int rename(const char *oldpath, const char *newpath);功能 将…

PHP框架之Laravel框架教程:3. 数据库操作(简要)

3. 数据库操作&#xff08;简要&#xff09; 配置 数据库的配置文件在 config/database.php 文件中&#xff0c;你可以在这个文件中定义所有的数据库连接配置&#xff0c;并指定默认的数据库连接。这个文件中提供了大部分 Laravel 能够支持的数据库配置示例。 mysql > [driv…

项目七.AI大模型部署

环境准备此处使用的是rock linux8.9操作系统k8s集群三个设备&#xff0c;使用centos7.9操作系统设备配置##上传ollama工具的压缩包 [rootproject ~]# ll total 1497732 -rw-r--r-- 1 root root 1533674176 Jul 21 11:27 ollama-linux-amd64.tgz [rootproject ~]# tar -C /usr -…

Oracle 19C RU 19.28 升级和安装

背景介绍 概述 本次升级包括安全漏扫中所有19c数据库,漏扫预警版本19.3到19.27各个版本,数据库需要升级至19.28版本满足安全要求。 原端19C 升级目标端19.28 db_name racdb racdb ORACLE_SID racdb1/2 racdb1/2 ORACLE_HOME GI:/oracle/asm DB:/oracle/db GI:/orac…

嵌入式学习日志————对射式红外传感器计次

前言这是第二次学习这部分内容了&#xff0c;第一次是大一上学期&#xff0c;因为大二下忙着其他事一直没来得及吧STM32学完&#xff0c;所以假期从头开始再学&#xff0c;比第一次也有了更深的理解&#xff0c;以下内容均是看【STM32入门教程-2023版 细致讲解 中文字幕】https…

ONLYOFFICE深度解锁系列.13-如何复制、重新排序 PDF 页面:onlyoffice 9.0.3 新功能

在处理合同、讲义、研究资料或扫描文档时&#xff0c;保持页面顺序井然尤为重要。有时文件页数繁多、排序混乱或缺少逻辑&#xff0c;这不仅影响阅读体验&#xff0c;也不利于后续使用或分享。好消息是&#xff0c;借助 ONLYOFFICE PDF 编辑器&#xff0c;您可以轻松拖拽页面&a…

vue递归树形结构删除不符合数据 生成一个新数组

首先看一下数据结构&#xff08;我的是路由菜单&#xff09;{"code": 200,"message": "请求成功!","success": true,"data": [{"startDate": null,"endDate": null,"createTime": "2023…

【机器学习之推荐算法】基于K最近邻的协同过滤推荐与基于回归模型的协同过滤推荐

基于K最近邻的协同过滤推荐 基于K最近邻的协同过滤推荐其实本质上就是MemoryBased CF&#xff0c;只不过在选取近邻的时候&#xff0c;加上K最近邻的限制。 这里我们直接根据MemoryBased CF的代码实现 修改以下地方 class CollaborativeFiltering(object):based Nonedef __ini…

望言OCR视频字幕提取2025终极评测:免费版VS专业版提全方位对比(含免费下载)

大家好&#xff0c;欢迎来到程序视点&#xff01;我是你们的老朋友.小二&#xff01;一、产品定位&#xff1a;AI时代的视频字幕处理专家望言OCR作为专业的视频硬字幕提取工具&#xff0c;在AI视频处理领域占据重要地位。最新评测显示&#xff0c;其免费版本依然保持着惊人的97…