当前位置:首页 > 科技  > 软件

互联网中,速度与安全性是永恒追求的,Rust 编写的 QUIC 协议,到底有多强?

来源: 责编: 时间:2024-05-11 09:19:00 126观看
导读大家好,我是渔夫。今天分享主题,Cloudflare 开源的 Quiche 作为 QUIC 和 HTTP/3 的实现,提供了处理 QUIC 数据包和连接状态管理的底层 API,允许开发者在他们的应用程序中集成 QUIC 和 HTTP/3 的功能。什么是 QuicheQuiche

大家好,我是渔夫。XVj28资讯网——每日最新资讯28at.com

今天分享主题,Cloudflare 开源的 Quiche 作为 QUIC 和 HTTP/3 的实现,提供了处理 QUIC 数据包和连接状态管理的底层 API,允许开发者在他们的应用程序中集成 QUIC 和 HTTP/3 的功能。XVj28资讯网——每日最新资讯28at.com

XVj28资讯网——每日最新资讯28at.com

什么是 Quiche

Quiche 是 Cloudflare 开发的一个开源项目,它是 QUIC 协议的一个实现,用 Rust 语言编写。XVj28资讯网——每日最新资讯28at.com

QUIC 是一种新的网络传输协议,由 Google 开发,旨在提高网络流量的安全性和性能。QUIC 协议默认进行加密,以减少数据传输的延迟,并提供更快的连接建立时间。XVj28资讯网——每日最新资讯28at.com

Quiche 的特点

  • 最小化和直观的 API:quiche 设计了一个简单直观的 API,使得应用程序可以轻松地集成 QUIC 协议,同时保持了对底层复杂性的控制。
  • 与现有技术的兼容性:quiche 能够与现有的网络栈和加密库(如 BoringSSL 默认启用)集成,这使得它可以被嵌入到不同的网络应用中,包括 Cloudflare 自身的服务。
  • 性能和安全性:通过使用 Rust 的 ring 库,quiche 实现了快速且安全的加密原语,这对于 QUIC 协议的性能至关重要。
  • ffi:构建 C 语言的 FFI API,方便在 C/C++ 程序中集成 quiche。
  • qlog:启用 qlog 日志格式支持,用于网络协议分析。

谁在使用 Quiche?

  • Cloudflare:Quiche 驱动了 Cloudflare 边缘网络的 HTTP/3 支持。
  • Android:Android 的 DNS 解析器使用 Quiche 实现了通过 HTTP/3 的 DNS。
  • curl:Quiche 可以集成到 curl 中,以提供对 HTTP/3 的支持。
  • NGINX(非官方):通过使用非官方补丁,Quiche 可以集成到 NGINX 中,以提供对 HTTP/3 的支持。

Quiche 现状与未来

虽然,quiche 是 QUIC 实现中较新的一个,但它已经能够与其他更成熟的实现进行互操作,并展示了 QUIC 的许多特性。Quiche 和 QUIC 本身都还在不断完善中,随着在互联网上更广泛地部署 QUIC,也将不断发现并修复bug,实现新的功能,并在实践中学习和进步,拭目以待。XVj28资讯网——每日最新资讯28at.com

入门使用

使用 quiche 建立 QUIC 连接的第一步是创建一个 Config 对象:XVj28资讯网——每日最新资讯28at.com

let mut config = quiche::Config::new(quiche::PROTOCOL_VERSION)?;config.set_application_protos(&[b"example-proto"]);

该 Config 对象控制 QUIC 连接的重要方面,如 QUIC 版本、ALPN ID、流量控制、拥塞控制、空闲超时和其他属性或功能。Config 还保存 TLS 配置。这可以通过现有对象上的修改器来更改,或者通过手动构建 TLS 上下文并使用with_boring_ssl_ctx_builder(),配置对象可以在多个连接之间共享。XVj28资讯网——每日最新资讯28at.com

连接设置

在客户端,connect() 实用程序函数可用于创建新连接,而 accept()用于服务器端:XVj28资讯网——每日最新资讯28at.com

// Client connection.let conn =    quiche::connect(Some(&server_name), &scid, local, peer, &mut config)?;// Server connection.let conn = quiche::accept(&scid, None, local, peer, &mut config)?;

在这两种情况下,应用程序负责生成新的源连接 ID,该 ID 将用于标识新连接。XVj28资讯网——每日最新资讯28at.com

应用程序还需要传递连接的远程对等点的地址:对于客户端来说,这是它尝试连接的服务器的地址,对于服务器来说,这是发起连接的客户端的地址连接。XVj28资讯网——每日最新资讯28at.com

处理传入数据包

使用连接的 recv()方法,可以处理来自网络的属于该连接的传入数据包:XVj28资讯网——每日最新资讯28at.com

