IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> lsquic使用《一》--概述 -> 正文阅读

[网络协议]lsquic使用《一》--概述

因为想使用下quic协议,所以开源框架中选了lsquic,C语音实现,支持客户端和服务端,然后文档也是开源框架中较为丰富的。支持QUIC V1、Draft-29、27,Q043,Q046及Q050。
对应github的commit是:df67278304ce 。V3.03版本之后两个commit。

1、lsquic特征与架构

1.1、特征

  • DPLPMTUD,一种在某一特定网络路径中探测单次能发送最大的UDP包大小的方法,因为QUIC是自己实现打包的故用这个方法能提升性能;
  • ECN,显式拥塞通知;
  • Spin bits,运行网络监控者计算链接的RTT;
  • Path migration, 网络路径迁移(变更)
  • NAT rebing,对端地址因为NAT等中间网络设备而变更了地址
  • Push promises,PUSH_PROMISE帧,用于在发送者打算初始化流之前通知对端
  • TLS Key updates
  • Extensions,包括http3的能力,Datagrams,丢包率计算, ACK确认延迟(用于提高吞吐率)

1.2 、架构

lsquic本身不提供socket发送和接收数据、也没有固定的event事件机制,这部分都需要使用者自己实现,通过注册回调函数的方式来实现。

2、概念

2.1、Egine

Egine用于管理连接(connection)、处理收包及发包调度。Egine可初始化为客户端的Egine或服务端Egine。如果我们的程序兼有客户端和服务端身份,则需要初始化两个Egine,一个为client的,一个为server的。

2.2、Connection

一个连接可以携带一个或多个流(stream),保证可靠的包传输并且处理quic协议的细节。在客户端程序中一个连接通过函数调用创建,而在服务端只有在握手成功后业务编程的用户才能获取到链接实例。

2.3、 stream

流用于发送我们需要发送的业务数据,不会单独存在,必须存在于连接中。流是双向的,通常和请求/应答相关。
在这里插入图片描述

3、初始化流程

概括的看初始化流程如下,客户端流程多一个connect操作
在这里插入图片描述
非lsquic初始化流程但是很重要的两个流程是socket初始化以及boring ssl的初始化,下篇在具体说一下。

3.1、stream和connection的回调函数列表

stream和connection回调函数是lsquic和用户业务代码交互的方式,存储在lsquic_stream_if结构体里面,该结构体中有些函数是必须实现的,如连接和流创建和销毁,数据读取和发送的函数,如下
在这里插入图片描述

3.2、Engine配置

Egine的配置信息存储在lsquic_engine_api中,包括回调函数及参数配置,其中有一些必须由用户实现的,如下:
在这里插入图片描述
可以在Engnie中指定使用quic协议的版本。

3.3、connection、stream创建流程(客户端为例)

在这里插入图片描述

3.4、收发数据的流程

3.4.1、收数据流程

在这里插入图片描述
数据刚从socket读取出来时还是加密的quic数据只有经过lsquic_stream_read之后才是我们最终所要获取的数据流。

3.4.2 、数据发送流程

在这里插入图片描述

4、参考

《1》、lsquic tutorial

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-11-24 08:19:34  更:2021-11-24 08:19:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年7日历 -2024/7/3 21:02:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码