AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當(dāng)前位置:首頁 > 科技  > 軟件

互聯(lián)網(wǎng)中,速度與安全性是永恒追求的,Rust 編寫的 QUIC 協(xié)議,到底有多強(qiáng)?

來源: 責(zé)編: 時間:2024-05-11 09:19:00 179觀看
導(dǎo)讀大家好,我是漁夫。今天分享主題,Cloudflare 開源的 Quiche 作為 QUIC 和 HTTP/3 的實現(xiàn),提供了處理 QUIC 數(shù)據(jù)包和連接狀態(tài)管理的底層 API,允許開發(fā)者在他們的應(yīng)用程序中集成 QUIC 和 HTTP/3 的功能。什么是 QuicheQuiche

大家好,我是漁夫。e3K28資訊網(wǎng)——每日最新資訊28at.com

今天分享主題,Cloudflare 開源的 Quiche 作為 QUIC 和 HTTP/3 的實現(xiàn),提供了處理 QUIC 數(shù)據(jù)包和連接狀態(tài)管理的底層 API,允許開發(fā)者在他們的應(yīng)用程序中集成 QUIC 和 HTTP/3 的功能。e3K28資訊網(wǎng)——每日最新資訊28at.com

e3K28資訊網(wǎng)——每日最新資訊28at.com

什么是 Quiche

Quiche 是 Cloudflare 開發(fā)的一個開源項目,它是 QUIC 協(xié)議的一個實現(xiàn),用 Rust 語言編寫。e3K28資訊網(wǎng)——每日最新資訊28at.com

QUIC 是一種新的網(wǎng)絡(luò)傳輸協(xié)議,由 Google 開發(fā),旨在提高網(wǎng)絡(luò)流量的安全性和性能。QUIC 協(xié)議默認(rèn)進(jìn)行加密,以減少數(shù)據(jù)傳輸?shù)难舆t,并提供更快的連接建立時間。e3K28資訊網(wǎng)——每日最新資訊28at.com

Quiche 的特點

  • 最小化和直觀的 API:quiche 設(shè)計了一個簡單直觀的 API,使得應(yīng)用程序可以輕松地集成 QUIC 協(xié)議,同時保持了對底層復(fù)雜性的控制。
  • 與現(xiàn)有技術(shù)的兼容性:quiche 能夠與現(xiàn)有的網(wǎng)絡(luò)棧和加密庫(如 BoringSSL 默認(rèn)啟用)集成,這使得它可以被嵌入到不同的網(wǎng)絡(luò)應(yīng)用中,包括 Cloudflare 自身的服務(wù)。
  • 性能和安全性:通過使用 Rust 的 ring 庫,quiche 實現(xiàn)了快速且安全的加密原語,這對于 QUIC 協(xié)議的性能至關(guān)重要。
  • ffi:構(gòu)建 C 語言的 FFI API,方便在 C/C++ 程序中集成 quiche。
  • qlog:啟用 qlog 日志格式支持,用于網(wǎng)絡(luò)協(xié)議分析。

誰在使用 Quiche?

  • Cloudflare:Quiche 驅(qū)動了 Cloudflare 邊緣網(wǎng)絡(luò)的 HTTP/3 支持。
  • Android:Android 的 DNS 解析器使用 Quiche 實現(xiàn)了通過 HTTP/3 的 DNS。
  • curl:Quiche 可以集成到 curl 中,以提供對 HTTP/3 的支持。
  • NGINX(非官方):通過使用非官方補(bǔ)丁,Quiche 可以集成到 NGINX 中,以提供對 HTTP/3 的支持。

Quiche 現(xiàn)狀與未來

雖然,quiche 是 QUIC 實現(xiàn)中較新的一個,但它已經(jīng)能夠與其他更成熟的實現(xiàn)進(jìn)行互操作,并展示了 QUIC 的許多特性。Quiche 和 QUIC 本身都還在不斷完善中,隨著在互聯(lián)網(wǎng)上更廣泛地部署 QUIC,也將不斷發(fā)現(xiàn)并修復(fù)bug,實現(xiàn)新的功能,并在實踐中學(xué)習(xí)和進(jìn)步,拭目以待。e3K28資訊網(wǎng)——每日最新資訊28at.com

入門使用

使用 quiche 建立 QUIC 連接的第一步是創(chuàng)建一個 Config 對象:e3K28資訊網(wǎng)——每日最新資訊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 配置。這可以通過現(xiàn)有對象上的修改器來更改,或者通過手動構(gòu)建 TLS 上下文并使用with_boring_ssl_ctx_builder(),配置對象可以在多個連接之間共享。e3K28資訊網(wǎng)——每日最新資訊28at.com

連接設(shè)置

在客戶端,connect() 實用程序函數(shù)可用于創(chuàng)建新連接,而 accept()用于服務(wù)器端:e3K28資訊網(wǎng)——每日最新資訊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)?;

在這兩種情況下,應(yīng)用程序負(fù)責(zé)生成新的源連接 ID,該 ID 將用于標(biāo)識新連接。e3K28資訊網(wǎng)——每日最新資訊28at.com

應(yīng)用程序還需要傳遞連接的遠(yuǎn)程對等點的地址:對于客戶端來說,這是它嘗試連接的服務(wù)器的地址,對于服務(wù)器來說,這是發(fā)起連接的客戶端的地址連接。e3K28資訊網(wǎng)——每日最新資訊28at.com

處理傳入數(shù)據(jù)包

使用連接的 recv()方法,可以處理來自網(wǎng)絡(luò)的屬于該連接的傳入數(shù)據(jù)包:e3K28資訊網(wǎng)——每日最新資訊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;        },    };}

生成傳出數(shù)據(jù)包

傳出數(shù)據(jù)包是使用連接的 send() 方法生成的。e3K28資訊網(wǎng)——每日最新資訊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();}

發(fā)送數(shù)據(jù)包時,應(yīng)用程序負(fù)責(zé)維護(hù)計時器以對基于時間的連接事件做出反應(yīng)。可以使用連接的方法獲取計時器到期時間 timeout()。e3K28資訊網(wǎng)——每日最新資訊28at.com

let timeout = conn.timeout();

應(yīng)用程序負(fù)責(zé)提供計時器實現(xiàn),該實現(xiàn)可以特定于所使用的操作系統(tǒng)或網(wǎng)絡(luò)框架。當(dāng)計時器到期時,on_timeout()應(yīng)調(diào)用連接的方法,之后可能需要在網(wǎng)絡(luò)上發(fā)送其他數(shù)據(jù)包。e3K28資訊網(wǎng)——每日最新資訊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();}

更多使用,可以到官網(wǎng)進(jìn)行查閱豐富的文檔。e3K28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-87971-0.html互聯(lián)網(wǎng)中,速度與安全性是永恒追求的,Rust 編寫的 QUIC 協(xié)議,到底有多強(qiáng)?

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 絕妙 C++ 技巧:輕松掌握數(shù)值交換!

下一篇: C# 異常處理與 try-catch-finally 結(jié)構(gòu)

標(biāo)簽:
  • 熱門焦點
Top