有效
一种基于QUIC协议的部分可靠多路径传输方法
韩彪、李亚辉、宋丛溪、计晓岚、兰唯、韩雪强、徐草
中国人民解放军国防科技大学
摘要
本发明公开了一种基于QUIC协议的部分可靠多路径传输方法,目的是在同一个网络会话中同时传输可靠的数据流和不可靠的数据报,拓宽多路径QUIC的适用场景。技术方案是构建基于多路径QUI C协议的部分可靠传输系统;基于多路径QUIC的部分可靠传输系统的客户端的握手模块A与服务器的握手模块B进行通信,建立多路径QUIC会话,完成握手;发送方向接收方传输数据;接收方接收数据报文,对数据报文进行处理并重组成完整的文件或数据单元。采用本发明可减小数据报的交付时间、减少网络资源浪费,在同一个网络会话中同时传输可靠的数据流和不可靠的数据报,拓宽多路径QUIC的适用场景。
1.一种基于QUIC协议的部分可靠多路径传输方法,基于QUIC协议的部分可靠多路径传输方法基于QUIC协议的多路径传输架构实现,基于QUIC协议的多路径传输架构由服务端、客户端构成,客户端上安装有握手模块A、数据发送模块A、接收模块A、乱序重排模块A;数据发送模块A包括数据流模块A、数据加密模块A、调度模块A;服务端上安装有握手模块B、数据发送模块B、接收模块B、乱序重排模块B;数据发送模块B包括数据流模块B、数据加密模块B、调度模块B;客户端的握手模块A与服务端的握手模块B、客户端的数据发送模块A相连;客户端的握手模块A向服务端的握手模块B发送探测报文,探测报文包含客户端的QUIC协议版本号、密钥信息、客户端的端口信息;客户端的握手模块A还从服务端的握手模块B接收成功响应报文或失败响应报文;如果接收的是成功响应报文,会话建立,生成会话信息A,客户端的握手模块A将会话信息A中握手成功后建立的路径信息发送给数据发送模块A的调度模块A,握手模块A同时将会话信息A中的密钥发送给接收模块A和数据发送模块A的数据加密模块A;如果是失败响应报文,则建立会话失败,失败响应报文包含的信息为握手失败的错误代码;服务端的握手模块B与客户端的握手模块A、服务端的数据发送模块B相连;服务端的握手模块B收到客户端握手模块A的探测报文,根据其中的客户端QUIC协议版本号决定响应报文的类型;如果客户端QUIC协议版本号与服务端的QUIC协议版本号一致,则握手模块B根据探测报文中的客户端的端口信息和本服务端的端口数生成路径信息,根据探测报文中密钥信息生成加解密数据的密钥,填入成功响应报文,发送到客户端的握手模块A;如果客户端的QUIC协议版本号与服务端的所使用的QUIC协议版本号不一致,则握手模块B将错误代码填入失败响应报文,发送到客户端的握手模块A;若握手模块B发送的是成功响应报文,则生成会话信息B,握手模块B将会话信息B的握手成功后建立的路径信息发送到数据发送模块B的调度模块B,握手模块B同时将会话信息B的密钥发送给接收模块B和数据发送模块B的数据加密模块B,会话信息B包含的内容和成功响应报文相同,路径信息中包含了所有可以发送数据报文的路径以用各条路径的往返延迟RTT和各条路径的拥塞窗口CWND,调度模块B选择其中的路径进行数据报文调度,密钥用于数据加解密模块B对数据进行加解密、接收模块B进行解密;客户端的数据流模块A与数据加密模块A相连,用于发送客户端的文件,每发送一个文件,生成一个数据流,并将数据流的数据切割成若干个数据段输出到数据加密模块A;服务端的数据流模块B与数据加密模块B相连,用于发送服务端的文件,每发送一个文件,生成一个数据流,并将数据流的数据切割成若干个数据段输出到数据加密模块B;客户端的接收模块A与服务端的调度模块B、客户端的乱序重排模块A相连,客户端的接收模块A从服务端的调度模块B接收数据报文,从握手模块A接收会话信息A中的密钥,将数据报文解封装,取出数据段,使用密钥解密后输出到乱序重排模块A;服务端的接收模块B与客户端的调度模块A、服务端的乱序重排模块B相连,服务端的接收模块B从客户端调度模块A接收数据报文,从握手模块B接收会话信息B中的密钥,将数据报文解封装,取出数据段,使用密钥解密后输出到乱序重排模块B;其特征在于包括以下步骤:第一步:构建基于多路径QUIC协议的部分可靠传输系统,方法是:在数据发送模块A中添加数据报模块A、数据报主动丢弃模块A、数据报分配模块A;在数据发送模块B中添加数据报模块B、数据报主动丢弃模块B、数据报分配模块B,构成基于多路径QUIC协议的部分可靠传输系统;客户端的数据报模块A与客户端应用、客户端的数据报主动丢弃模块A相连,接收来自客户端应用要发送的数据单元和交付截止时间,该数据单元是应用发送的一个具有交付截止时间消息体;数据报模块A根据数据单元生成数据报,然后将数据报和数据报交付截止时间传输给客户端的数据报主动丢弃模块A;所述数据报交付截止时间等于数据单元的交付截止时间;服务端的数据报模块B与服务端应用、服务端的数据报主动丢弃模块B相连,接收来自服务端应用要发送的数据单元和交付截止时间,数据报模块B根据数据单元生成数据报,然后将数据报和其交付截止时间传输给服务端的数据报主动丢弃模块B;客户端的数据报主动丢弃模块A与客户端的数据报模块A、客户端的数据报分配模块A相连,接收来自客户端数据报模块A的数据报,根据该数据报包含的数据量大小、交付截止时间、所有路径的网络状态计算是否能够在交付截止时间之前交付到服务端;若能够交付,将该数据报输出到客户端的数据报分配模块A;若不能,则主动丢弃该数据报;所述网络状态由调度模块A根据以往在每一条路径上发送的数据报文统计得到,包括每条路径的往返的时间延迟、带宽;服务端的数据报主动丢弃模块B与服务端的数据报模块B、服务端的数据报分配模块B相连,接收来自服务端数据报模块B的数据报,根据该数据报包含的数据量大小、交付截止时间、所有路径的网络状态计算是否能够在交付截止时间之前交付到客户端;若能够交付,将该数据报输出到服务端的数据报分配模块B;若不能,则主动丢弃该数据报;客户端的数据报分配模块A与客户端的数据报主动丢弃模块A、客户端的调度模块A、客户端的数据加密模块A相连,将从客户端的数据报主动丢弃模块A接收的数据报切分成若干个数据段,根据所有路径的网络状态,决定各个路径上分配的数据段的比例;并将该数据报在各条路径上分配的比例信息输出到客户端的调度模块A,将切割后的数据段输出到客户端的数据加密模块A;服务端的数据报分配模块B与服务端的数据报主动丢弃模块B、服务端的调度模块B、服务端的数据加密模块B相连,将从服务端的数据报主动丢弃模块B接收的数据报切分成若干个数据段,根据所有路径的网络状态,决定各个路径上分配的数据段的比例;并将该数据报在各条路径上分配的比例信息输出到服务端的调度模块B,将切割后的数据段输出到服务端的数据加密模块B;客户端的数据加密模块A与客户端的数据报分配模块A、客户端的数据流模块A、客户端的调度模块A相连,接收客户端的数据流模块A或者客户端的数据报分配模块A发出的切割后的数据段,使用密钥对切割后的数据段加密,将切割后的数据段封装成数据报文输出到调度模块A;服务端的数据加密模块B与服务端的数据报分配模块B、服务端的数据流模块B、服务端的调度模块B相连,接收服务端的数据流模块B或者服务端端的数据报分配模块B发出的切割后的数据段,使用密钥对切割后的数据段加密,将切割后的数据段封装成数据报文输出到调度模块B;客户端的调度模块A与客户端的数据加密模块A、客户端的数据报分配模块A、服务端的接收模块B相连,接收来自客户端的数据加密模块A的数据报文,从客户端的数据报分配模块A接收数据报在各条路径上分配的比例信息,若该数据报文的数据来自客户端的数据报分配模块A,则按照该数据报在各条路径上分配的比例信息选取一条未阻塞且比例不为零的路径发送该数据报文到服务端的接收模块B,然后将该路径上分配的比例减1;若该数据报文的数据来自客户端的数据流模块A,则使用调度算法将该数据报文发送到服务端的接收模块B;服务端的调度模块B与服务端的数据加密模块B、服务端的数据报分配模块B、客户端的接收模块A相连,接收来自服务端的数据加密模块B的数据报文,从服务端的数据报分配模块B接收数据报在各条路径上分配的比例信息,若该数据报文的数据来自服务端的数据报分配模块B,则按照该数据报在各条路径上分配的比例信息选取一条未阻塞且比例不为零的路径发送该数据报文到客户端的接收模块A,然后将该路径上分配的比例减1;若该数据报文的数据来自服务端的数据流模块B,则使用与客户端的调度模块A相同的调度算法将该数据报文发送到服务端的接收模块B;客户端的乱序重排模块A与客户端的接收模块A、客户端的应用软件相连,从客户端的接收模块A接收数据段,将数据段重排序成完整的文件或数据单元,然后输出给客户端的应用软件;服务端的乱序重排模块B与服务端的接收模块B、服务端的应用软件相连,从服务端接收模块B接收数据段,将数据段重排序成完整的文件或数据单元,然后输出给服务端的应用软件;第二步,基于多路径QUIC的部分可靠传输系统的客户端的握手模块A与服务器的握手模块B进行通信,建立多路径QUIC会话,完成握手:2.1客户端的握手模块A向服务器的握手模块B发送探测报文;2.2服务端的握手模块B从客户端的握手模块A接收探测报文;2.3服务端的握手模块B识别探测报文中的信息,若探测报文中QUIC协议版本号与服务端的QUIC协议版本号一致,生成成功响应报文和会话信息B,所述成功响应报文包含握手成功后建立的路径信息,以及双方加解密数据使用的统一密钥;所述会话信息B内容和成功响应报文相同;握手模块B向客户端的握手模块A发送成功响应报文,并将会话信息B的握手成功后建立的路径信息发送到数据发送模块B的调度模块B,握手模块B同时将会话信息B的密钥发送给接收模块B和数据发送模块B的数据加密模块B,转步骤2.4;否则,生成包含握手失败的错误代码的失败响应报文并向客户端的握手模块A发送失败响应报文,转步骤2.6;2.4客户端的握手模块A接收服务端握手模块B发出的成功响应报文,提取其中的密钥和路径信息作为会话信息A发送给数据发送模块A,将会话信息A中握手成功后建立的路径信息发送给数据发送模块A的调度模块A,同时将会话信息A中的密钥发送给接收模块A和数据发送模块A的数据加密模块A;2.5握手完成,进入数据传输阶段,将发送数据报文的一端定义为发送方,将接收数据的一端定义为接收方;令客户端为发送方,服务端为接收方,发送方转第三步发送报文,同时接收方转第四步接收报文;2.6客户端的握手模块A接收服务端的失败响应报文,转步骤2.1;第三步,发送方向接收方传输数据,方法是:3.1客户端的数据发送模块A从应用接收需要发送的文件或者数据单元及其交付截止时间,如果是文件则将该文件传输到客户端的数据数据流模块A,转步骤3.2;若是数据单元及其交付截止时间,则将数据单元及其交付截止时间传输到客户端的数据报模块A,转步骤3.3;3.2客户端的数据流模块A发送文件,方法是:3.2.1客户端的数据流模块A为将要发送的文件生成对应的一个数据流,并将该文件切割成N个属于该数据流的数据段,将切割后的N个数据段按照顺序依次发送到客户端的数据加密模块A;3.2.2客户端的数据加密模块A对从客户端数据流模块A接收的N个数据段使用密钥将数据加密,并封装成N个数据报文;3.2.3令变量n=1;3.2.4客户端数据加密模块A从N个数据报文取出第n个输出到客户端的调度模块A;3.2.5客户端的调度模块A使用调度算法根据路径信息在多路径中选择一条可用路径,若没有可用的路径,则转3.2.5等待;若存在可用的路径,转3.2.6;3.2.6将第n个数据报文从3.2.5选出的路径发出,令n=n+1,如果n≤N,转3.2.4;如果n>N,该数据流对应的所有数据报文发送完毕,转3.1等待发送方应用发送下一个文件;3.3客户端向数据报模块A发送数据单元及其交付截止时间,方法是:3.3.1客户端的数据报模块A对数据单元生成一个对应的数据报block,并将block及其交付截止时间deadline发送到客户端的数据报主动丢弃模块A;3.3.2客户端的数据报主动丢弃模块A首先判断数据报block能否在交付截止时间Deadline前发送到服务端,方法是:3.3.2.1数据报主动丢弃模块A计算数据报包含的数据段的数量num,使用公式一计算:其中,DataSize为block的数据量大小,MSS为数据报的一个数据段的大小;3.3.2.2假设一共存在D条路径,数据报主动丢弃模块A计算一条路径每秒能够传输数据段的数量,其中第i条路径每秒能够传输数据段的数量pps i 按公式二计算:其中,RTT i 是第i条路径的往返延迟,CWND i 是第i条路径的拥塞窗口,这两个值从路径信息获取;D为正整数;3.3.2.3数据报主动丢弃模块A将不能用于发送数据段的路径排除,剩余的m条路径用于发送数据段,m=D-排除掉的路径数,令剩余的m条路径称为有效路径,令m条有效路径构成的集合为有效路径集合S;3.3.2.4数据报主动丢弃模块A判断剩下的m条路径能否在Deadline内将该数据报的num个数据段发送到服务端,若不能在Deadline内将该数据报的num个数据段发送到服务端,数据报主动丢弃模块A将该数据报丢弃,转3.1继续等待应用发送下一个数据单元;若能在Deadline内将该数据报的num个数据段发送到服务端,转3.3.3;3.3.3客户端的数据报分配模块A将待发送的数据报切割成num个数据段,按数据段顺序标记序号,并决定数据报包含的数据段在各条路径上分配的比例,方法是:3.3.3.1数据报分配模块A使用公式五计算数据报最短交付时间MinDeliverTime:x ii 代表在第ii条路径上分配的数据段比例,x ii 在0到1之间,且满足:公式五和公式六构成m个约束公式,利用Water-filling算法求得在m条有效路径上分配的数据段的比例集合X,X=[x 1 ,x 2 ,…,x ii ,…,x m ];3.3.3.2数据报分配模块A将数据段在m条有效路径上分配的比例信息X输出到调度模块A,即告知第ii条路径需要发送cnt ii 个数据报文,cnt ii 为第ii条路径上分配的数据报文数量,cnt ii =x ii ×num;同时数据报分配模块A将数据段按序编号,将按序编号后的num个数据段输出到数据加密模块A;3.3.4客户端的数据加密模块A对接收的按序编号后的num个数据段加密;将加密后的num个数据段打包成数据报文,按序依次发送给调度模块A;3.3.5客户端的调度模块A向接收方的接收模块B按照每条路径上分配的报文数量发出数据报文,其中第ii条路径上分配的数据报文数为cnt ii ,待发送的数据报文数量初始化为n=num,方法是:3.3.5.1客户端的调度模块A监控有效路径集合S,若存在一条或多条有效路径,从有效路径中随机选择第k条有效路径将报文发出,第k条有效路径发出报文后,该路径所分配的数据报文数cnt k =cnt k -1,1≤k≤m-1,若cnt k 为零,将第k条路径从有效路径集合S中删除;3.3.5.2令剩余未发送的报文数为n=n–1,若n为0,转3.1继续等待发送下一个数据单元或文件;若n值不为0,转3.3.4继续发送下一个数据报文;第四步:接收方接收数据报文,对数据报文进行处理并重组成完整的文件或数据单元,方法是:4.1服务端的接收模块B经路径信息中的所有路径接收数据报文,解封装取出数据段,使用密钥对数据段解密,将数据段交付给乱序重排模块B,若数据段属于数据流,转4.2;若数据段属于数据报,转4.3;4.2乱序重排模块B接收数据段,根据数据段的序号重排发送方数据流模块A传输的N个数据段,将排序得到的文件交付应用,转4.1等待接收下一个文件的数据报文;4.3乱序重排模块B根据数据段的序号重排接收到的num个数据段,得到完整的接收的数据单元,交付给需要用该数据单元的应用软件,转4.1等待接收下一个数据报文,num个数据段的交付截止时间均为Deadline。
2.如权利要求1所述的一种基于QUIC协议的部分可靠多路径传输方法,其特征在于所述调度算法指RR、ECF、BLEST、minRTT中的任意一种。
3.如权利要求1所述的一种基于QUIC协议的部分可靠多路径传输方法,其特征在于3.3.2.1步所述DataSize的单位为字节,MSS为1220字节。
4.如权利要求1所述的一种基于QUIC协议的部分可靠多路径传输方法,其特征在于3.3.2.3步所述数据报主动丢弃模块A将不能用于发送数据段的路径排除的方法是判断公式三是否成立, 表示在第k条路径上发送的数据段到达接收方需要的时间,若公式三成立,说明第k条路径上发送的数据段到达接收方需要的时间大于Deadline,将第k条路径排除。
5.如权利要求1所述的一种基于QUIC协议的部分可靠多路径传输方法,其特征在于3.3.2.4步所述数据报主动丢弃模块A判断剩下的m条路径能否在Deadline内将该数据报的num个数据段发送到服务端的方法是判断公式四是否成立:公式四左侧表示m条路径能够在Deadline时间内发送的数据段的数量;若公式四成立,说明不能在Deadline内将该数据报的num个数据段发送到服务端,数据报主动丢弃模块A将该数据报丢弃。
6.如权利要求1所述的一种基于QUIC协议的部分可靠多路径传输方法,其特征在于3.3.4步所述客户端的数据加密模块A对接收的按序编号后的num个数据段加密的方法是使用会话信息A中的密钥结合传输层安全协议1.3版。
7.如权利要求1所述的一种基于QUIC协议的部分可靠多路径传输方法,其特征在于4.2步所述乱序重排模块B接收数据段,根据数据段的序号重排发送方数据流模块A传输的N个数据段的方法是:4.2.1令n=1,一共需要接收N个数据报文;4.2.2乱序重排模块B从接收模块B接收数据段,若未接收到数据段,转4.2.2等待,若接收到数据段,转4.2.3;4.2.3令n=n+1,若n≤N,转4.2.2等待接收后续的报文;若n>N,转4.2.4;4.2.4乱序重排模块B根据数据段的序号对N个数据段进行重排序,将排序得到的文件交付应用。
8.如权利要求1所述的一种基于QUIC协议的部分可靠多路径传输方法,其特征在于4.3步所述乱序重排模块B根据数据段的序号重排接收到的num个数据段的方法是:4.3.1令j=1,一共需要接收num个数据报文;4.3.2乱序重排模块B从接收模块B接收第j个数据段,若未接收到数据段,转4.3.2等待,若接收到数据段,转4.3.3;4.3.3令j=j+1,若j≤num且当前时间未超过Deadline,转4.3.2等待接收后续的数据段;若j≤num且当前时间超过Deadline,转4.3.4;若j≥num,转4.3.5;4.3.4丢弃已收到的j个数据段,转4.1,等待接收下一个数据报文;4.3.5乱序重排模块B根据数据段的序号对num个数据段进行重排序,得到完整的接收的数据单元,交付给需要用该数据单元的应用软件。



