QUIC协议(握手过程)简要介绍

QUIC协议(握手过程)简要介绍

这篇博客可能更多的偏向于密码学方面来进行介绍(csdn关于网络层)。

为什么需要QUIC协议

随着当前网络对性能要求的越来越高,有部分公司已经觉得原来的TCP和UDP协议的握手阶段太长。因此就致力于开发一些新的协议进行连接。于是Goole在2013年就提出了一种新的协议——QUIC协议。

网络层的QUIC

关于QUIC在网络层的介绍,csdn已经存在很多介绍了,这里就不再赘述,这篇博客我们主要从握手协议里用到的密码学技术来进行简要介绍。

密码学元件

Public Key Infrastructure(PKI)

简要来说就是找一个有公信力的第三方为公钥分配一个证书,主要作用就是证明某个公钥是属于某个人的。更详细的解释可以参照博客
https://blog.csdn.net/inthat/article/details/112955419?ops_request_misc=&request_id=&biz_id=102&utm_term=PKI&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-0-112955419.nonecase&spm=1018.2226.3001.4187

数字签名方案

一个数字签名方案包括三个函数 S S = ( K g , S i g n , V e r ) SS = (Kg, Sign, Ver) SS=(Kg,Sign,Ver),
其中Kg是密钥生成函数 ( p k , s k ) ← K g ( λ ) (pk, sk) \leftarrow Kg (\lambda) (pk,sk)Kg(λ),其中 λ \lambda λ表示安全参数,pk表示公钥, sk表示私钥。
Sign是签名函数: σ ← S i g n ( s k , m ) \sigma \leftarrow Sign(sk, m) σSign(sk,m), 其中sk表示用户的私钥,m是要签名的消息, σ \sigma σ是签名之后的结果。
Ver是验证函数, b ← V e r ( p k , m , σ ) b \leftarrow Ver(pk, m, \sigma) bVer(pk,m,σ).其中b是输出结果,为1或者0。1的话表示验证通过,0的话表示验证失败。

关联数据的认证加密方案AEAD

在介绍AEAD之前,先简要说一下(Authenticated Encryption)AE方案。
我们都知道,加密技术保证了机密性,消息认证码保证了完整性。然而,在很多情景下,我们既需要保证加密型,又需要保证完整性。因此就提出了认证加密方案(AE方案)。
其实我们还可能存在这样一种需求,就是我们并不是对所有的数据都需要保密性,但是我们又需要对所有数据的完整性进行校验。
比如说:在网络数据传输的时候,我们只需要加密我们传输的数据。但是我们知道网络传输的数据包不仅仅有数据,也有原IP,目的IP之类的额外信息。这些信息在路由的时候需要用到,因此就不能进行加密。这种需求就引出了AEAD,相关数据的认证加密技术。
AEAD是对其中一部分数据进行加密,但是对所有数据进行认证的一种技术。 A E A D = ( E , D ) AEAD = (E,D) AEAD=(E,D).
E是加密函数 c ← E ( k , I V , H , m ) c \leftarrow E(k, IV, H, m) cE(k,IV,

### QUIC协议的基本概念 QUICQuick UDP Internet Connections)是一种基于UDP的多路复用传输层协议,旨在减少网络延迟并提高通信效率[^1]。它最初由Google开发,并逐渐演变为IETF的标准协议。相比于传统的TCP+TLS组合,QUIC通过单一的握手过程即可完成加密和连接建立,从而显著减少了延迟。 #### 工作原理概述 QUIC的工作方式融合了TCP、TLS以及HTTP/2的优点,同时克服了它们的一些缺点: 1. **快速连接建立** 使用单次往返时间(RTT, Round-Trip Time)甚至零往返时间(0-RTT),QUIC可以迅速建立安全连接。这得益于其内置的加密机制,使得握手过程中无需额外等待TLS协商的时间[^2]。 2. **多路复用支持** 类似于HTTP/2中的流模型,QUIC允许多个逻辑流在同一物理连接上并发运行。这种设计避免了传统TCP因队头阻塞而导致的整体性能下降问题[^3]。 3. **前向纠错技术** 为了应对丢包情况下的数据恢复需求,QUIC采用了先进的FEC(Forward Error Correction)算法。即使在网络条件较差时也能维持较好的用户体验。 4. **独立升级能力** 不同于TCP需要操作系统层面的支持才能更新版本或实现新功能,QUIC可以直接在应用层部署更改而不需要依赖底层基础设施的变化。 以下是展示如何利用Python库`aioquic`创建简单客户端和服务端的一个例子: ```python import asyncio from aioquic.quic.configuration import QuicConfiguration from aioquic.asyncio import connect, serve async def client(): configuration = QuicConfiguration(is_client=True) async with connect('localhost', 4433, configuration=configuration) as protocol: await protocol.send(b'hello') data = await protocol.recv() print(data) async def server(): configuration = QuicConfiguration(is_client=False) loop = asyncio.get_event_loop() await serve(('::', 4433), configuration=configuration, stream_handler=lambda s: None) if __name__ == "__main__": try: asyncio.run(client()) except Exception as e: pass asyncio.run(server()) ``` 此脚本展示了基本的QUIC交互流程,包括初始化配置对象、启动服务端监听器以及发起请求等操作步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值