QUIC在零信任解决方案的落地实践

2023-12-19 22:12

本文主要是介绍QUIC在零信任解决方案的落地实践,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

ZTNA为以“网络为中心”的传统企业体系架构向以“身份为中心”的新型企业安全体系架构转变,提供解决方案。随着传统网络边界不断弱化,企业SaaS规模化日益增多,给终端安全访问接入创造了多元化的空间。其中BYOD办公方式尤为突出,移动化办公确实为个人提升了效率,为组织节省了成本;但是给业务系统的安全接入,业务处理及时响应上带来了成本和挑战。需要我们思考是否引入非传统的技术点来解决用户需求侧的痛点,同时保障整体方案的稳定性和可实践性。

ZTNA实施过程中遇到了哪些问题

移动化办公场景下,特别在高铁,地下停车场等基站变更频繁或弱网等场景下,传统TCP应用接入模式下,会导致基于TCP创建的零信任通道在不断地中断,重新建链;导致业务访问无法做到及时响应,体验性很差。

ZTNA解决方案上特别提到了单包授权;而单包授权虽然解决了防火墙端口必须要默认打开的弊端;需要先敲门后授权,减少业务系统的网络攻击面。但是单包授权在应用过程中,还是存在需要改进的点:

● 单包授权模式下,业务报文往往都会伴随着有敲门报文;UDP敲门报文必须要鉴权成功,打开相应业务端口,业务报文才能具备有效性。往往实际落地过程中,由于中间转发设备多路径,以及QoS等问题,首个SYN包握手大概率失败,增加了访问时延。

● 同时传统单包敲门还有一个问题,就是无法解决nat网络场景,导致敲门放大问题。带来了网络不确定性。而传统模型下,只能借助缩小敲门有效时间来应对。

如何来解决上述问题,提升ZTNA解决方案的稳定性?我们最终选用QUIC协议来保障。

QUIC是什么

QUIC(Quick UDP Internet Connection)最开始是由Google提出的一个基于UDP的传输协议,为了解决传统tcp协议固 有的性能瓶颈,它是下一代互联网协议HTTP/3的底层传输协议。除了应用于Web领域,它同样适用于一些通用的需要低延迟、高吞吐特性的传输场景。IETF推进其标准化工作,2021 年,QUIC 协议的正式标准化版本 RFC9000 发布。

选型QUIC的优势体现点

1. 握手建链相比较传统TCP更快

QUIC建链时间大约0~1 RTT,其在两方面做了优化:

● 传输层使用了UDP,相比TCP需要三次握手,减少了1个RTT延迟。

● QUIC底层使用tls1.3进行加密通信,相比tls1.1和tls1.2, 通过ClientHello和ServerHello的扩展进行密钥交换,省去了1.2版本中KeyExchange的过程,又省去了一次握手。

2. 支持连接迁移

相比传统的TCP使用5元组来区别一个连接,QUIC在握手阶段随机生成connection id,不在通过五元组来区分,这样当网络发生改变导致五元组发生变化后,依旧可以通过握手阶段的connection id关联连接。

3. 可插拔的拥塞控制

QUIC在应用层协议实现了Cubic、BBR、Reno等拥塞控制算法,用户可以根据不同的网络场景选择合适的拥塞控制算法,也可以自己实现私有的拥塞控制算法。

4. 避免队首阻塞的多路复用

QUIC 一个连接支持多个 stream,stream之间相互独立,一个stream丢了一个packet,并不影响其他stream。

5. 解决弱网场景

●  tcp重传报文导致rtt无法准确计算。

●  tcp拥塞控制在丢包场景会进行退让,导致发生窗口减少,但丢包有可能是网络状况差,不一定是发生拥塞。

QUIC落地ZTNA场景下实践效果

1. 确认通道稳定性明显提升

网络切换行为

隧道状态(隧道重新建立/隧道不变)

隧道应用访问(访问正常/无法访问)

网络特征(延迟高低,用户是否明显感知)

4G切WIFI(单次快速切换)

隧道不变

正常访问

4G切WIFI(10次快速切换)

隧道不变

正常访问

4G切WIFI(50次快速切换)

隧道不变(4g连接很长一段时间之后再去切wifi,偶现隧道重新连接)

正常访问

否(隧道重连时感知明显 )

网络切换行为

隧道状态(隧道重新建立/隧道不变)

隧道应用访问(访问正常/无法访问)

网络特征(延迟高低,用户是否明显感知)


WIFI切4G(单次快速切换)

隧道不变

正常访问


WIFI切4G(10次快速切换)

隧道不变

正常访问


