有效
基于SRv6和带宽测量的带宽保证网络传输方法
原玉磊、赵宝康、彭伟、赵锋、时向泉、陶静
中国人民解放军国防科技大学
摘要
本发明公开了基于SRv6和带宽测量的带宽保证网络传输方法,目的是解决网络流传输的带宽保障问题。技术方案是:构建由网络控制节点、M个网络应用节点组成的带宽保证网络传输控制系统,网络控制节点上安装有配置文件、初始化模块、拓扑计算模块、路径计算模块、传输控制模块、带宽数据接收模块,网络应用节点上安装有传输代理模块。带宽数据接收模块、拓扑计算模块、路径计算模块、传输控制模块和传输代理模块并行配合工作,利用网络带宽测量获得的网络带宽数据,根据网络流的传输带宽需求,计算出传输带宽满足网络流需求的传输路径,利用SRv6路由转发机制控制网络流每个报文按计算出的传输路径传输,使得网络流传输带宽满足要求。
1.一种基于SRv6和带宽测量的带宽保证网络传输方法,其特征在于包括以下步骤:第一步,构建带宽保证网络传输控制系统,带宽保证网络传输控制系统由一个网络控制节点、M个网络应用节点组成;网络控制节点是服务器,其上安装有配置文件、初始化模块、拓扑计算模块、路径计算模块、传输控制模块、带宽数据接收模块;网络应用节点是服务器或者终端,其上安装有传输代理模块;配置文件存储网络报文时延确定性传输控制系统运行所需的参数,包括网络中转发节点数量N,N个转发节点的编号及IP地址; N为正整数,且N≥3;初始化模块与配置文件、路径计算模块、传输控制模块、传输代理模块、拓扑计算模块相连;初始化模块从配置文件读取网络中转发节点数量N,按照顺序分别从配置文件中读取N个转发节点的编号及IP地址,将转发节点IP地址存入IP地址数组ip_array;ip_array共有N个元素,每个元素有两个域,一个域为序号,存储一个转发节点的编号,另一个域为值,存储相应编号转发节点的IP地址;初始化模块将N发送给拓扑计算模块,将N和ip_array发送给传输控制模块;带宽数据接收模块与拓扑计算模块、传输控制模块和外部带宽测量系统相连;带宽数据接收模块监听外部带宽测量系统,从外部带宽测量系统接收网络带宽数据;网络带宽数据由网络带宽数据数组netband_array以及带宽数据个数BN组成;netband_array中共有BN个元素,每个元素存储一个带宽数据;每个带宽数据包括3个域:该数据所在网络链路的起始节点编号start_id,所在网络链路的终止节点编号end_id,所在网络链路的带宽band;带宽数据接收模块将BN和netband_array分别发送给拓扑计算模块和传输控制模块;拓扑计算模块与初始化模块、带宽数据接收模块和路径计算模块相连;拓扑计算模块从初始化模块接收网络中转发节点数量N,从带宽数据接收模块接收网络带宽数据个数BN和网络带宽数据数组netband_array,根据N、BN和netband_array计算网络拓扑数据;网络拓扑数据由邻接表数组topo_array组成,topo_array中共有N个元素,每个元素存储一个邻接表数据;邻接表数据包括3个域:该邻接表代表的转发节点编号nid,与编号为nid的转发节点直接相连的转发节点个数an,与编号为nid的转发节点直接相连的转发节点编号数组id_array,id_arrray中每个元素存储与编号为nid的转发节点直接相连的一个转发节点的编号,共有an个元素,an为正整数;拓扑计算模块将N和topo_array发送给路径计算模块;路径计算模块与拓扑计算模块和传输控制模块相连;路径计算模块从拓扑计算模块接收网络拓扑数据topo_array和N,根据N和topo_array计算网络中任意两个转发节点之间的所有传输路径,并存储于传输路径数组path_array中,path_array中共有N×(N-1)/2个元素,每个元素的数据结构为path_str,path_str存储多条路径,path_str包含4个域:路径起始节点编号sid,路径终止节点编号did,从路径起始节点到路径终止节点的所有路径数量pn,每个路径中转发节点数量数组NN,NN中共有pn个元素,第i_nn个元素存储第i_nn条路径中转发节点数量,i_nn=1,2,…,pn,pn条路径顺序经过的转发节点编号数组node_array,node_array为二维数组,node_array中共有pn个元素,每个元素为一个数组;node_array中第i_node_array个元素是存储第i_node_array条路径中转发节点编号的数组,该数组顺序存储第i_node_array条路径中转发节点编号,每个元素存储一个转发节点编号,共有NN[i_node_array]个元素,NN[i_node_array]表示第i_node_array条路径中转发节点数量;路径计算模块将计算出的传输路径数组path_array发送给传输控制模块;传输控制模块与初始化模块、路径计算模块、带宽数据接收模块和传输代理模块相连;从初始化模块接收N和ip_array,从带宽数据接收BN和netband_array,从路径计算模块接收path_array,从传输代理模块接收传输带宽需求req_str;传输控制模块根据N,BN,netband_array,path_array计算满足req_str需求的传输路径,并将计算结果存入传输路径信息数据pathinfo,pathinfo包含2个域:传输路径上所有转发节点的数量pin,pin为正整数,传输路径上顺序经历的转发节点的IP地址数组pinIP_array,pinIP_array中每个元素存储一个转发节点的IP地址,共有pin个元素;传输控制模块将pathinfo发送给传输代理模块;传输代理模块与传输控制模块和外部网络应用相连;传输代理模块维护一个传输路径信息链表flow_path_list,链表中每个元素的数据结构为网络流传输路径数据结构flow_path_str,flow_path_str存储一个正在传输的网络流的路径信息,flow_path_str包含7个域:网络流最近传输报文的时间即flow_t、网络流的源IP即flow_sip、网络流的目的IP即flow_dip、网络流的源端口即flow_sport、网络流的目的端口即flow_dport、网络流传输路径中节点数量即flow_nn、网络流传输路径节点IP数组即flow_ip_array;传输代理模块从外部网络应用接收网络流传输带宽需求,并将网络应用对网络流传输带宽需求存储于传输带宽需求数据结构req_str,req_str包含5个域:网络流源节点IP地址即sip,网络流目的节点IP地址即dip,网络应用的网络流源端口即sport,网络应用的网络流目的端口即dport,网络流传输带宽需求即minBand;传输代理模块将req_str发送给传输控制模块,然后从传输控制模块接收pathinfo,根据pathinfo构建flow_path_str,并将flow_path_str加入flow_path_list;同时,传输代理模块从外部网络应用接收要传输的网络报文,根据网络报文的源IP、目的IP、源端口、目的端口信息从flow_path_list中查找对应网络流传输路径数据,并根据网络流传输路径数据中的传输节点IP数组为网络报文封装SRv6报文头,将封装了SRv6报文头的网络报文发送至外部网络应用;第二步,初始化配置文件,方法是:根据应用网络的网络拓扑,统计网络中转发节点的数量N,并将N写入配置文件;根据应用网络中每个转发节点的IP地址以及对应每个转发节点对应网络拓扑中的编号,分别将N个转发节点的编号和对应IP地址写入配置文件;第三步,初始化模块对带宽保证网络传输控制系统进行初始化,方法是:3.1从配置文件读取N,按照顺序读取N个转发节点的编号和IP地址;3.2初始化ip_array,即将N个转发节点的编号和IP地址分别存入ip_array的N个元素中;3.3将N发送给拓扑计算模块;3.4将N和ip_array发送给传输控制模块;第四步,带宽保证网络传输控制系统的带宽数据接收模块、拓扑计算模块、路径计算模块、传输控制模块和M个网络应用节点上的传输代理模块并行配合工作,对网络报文传输进行带宽保证传输控制,方法是:带宽数据接收模块按照步骤4.1监听外部带宽测量系统,从外部带宽测量系统接收网络带宽数据,将接收的BN个网络带宽数据存入带宽数据数组netband_array,并将BN和netband_array发送给拓扑计算模块和传输控制模块;同时,拓扑计算模块按照步骤4.2从初始化模块接收N,从带宽数据接收模块接收BN和netband_array,计算邻接表数组topo_array,将N和topo_array发送给路径计算模块;同时,路径计算模块按照步骤4.3从拓扑计算模块接收N和topo_array,根据topo_array计算网络中任意两个转发节点间的所有路径,将任意两个转发节点间的所有路径存入传输路径数组path_array,将path_array发送给传输控制模块;同时,传输控制模块按照步骤4.4从初始化模块接收N和ip_array,从路径计算模块接收path_array,从带宽数据接收模块接收netband_array及BN,从传输代理模块接收req_str,根据netband_array和req_str计算出满足网络带宽要求的路径,构建传输路径信息数据pathinfo,将计算出的路径存入pathinfo,将pathinfo发送给传输代理模块;同时,M个网络应用节点上的传输代理模块按照步骤4.5从外部网络应用接收需要网络带宽保证传输控制的网络流的源IP地址和目的IP地址,以及所需网络带宽最小值minBand,将接收数据存入req_str,将req_str发送给传输控制模块,从传输控制模块接收pathinfo,利用pathinfo为网络流中的每个报文封装SRv6报文头,将封装了SRv6报文头的网络报文发送至外部网络应用;4.1带宽数据接收模块按步骤4.1.1-4.1.4接收数据并进行转发:4.1.1带宽数据接收模块监听外部带宽测量系统,如果有网络带宽数据到达,转步骤4.1.2,否则转步骤4.1.1继续监听;4.1.2带宽数据接收模块从外部带宽测量系统接收网络带宽数据的个数以及网络带宽数据,并发送给拓扑计算模块和传输控制模块;方法是:4.1.2.1接收网络带宽数据个数BN;4.1.2.2初始化网络带宽数据数组netband_array为空;4.1.2.3依序接收BN个网络带宽数据,将这BN个网络带宽数据存入netband_array;4.1.2.4将BN和netband_array发送给拓扑计算模块和传输控制模块;4.1.2.5转步骤4.1.1;4.2拓扑计算模块按照步骤4.2.1-4.2.6计算网络拓扑:4.2.1拓扑计算模块从初始化模块接收转发节点数量N;4.2.2拓扑计算模块监听带宽数据接收模块,当有带宽数据到达时,转步骤4.2.3,否则转步骤4.2.2继续监听;4.2.3接收网络带宽数据数组netband_array以及数组中元素个数BN;4.2.4构建含有N个元素的到达网络拓扑数据数组topo_array,初始化topo_array中所有元素的每一个域的值为0;4.2.5拓扑计算模块根据netband_array计算网络拓扑,并将网络拓扑存入网络拓扑数据数组topo_array;topo_array中第i个元素topo_array[i]记录网络中与节点i链接的所有节点信息;4.2.6将N和topo_array发送给路径计算模块,转步骤4.2.2;4.3路径计算模块按照步骤4.3.1-4.3.8计算网络中任意两个转发节点间的所有路径:4.3.1监听拓扑计算模块,如果有topo_array到达,转步骤4.3.2,否则转步骤4.3.1继续监听;4.3.2从拓扑计算模块接收N和topo_array,构建含有(N-1)×N/2个元素的传输路径数组path_array,将path_array中所有元素的每一个域的值初始化为0;4.3.3定义循环变量ii、jj、k,令ii=0,k=0;4.3.4令jj=ii+1,如果jj≤N,转步骤4.3.5,否则转步骤4.3.7;4.3.5计算编号为ii的转发节点和编号为jj的转发节点之间的所有路径;方法是:使用深度优先遍历算法计算编号为i和编号为j的转发节点之间所有路径,算法输入为ii、jj和topo_array,算法输出为路径path_str_ii_jj,path_str_ii_jj的数据结构与path_str相同;4.3.6将计算出的路径path_str_ii_jj添加到传输路径数组中;方法是:将path_str_ii_jj复制到path_array[k]中,path_array[k]表示path_array的第k个元素;4.3.7令k=k+1,转步骤4.3.4;4.3.8令ii=ii+1,如果ii≤N,转步骤4.3.4,否则转步骤4.3.9;4.3.9将传输路径数组path_array发送给传输控制模块,转步骤4.3.14.4传输控制模块按照步骤4.4.1-4.4.7计算出满足网络带宽需求的路径:4.4.1传输控制模块从初始化模块接收N、ip_array,初始化netband_array和path_array为空;4.4.2传输控制模块监听带宽数据接收模块、路径计算模块和传输代理模块,当有netband_array到达时转步骤4.4.3,当有path_array到达时转步骤4.4.4,当有网络带宽需求数据req_str到达时转步骤4.4.5,否则转步骤4.4.2继续监听;4.4.3从带宽数据接收模块接收netband_array及数组元素个数BN,转步骤4.4.2;4.4.4从路径计算模块接收传输路径数据数组path_array,转步骤4.4.2;4.4.5从传输代理模块接收网络带宽需求数据req_str;4.4.6传输控制模块判断netband_array和path_array是否为空,如果为空则转步骤4.4.2;否则转步骤4.4.7;4.4.7传输控制模块根据netband_array和req_str从path_array中计算出满足网络带宽需求的路径,将满足网络带宽需求的路径存入传输路径信息pathinfo,将pathinfo发送给传输代理模块;转步骤4.4.2;4.5网络应用节点1,…,网络应用节点m,…,网络应用节点M上的传输代理模块并行按照步骤4.5.1-4.5.14利用pathinfo为网络流中的每个报文封装SRv6报文头,将封装了SRv6报文头的网络报文发送至外部网络应用, 1≤m≤M,方法是:4.5.1构建传输路径信息链表flow_path_list并初始化为空;4.5.2监听外部网络应用,如果有传输带宽数据需求到达,转步骤4.5.3;如果有网络报文到达,转步骤4.5.9;否则转步骤4.5.2继续监听;4.5.3从外部网络应用接收传输带宽需求数据,包括flow_sip,flow_dip,flow_sport,flow_dport,flow_band;4.5.4构建传输带宽需求数据结构req_str,将传输带宽需求数据存入req_str,令:req_str.sip=flow_sip;req_str.dip=flow_dip;req_str.sport=flow_sport;req_str.dport=flow_dport;req_str.minband=flow_band;将req_str发送给传输控制模块;4.5.5从传输控制模块接收路径信息pathinfo;4.5.6构建网络流传输路径数据结构flow_path_str,获取系统当前时间t_current;4.5.7利用传输带宽需求和路径信息为网络流传输路径数据结构flow_path_str赋值;4.5.8将网络流传输路径数据flow_path_str加入到传输路径信息链表flow_path_list中;转步骤4.5.2;4.5.9从外部网络应用接收要传输的网络报文pkt;4.5.10提取网络报文pkt的源IP地址pkt_sip、目的IP地址pkt_dip、源端口pkt_sport、目的端口pkt_dport;4.5.11遍历传输路径信息链表flow_path_list,从中找出满足如下条件的元素flow_path_pkt:域网络流的源IP值与pkt_sip相等,并且域网络流的目的IP值与pkt_dip相等,并且域网络流源端口值与pkt_sport相等,并且域网络流目的端口值与pkt_dport相等;如果找到,转步骤4.5.12,如果没有找到,转步骤4.5.13;4.5.12顺序利用数组flow_path_pkt.flow_ip_array中的IP地址,根据SRH规范为网络报文封装SRv6报文头,并将封装后的报文发送至网络;转步骤4.5.2;4.5.13将网络报文pkt发送至网络;转步骤4.5.2。
2.如权利要求1所述的基于SRv6和带宽测量的带宽保证网络传输方法,其特征在于所述网络中任意两个转发节点之间的所有传输路径采用传输路径上顺序经过的转发节点编号来表示。
3.如权利要求1所述的基于SRv6和带宽测量的带宽保证网络传输方法,其特征在于4.1.2.3步所述依序接收BN个网络带宽数据,将这BN个网络带宽数据存入netband_array的方法是:4.1.2.3.1令n=1;4.1.2.3.2将第n个网络带宽数据所在网络链路的起始节点编号存放到netband_array[n-1]的start_id,将第n个网络带宽数据所在网络链路的终止节点编号存放到netband_array[n-1]的end_id,将第n个网络带宽数据所在网络链路的带宽存放到netband_array[n-1]的band;netband_array[n-1]netband_array表示的第n个元素,一般数组的元素序号是从0开始,netband_array中元素的序号为0~BN-1;4.1.2.3.3 令n=n+1;若n≤BN,转4.1.2.3.2,若n>BN,结束。
4.如权利要求1所述的基于SRv6和带宽测量的带宽保证网络传输方法,其特征在于4.2.5步所述拓扑计算模块根据netband_array计算网络拓扑,并将网络拓扑存入网络拓扑数据数组topo_array的方法是:4.2.5.1定义循环变量i、j,令i=0;4.2.5.2令j=0;4.2.5.3如果netband_array[j].start_id=i,说明netband_array[j]表示的链路是从节点i开始的,令:topo_array[i].nid=netband_array[j].start_id;topo_array[i].id_array[topo_array[i].an] = netband_array[j].end_id;topo_array[i].an= topo_array[i].an+1;其中topo_array[i].id_array[topo_array[i].an]表示与节点i有链接的第an个节点的编号;转步骤4.2.5.4;否则直接转步骤4.2.5.4;4.2.5.4令j=j+1,如果j<BN,转4.2.5.3,否则转步骤4.2.5.5;4.2.5.5令i=i+1,如果i<N,转步骤4.2.5.2,否则结束。
5.如权利要求1所述的基于SRv6和带宽测量的带宽保证网络传输方法,其特征在于4.4.7步所述传输控制模块根据netband_array和req_str从path_array中计算出满足网络带宽需求的路径,将满足网络带宽需求的路径存入传输路径信息pathinfo,将pathinfo发送给传输代理模块的方法是:4.4.7.1计算req_str中传输控制起始节点的编号req_sid,方法是:在数组ip_array中找出与req_str.sip相等的元素,该元素编号即为传输控制起始节点的编号;4.4.7.2计算req_str中传输控制终止节点的编号req_did,方法是:在数组ip_array中找出与req_str.dip相等的元素,该元素编号即为传输控制终止节点的编号;4.4.7.3遍历path_array,找出path_array中域sid等于req_sid并且域did等于req_did的元素,令找出的元素编号为path_id_req;4.4.7.4遍历节点req_sid和节点req_did之间的所有路径,定义循环变量i2,j2,令i2=0;4.4.7.5计算第i2个路径能够传输流量的最大带宽即第i2个路径上各个链路可传输带宽中的最小值;定义传输带宽变量path_band用以记录第i2个路径上各个链路可传输带宽中的最小值,将path_band初始化为一个足够大的值,令j2=0;4.4.7.6令:j2_start_id=path_array[path_id_req].node_array[i2][j2];j2_end_id=path_array[path_id_req].node_array[i2][j2+1];4.4.7.7遍历netband_array,找出netband_array中域start_id等于j2_start_id并且域end_id等于j2_end_id的元素,令其编号为j2_netband_array;4.4.7.8如果netband_array[j2_netband_array].band<path_band,令:path_band=netband_array[j2_netband_array].band;4.4.7.9令j2=j2+1,如果j2≤path_array[path_id_req].NN[i2]-1,转步骤4.4.7.6,否则,转步骤4.4.7.10;4.4.7.10判断path_band≥req_str.minBand是否成立;如果成立,转步骤4.4.7.12,否则转步骤4.4.7.11;4.4.7.11令i2=i2+1,如果i2≤path_array[path_id_req].pn,转步骤4.4.7.5继续计算,否则转步骤4.4.7.12;4.4.7.12构建传输路径信息pathinfo,令pathinfo.pin=path_array[path_id_req].NN[i2];4.4.7.13令j2=0;4.4.7.14为pathinfo的第j2个节点的IP地址赋值,令pathinfo.pinIP_array[j2]=ip_array[path_array[path_id_req].node_array[i2][j2]];其中path_array[path_id_req].node_array[i2][j2]表示节点req_sid和节点req_did之间的所有路径中的第i2个路径的第j2个节点的IP地址;4.4.7.15令j2=j2+1,如果j2≤path_array[path_id_req].nn[i2],转步骤4.4.7.14,否则转步骤4.4.7.16;4.4.7.16将pathinfo发送给传输代理模块。
6.如权利要求5所述的基于SRv6和带宽测量的带宽保证网络传输方法,其特征在于4.4.7.5步所述path_band初始化1000000000。
7.如权利要求1所述的基于SRv6和带宽测量的带宽保证网络传输方法,其特征在于4.5.7步所述利用传输带宽需求和路径信息为网络流传输路径数据结构flow_path_str赋值的方法是,令:flow_path_str.flow_t=t_current;flow_path_str.flow_sip=req_str.sip;flow_path_str.flow_dip=req_str.dip;flow_path_str.flow_sport=req_str.sport;flow_path_str.flow_dport=req_str.dport;flow_path_str.flow_nn=pathinfo.pin;将数组pathinfo.pinIP_array中的pathinfo.pin个元素按顺序复制到flow_path_str.flow_ip_array中。