let to = socket.local_addr().unwrap();loop {    let (read, from) = socket.recv_from(&mut buf).unwrap();    let recv_info = quiche::RecvInfo { from, to };    let read = match conn.recv(&mut buf[..read], recv_info) {        Ok(v) => v,        Err(quiche::Error::Done) => {            // Done reading.            break;        },        Err(e) => {            // An error occurred, handle it.            break;        },    };}

生成传出数据包

传出数据包是使用连接的 send() 方法生成的。XVj28资讯网——每日最新资讯28at.com

loop {    let (write, send_info) = match conn.send(&mut out) {        Ok(v) => v,        Err(quiche::Error::Done) => {            // Done writing.            break;        },        Err(e) => {            // An error occurred, handle it.            break;        },    };    socket.send_to(&out[..write], &send_info.to).unwrap();}

发送数据包时,应用程序负责维护计时器以对基于时间的连接事件做出反应。可以使用连接的方法获取计时器到期时间 timeout()。XVj28资讯网——每日最新资讯28at.com

let timeout = conn.timeout();

应用程序负责提供计时器实现,该实现可以特定于所使用的操作系统或网络框架。当计时器到期时,on_timeout()应调用连接的方法,之后可能需要在网络上发送其他数据包。XVj28资讯网——每日最新资讯28at.com

// Timeout expired, handle it.conn.on_timeout();// Send more packets as needed after timeout.loop {    let (write, send_info) = match conn.send(&mut out) {        Ok(v) => v,        Err(quiche::Error::Done) => {            // Done writing.            break;        },        Err(e) => {            // An error occurred, handle it.            break;        },    };    socket.send_to(&out[..write], &send_info.to).unwrap();}

更多使用,可以到官网进行查阅丰富的文档。XVj28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-87971-0.html互联网中,速度与安全性是永恒追求的,Rust 编写的 QUIC 协议,到底有多强?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 绝妙 C++ 技巧:轻松掌握数值交换!

下一篇: C# 异常处理与 try-catch-finally 结构

标签:
  • 热门焦点
  • 小米官宣:2023年上半年出货量中国第一!

    小米官宣:2023年上半年出货量中国第一!

    今日早间,小米电视官方微博带来消息,称2023年小米电视上半年出货量达到了中国第一,同时还表示小米电视的巨屏风暴即将开始。“公布一个好消息2023年#小米电视上半年出货量中国
  • 6月iOS设备性能榜:M2稳居榜首 A系列只能等一手3nm来救

    6月iOS设备性能榜:M2稳居榜首 A系列只能等一手3nm来救

    没有新品发布,自然iOS设备性能榜的上榜设备就没有什么更替,仅仅只有跑分变化而产生的排名变动,毕竟苹果新品的发布节奏就是这样的,一年下来也就几个移动端新品,不会像安卓厂商,一
  • CSS单标签实现转转logo

    CSS单标签实现转转logo

    转转品牌升级后更新了全新的Logo,今天我们用纯CSS来实现转转的新Logo,为了有一定的挑战性,这里我们只使用一个标签实现,将最大化的使用CSS能力完成Logo的绘制与动画效果。新logo
  • Golang 中的 io 包详解:组合接口

    Golang 中的 io 包详解:组合接口

    io.ReadWriter// ReadWriter is the interface that groups the basic Read and Write methods.type ReadWriter interface { Reader Writer}是对Reader和Writer接口的组合,
  • 三言两语说透设计模式的艺术-单例模式

    三言两语说透设计模式的艺术-单例模式

    写在前面单例模式是一种常用的软件设计模式,它所创建的对象只有一个实例,且该实例易于被外界访问。单例对象由于只有一个实例,所以它可以方便地被系统中的其他对象共享,从而减少
  • 使用AIGC工具提升安全工作效率

    使用AIGC工具提升安全工作效率

    在日常工作中,安全人员可能会涉及各种各样的安全任务,包括但不限于:开发某些安全工具的插件,满足自己特定的安全需求;自定义github搜索工具,快速查找所需的安全资料、漏洞poc、exp
  • 年轻人的“职场羞耻感”,无处不在

    年轻人的“职场羞耻感”,无处不在

    作者:冯晓亭 陶 淘 李 欣 张 琳 马舒叶来源:燃次元“人在职场,应该选择什么样的着装?”近日,在网络上,一个与着装相关的帖子引发关注,在该帖子里,一位在高级写字楼亚洲金
  • 华为Mate 60保护壳曝光:硕大后置相机模组 凸起程度有惊喜

    华为Mate 60保护壳曝光:硕大后置相机模组 凸起程度有惊喜

    这段时间以来,关于华为新旗舰的爆料日渐密集。据此前多方爆料,今年华为将开始恢复一年双旗舰战略,除上半年推出的P60系列外,往年下半年的Mate系列也将
  • 英特尔Xe HPG游戏显卡:拥有512EU,单风扇版本

    英特尔Xe HPG游戏显卡:拥有512EU,单风扇版本

    据10 月 30 日外媒 TheVerge 消息报道,英特尔 Xe HPG Arc Alchemist 的正面实被曝光,不仅拥有 512 EU 版显卡,还拥有 128EU 的单风扇版本。另外,这款显卡 PCB
Top