WIFI切4G(50次快速切换)

隧道不变(wifi连接很长一段时间之后再去切4g,偶现隧道重新连接)

正常访问


否(隧道重连时,感知明显)

从上图表面,当网络发生切换后,零信任通道还是可以正常使用,不需要重新连接。


2. 确认访问速度显著提升

图片

QUIC落地ZTNA场景下实践效果

1. 相比较TCP服务侧处理CPU偏高

相比于TCP的ack是在内核处理,QUIC的ack报文需要从内核提到用户态处理,增加了额外的用户态内核态切换和数据拷贝,并且QUIC的ack报文也是加密的,增加了tls加解密,所以cpu负载更高。

2. 运营商UDP流量限速

由于UDP无连接,中间设备无法进行连接跟踪,当中间网络带宽瓶颈时,TCP有拥塞控制主动让出带宽,而UDP没有拥塞控制,运营商中间设备会对UDP报文QoS限速丢包。

总结

技术本身均有其优势和劣势,这个都是技术选型横向比较中确实存在的。技术的落地关键点还是要来源于结合落地场景的分析,什么样的场景或者需求驱动力下,采用哪种技术会更加稳妥。例如在局域网办公场景下,网络环境趋于稳定,选择QUIC驱动力则不强,可以选用传统TCP进行应用访问建链即可。而我们整体ZTNA解决方案中,均具备灵活可配置,让用户在技术落地和用户场景上找到最优解。

这篇关于QUIC在零信任解决方案的落地实践的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/513880

相关文章

SQLite3命令行工具最佳实践指南

《SQLite3命令行工具最佳实践指南》SQLite3是轻量级嵌入式数据库,无需服务器支持,具备ACID事务与跨平台特性,适用于小型项目和学习,sqlite3.exe作为命令行工具,支持SQL执行、数... 目录1. SQLite3简介和特点2. sqlite3.exe使用概述2.1 sqlite3.exe

C++高效内存池实现减少动态分配开销的解决方案

《C++高效内存池实现减少动态分配开销的解决方案》C++动态内存分配存在系统调用开销、碎片化和锁竞争等性能问题,内存池通过预分配、分块管理和缓存复用解决这些问题,下面就来了解一下... 目录一、C++内存分配的性能挑战二、内存池技术的核心原理三、主流内存池实现:TCMalloc与Jemalloc1. TCM

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

Springboot整合Redis主从实践

《Springboot整合Redis主从实践》:本文主要介绍Springboot整合Redis主从的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言原配置现配置测试LettuceConnectionFactory.setShareNativeConnect

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis

Java死锁问题解决方案及示例详解

《Java死锁问题解决方案及示例详解》死锁是指两个或多个线程因争夺资源而相互等待,导致所有线程都无法继续执行的一种状态,本文给大家详细介绍了Java死锁问题解决方案详解及实践样例,需要的朋友可以参考下... 目录1、简述死锁的四个必要条件:2、死锁示例代码3、如何检测死锁?3.1 使用 jstack3.2

html 滚动条滚动过快会留下边框线的解决方案

《html滚动条滚动过快会留下边框线的解决方案》:本文主要介绍了html滚动条滚动过快会留下边框线的解决方案,解决方法很简单,详细内容请阅读本文,希望能对你有所帮助... 滚动条滚动过快时,会留下边框线但其实大部分时候是这样的,没有多出边框线的滚动条滚动过快时留下边框线的问题通常与滚动条样式和滚动行

Oracle修改端口号之后无法启动的解决方案

《Oracle修改端口号之后无法启动的解决方案》Oracle数据库更改端口后出现监听器无法启动的问题确实较为常见,但并非必然发生,这一问题通常源于​​配置错误或环境冲突​​,而非端口修改本身,以下是系... 目录一、问题根源分析​​​二、保姆级解决方案​​​​步骤1:修正监听器配置文件 (listener.

MySQL版本问题导致项目无法启动问题的解决方案

《MySQL版本问题导致项目无法启动问题的解决方案》本文记录了一次因MySQL版本不一致导致项目启动失败的经历,详细解析了连接错误的原因,并提供了两种解决方案:调整连接字符串禁用SSL或统一MySQL... 目录本地项目启动报错报错原因:解决方案第一个:第二种:容器启动mysql的坑两种修改时区的方法:本地

安装centos8设置基础软件仓库时出错的解决方案

《安装centos8设置基础软件仓库时出错的解决方案》:本文主要介绍安装centos8设置基础软件仓库时出错的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录安装Centos8设置基础软件仓库时出错版本 8版本 8.2.200android4版本 javas