一种基于SDN网络的自适应可靠数据传输方法转让专利

申请号 : CN201810596966.4

文献号 : CN108881031B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 王敏甘健侯徐坚袁凌云

申请人 : 云南师范大学

摘要 :

本发明涉及一种基于SDN网络的自适应可靠数据传输方法,属于数据传输技术领域。在建立TCP连接时,根据SDN控制器获得的网络状态统计信息,设置TCP流的初始传输窗口,有效减少数据中心网络中老鼠流的传输时间。传输过程中自动检测拥塞,并根据网络拥塞程度调整TCP流传输速率,有效缓解拥塞,提高网络带宽利用率,实现数据中心网络中数据的高效传输。

权利要求 :

1.一种基于SDN网络的自适应可靠数据传输方法,其特征在于:

步骤1:启动控制器,基于链路层发现协议,根据LLDP数据包携带的交换机标识和端口号动态生成网络拓扑;

步骤2:所述控制器周期性将端口统计消息下发到交换机,所述交换机将流表项计数器中记录的端口统计数据发回所述控制器,所述统计数据包括所述交换机端口收发的包数、字节数、丢包数以及统计持续的时间;

步骤3:建立TCP连接时,与客户端相连的交换机第一次接收到客户端发送的TCP SYN数据包后,解析包头,将解析包头后的数据包上交所述控制器,所述控制器记录下TCP流数据信息并发送流表修改消息到所述交换机,所述交换机添加流表项,其中设置匹配域为TCP头部的SYN标志,动作指令为将该数据包转发到所述控制器,然后所述交换机均会对收到的数据包头部进行解析,根据流表项匹配到TCP SYN数据包并上交所述控制器,所述控制器记录所有TCP数据流信息并生成全局数据流表;

步骤4:所述控制器根据相邻两次获取的端口发送字节数和统计持续的时间,通过式(1)计算每个端口的可用带宽;

式中,Bport_id是端口的最大带宽,tx_bytesi和tx_bytesi+1分别为第i次和第i+1次统计时端口port_id传输的字节数,ti和ti+1分别为从第一次统计到第i次和第i+1次获取端口统计信息时持续的时间;

将步骤3中所述TCP流经过的所有端口可用带宽的最大值作为该TCP流所在链路的可用带宽,即 其中,flow_id表示TCP流的标识,port_id表示端口号,port_id∈flow_id表示流标识为flow_id的TCP流经过了端口号为port_id的交换机端口;

步骤5:利用OpenFlow发现协议,在类型长度值结构中放入时间戳作为负载,由所述控制器产生带有时间戳的OFDP分组,并将OFDP分组放入Packet_out消息的数据部分,通过Packet_out命令向所述TCP流经过的所有交换机发送OFDP分组,命令中的操作设为Flood,即要求所述交换机向邻居交换机转发OFDP分组;

步骤6:所述交换机收到转发的OFDP分组后,通过Packet_in命令将其转发到控制器,所述控制器将当前时间减去OFDP分组中的时间戳可得到所述控制器到交换机Si、交换机Si到交换机Sj以及交换机Sj到控制器的时延,记为T1,同样,也可得到所述控制器到交换机Sj、交换机Sj到交换机Si以及交换机Si到控制器的时延,记为T2;

步骤7:利用Internet控制报文协议,通过所述控制器向所述交换机Si和Sj分别发送带有时间戳的响应请求,所述交换机收到之后回复携带响应请求时间戳的响应回复消息,所述控制器将当前时间与响应回复分组中的时间戳相减得到对应交换机Si、Sj和控制器之间的往返时延,分别记为Ti和Tj,则所述交换机Si和Sj之间链路的往返时延为路径R上两个交换机Si和Sk之间的链路往返时延为其中Si和Si+1表示路径R上相邻的两个交换机;

步骤8:所述控制器将产生携带时间戳的地址解析协议探测包发送到与TCP流两端主机A和B相连的交换机,由所述交换机转发到两个主机,主机产生携带ARP探测包时间戳的ARP回应包发回所述控制器,所述控制器用当前时间减去时间戳分别得到两个主机经所连交换机Sa和Sb到控制器的往返时延,用该往返时延减去交换机Sa和Sb到控制器的往返时延Ta和Tb即得到主机A、B与相连的交换机Sa、Sb之间的往返时延da和db,所述TCP流的往返时延所述控制器将RTTA→B记入全局数据流表GVT中;

步骤9:所述控制器根据可用带宽计算初始窗口值IW,向连接发送端主机的交换机下发初始窗口更新消息,初始窗口值IW为:式中,MSS_length表示一个数据分段的长度,1MSS表示一个数据分段;

步骤10:所述交换机收到来自所述控制器的初始窗口更新消息后,读取消息中的端口信息,从对应端口将该消息发送到主机,所述主机上的守护进程检测到初始窗口更新消息,该进程读取消息中的初始窗口值,并调用Linux内核命令修改TCP初始窗口值;

步骤11:所述交换机通过队尾丢弃队列管理方式实时监控TCP流经过的每个端口队列长度Q(t),当所述交换机中端口的队列长度超过阈值L=Q/3时,Q为队列缓存最大值,所述交换机产生拥塞通告消息,并通过Packet_in命令将其发送到所述控制器,所述交换机进入拥塞状态,并周期性的监视队列长度;

步骤12:所述控制器接收来自所述交换机的拥塞通告,从通告中获取所述交换机的队列长度Q(t),计算经过所述交换机的TCP流发送窗口的大小,所述TCP流i发送窗口大小的计算公式如下:式中,n是经过拥塞端口的TCP流的总数,通过控制器的全局数据流表GVT获取,B是所述交换机拥塞端口的最大带宽,RTTavg是所有经过拥塞端口的TCP流的平均RTT,所述控制器计算出发送窗口大小后,根据队列长度Q(t)来表征所述交换机的拥塞程度,计算经过所述交换机的所有TCP流的ACK报文中的接收窗口大小,所述ACK报文中接收窗口的大小计算如下:设置阈值QL=Q/2和 即满足L<QL<QH,利用上述两个阈值检测所述交换机的拥塞程度,根据拥塞程度的不同,设置不同的接收窗口大小:(1)若L≤Q(t)<QL,则表示轻度拥塞,设置TCP流i的接收窗口为:

(2)若QL≤Q(t)<QH,则表示持续拥塞,设置TCP流i的接收窗口为:

(3)若Q(t)≥QH,则表示严重拥塞,设置TCP流i的接收窗口为:

Wr(i)=1MSS

其中SWNDi为TCP流i当前发送窗口大小;

步骤13:所述控制器生成修改ACK报文接收窗口的流表,并将接收窗口值Wr(i)附在该流表报文的数据部分,下发到所述交换机,该流表头部匹配ACK报文,动作为修改ACK的接收窗口;

步骤14:所述交换机收到来自所述控制器的修改窗口流表,对经过该交换机的所有ACK报文逐一匹配,并将每个ACK报文头部的接收窗口字段改为RWND(i)'=min(Wr(i),RWND(i)),其中RWND(i)为数据流i的ACK报文中原有的接收窗口字段的大小;

步骤15:所述交换机持续监视队列长度,只要每个周期监视队列的长度仍超过阈值L,则持续向所述控制器发送拥塞通告;当连续三个周期监视的队列长度均小于阈值L,所述交换机向所述控制器发送拥塞恢复消息,所述控制器向所述交换机下发修改窗口流表信息删除命令,所述交换机收到上述命令后,将修改窗口流表删除,并恢复正常状态;

步骤16:关闭连接时,所述交换机第一次接收到客户端或服务器发送的TCP FIN数据包后,解析包头,通过Packet_in命令将解析头部后的数据包上交所述控制器,该控制器从所述全局数据流表中将对应的TCP流记录删除,并发送流表修改消息到所述交换机,该交换机收到流表修改消息后添加该流表项,其中设置匹配域为TCP头部的FIN标志,动作指令为将该数据包转发到所述控制器,之后所述交换机根据流表项匹配到TCP FIN数据包并上交所述控制器,该控制器从所述GVT表中将对应的TCP流记录删除。

说明书 :

一种基于SDN网络的自适应可靠数据传输方法

技术领域

[0001] 本发明涉及一种基于SDN网络的自适应可靠数据传输方法,属于数据传输技术领域。

背景技术

[0002] 信息服务的集约化、社会化和专业化发展使得因特网上的应用、计算和存储资源向数据中心迁移,数据中心规模不断扩大,同时出现了新的应用和计算模式。这些变化将进一步加剧数据中心网络传输的动态特性,给数据传输性能带来巨大的挑战。
[0003] 传统因特网中使用传输控制协议(Transmission Control Protocol,简称TCP)实现数据的可靠传输。但TCP仅通过端到端的网络参数估计网络状态,无法直接感知报文在中间路径上传送的状态,因此不能及时、准确跟踪网络状态的变化并动态调整传输参数,在数据中心网络中极易导致严重的网络拥塞,造成丢包率高、网络带宽利用率低等问题。当前研究的主要思路是通过对网络参数的估计了解网络拥塞程度,并通告发送端,以此调整发送速率,缓解或解决网络拥塞。但是这些方法要么存在拥塞程度估计不准确,要么技术方案部署困难,必须引入新的研究思路和技术手段来解决数据中心网络拥塞问题。
[0004] 软件定义网络(Software Defined Networking,简称SDN)是一种新型的基于软件的网络架构及技术,OpenFlow是实现SDN的一种技术方法,SDN/OpenFlow技术可以收集网络信息,包括网络流量信息和交换机队列信息等,通过这些信息能够更加精确、更加快速的进行网络状态的判断,为数据中心网络的拥塞控制和数据传输研究提供了全新的解决思路。然而在基于SDN的TCP传输协议研究中,一些解决方案仅通过SDN控制器实现部分初始传输参数的修改,但并未优化传输过程中的传输速率,另一些解决方案虽然利用SDN控制器实现了拥塞控制,但是传输速率的调整未充分考虑当前的网络状态和数据中心网络的数据特性。

发明内容

[0005] 本发明要解决的技术问题是提供一种基于SDN网络的自适应可靠数据传输方法,针对当前网络状态和数据中心网络的数据特性,增强数据传输对网络状态的自适应性,在兼顾当前的网络状态和数据中心网络的数据特性同时,优化传输过程中的传输速率。
[0006] 本发明的技术方案是:一种基于SDN网络的自适应可靠数据传输方法,在连接建立时,根据SDN控制器获得的网络状态统计信息,设置TCP流的初始传输窗口,有效减少数据中心网络中老鼠流的传输时间。传输过程中自动检测拥塞,并根据网络拥塞程度调整TCP流传输速率,有效缓解拥塞,提高网络带宽利用率,实现数据中心网络中数据的高效传输。
[0007] 初始化阶段:
[0008] 步骤1控制器启动并基于链路层发现协议(Link Layer Discovery Protocol,LLDP)收集各SDN网络设备的连接信息(包括在每个交换机上的输入端口和输出端口),根据LLDP数据包携带的交换机标识和端口号动态生成网络拓扑;
[0009] 步骤2所述控制器周期性下发端口统计(Port statistics)消息到交换机,所述交换机将流表项计数器中记录的端口统计数据发回所述控制器,这些统计数据包括所述交换机端口收发的包数、字节数、丢包数以及统计持续的时间;
[0010] 建立连接阶段:
[0011] 步骤3建立连接时,与客户端相连的交换机第一次接收到客户端发送的连接请求(TCP SYN)数据包后,解析包头,将解析包头后的数据包上交所述控制器,该控制器记录下TCP 流数据信息,并发送流表修改消息到所述交换机,该交换机添加流表项,其中设置匹配域为 TCP头部的SYN标志,动作指令为将该数据包转发到所述控制器。之后所述交换机均会对收到的数据包头部进行解析,根据流表项匹配到TCP SYN数据包并上交所述控制器,该控制器记录所有TCP数据流信息并生成全局数据流表;
[0012] 步骤4所述控制器根据相邻两次获取的端口发送字节数和统计持续的时间,计算每个端口的可用带宽,计算公式如下:
[0013]
[0014] 其中Bport_id是端口的最大带宽,在网络部署时已知,tx_bytesi和tx_bytesi+1分别为第i 次和第i+1次统计时端口port_id传输的字节数,ti和ti+1分别为从第一次统计到第i次和第i+1 次获取端口统计信息时持续的时间。
[0015] 将步骤3中所述TCP流经过的所有端口可用带宽的最大值作为该TCP流所在链路的可用带宽,即 其中flow_id表示TCP 流的标识,port_id表示端口号,port_id∈flow_id表示流标识为flow_id的TCP流经过了端口号为port_id的交换机端口;
[0016] 步骤5利用OpenFlow发现协议(OpenFlow Discovery Protocol,OFDP),在类型长度值结构(Type-Length-Value,TLV)中放入时间戳作为负载,由所述控制器产生带有时间戳的OFDP 分组,并将OFDP分组放入Packet_out消息的数据部分,通过Packet_out命令向所述TCP流经过的所有交换机发送OFDP分组,命令中的操作设为Flood,即要求所述交换机向邻居交换机转发OFDP分组。
[0017] 当控制器希望交换机发送某个数据包,就使用packet_out消息,将数据包放在其中的数据部分,或者将数据包缓存在交换机上并给出缓存ID。
[0018] 步骤6所述交换机收到转发的OFDP分组后,由于没有对应的流表项,因此通过Packet_in 命令将其转发到控制器,所述控制器将当前时间减去OFDP分组中的时间戳可分别得到所述控制器到交换机Si、交换机Si到交换机Sj以及交换机Sj到控制器的时延,记为T1,同样,也可得到所述控制器到交换机Sj、交换机Sj到交换机Si以及交换机Si到控制器的时延,记为T2;
[0019] 步骤7利用ICMP协议,通过所述控制器向所述交换机Si和Sj分别发送带有时间戳的响应请求。所述交换机收到之后回复携带响应请求时间戳的响应回复消息。所述控制器将当前时间与响应回复分组中的时间戳相减得到对应交换机Si、Sj和控制器之间的往返时延,分别记为Ti和Tj,则所述交换机Si和Sj之间链路的往返时延为 路径R上两个交换机Si和Sk之间的链路往返时延为 其中Si和Si+1表示路径R上
相邻的两个交换机;
[0020] 步骤8所述控制器产生携带时间戳的地址解析协议(Address Resolution Protocol,ARP)探测包发送到与TCP流两端主机A和B相连的交换机,由所述交换机转发到两个主机,主机产生携带ARP探测包时间戳的ARP回应包发回所述控制器,所述控制器用当前时间减去时间戳分别得到两个主机经所连交换机Sa和Sb到控制器的往返时延,该往返时延减去交换机Sa和Sb到控制器的往返时延即得到主机A、B与相连的交换机Sa、Sb之间的往返时延da和db,由此得到所述TCP流的往返时延RTTA→B=LSa→Sb+da+db。所述控制器将RTTA→B记入全局数据流表GVT中。
[0021] 步骤9所述控制器根据可用带宽计算初始窗口值IW,并向连接发送端主机的所述交换机下发初始窗口更新消息,初始窗口值IW计算如下:
[0022]
[0023] 式中,MSS_length表示一个数据分段的长度,1MSS表示一个数据分段。
[0024] 步骤10所述交换机收到来自所述控制器的初始窗口更新消息后,读取消息中的端口信息,从对应端口将该消息发送到主机。所述主机上的守护进程检测到初始窗口更新消息,该进程读取消息中的初始窗口值,并调用Linux内核命令修改TCP初始窗口值。
[0025] 数据传输阶段:
[0026] 步骤11所述交换机通过队尾丢弃队列管理方式实时监控TCP流经过的每个端口队列长度Q(t),当所述交换机中端口的队列长度超过阈值L=Q/3(Q为队列缓存最大值)时,所述交换机产生拥塞通告消息(Congestion Notification Message,CNM),并通过Packet_in命令将其发送到所述控制器,所述交换机进入拥塞状态,并周期性的监视队列长度;
[0027] 步骤12所述控制器接收来自所述交换机的拥塞通告,从通告中获取所述交换机的队列长度Q(t),估算经过所述交换机的TCP流发送窗口大小,所述TCP流i发送窗口大小的估算公式如下:
[0028]
[0029] 其中n是经过拥塞端口的TCP流的总数,可由全局数据流表获得,B是所述交换机拥塞端口的最大带宽,在网络部署时就已知,RTTavg是所有经过拥塞端口的TCP流的平均RTT,即
[0030] 所述控制器估算出发送窗口大小后,根据队列长度Q(t)来表征所述交换机的拥塞程度,计算经过所述交换机的所有TCP流的ACK报文中的接收窗口大小。所述ACK报文中接收窗口的大小计算如下:
[0031] 设置阈值QL=Q/2和 即满足L<QL<QH,利用上述两个阈值检测所述交换机的拥塞程度,根据拥塞程度的不同,设置不同的接收窗口大小:
[0032] (1)L≤Q(t)<QL:轻度拥塞,设置TCP流i的接收窗口
[0033]
[0034] (2)QL≤Q(t)<QH:持续拥塞,设置TCP流i的接收窗口
[0035]
[0036] (3)Q(t)≥QH:严重拥塞,设置TCP流i的接收窗口
[0037] Wr(i)=1MSS
[0038] 其中SWNDi为TCP流i当前发送窗口大小。
[0039] 步骤13所述控制器生成修改ACK报文接收窗口的流表,并将接收窗口值Wr(i)附在该流表报文的数据部分,下发到所述交换机。该流表头部匹配ACK报文,动作为修改ACK的接收窗口;
[0040] 步骤14所述交换机收到来自所述控制器的修改窗口流表,对经过该交换机的所有ACK 报文逐一匹配,并将每个ACK报文头部的接收窗口字段改为 RWND(i)'=min(Wr(i),RWND(i)),其中RWND(i)为数据流i的ACK报文中原有的接收窗口字段的大小;
[0041] 步骤15所述交换机持续监视队列长度,只要每个周期监视队列的长度仍超过阈值L,则持续向所述控制器发送拥塞通告。当连续三个周期监视的队列长度均小于阈值L,所述交换机向所述控制器发送拥塞恢复消息(Congestion Recovery Message,CRM),所述控制器向所述交换机下发修改窗口流表信息删除命令,所述交换机收到上述命令后,将修改窗口流表删除,并恢复正常状态;
[0042] 断开连接:
[0043] 步骤16所述交换机第一次接收到客户端或服务器发送的关闭连接请求(TCP FIN)数据包后,解析包头,通过Packet_iIn命令将解析头部后的数据包上交所述控制器,该控制器从所述全局数据流表GVT中将对应的TCP流记录删除,并发送流表修改消息到所述交换机,该交换机收到流表修改消息后添加该流表项,其中设置匹配域为TCP头部的FIN标志,动作指令为将该数据包转发到所述控制器。之后所述交换机均会根据流表项匹配到TCP FIN数据包并上交所述控制器,该控制器从所述GVT表中将对应的TCP流记录删除。
[0044] 本发明的有益效果是:本发明根据网络状态动态调整TCP流的初始窗口和传输速率,减少拥塞丢包的同时充分利用网络带宽资源,利用SDN网络环境,直接获取网络的状态信息,增强了网络状态参数估计的准确性,提升了数据传输效率。本发明可应用到特定的网络应用场景,如数据中心网络等。

附图说明

[0045] 图1是本发明的流程图;
[0046] 图2是本发明基于TCP连接的GVT生成过程图;
[0047] 图3是本发明OXM头部结构图;
[0048] 图4是本发明初始窗口更新消息结构图;
[0049] 图5是本发明拥塞通告消息结构图。

具体实施方式

[0050] 为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
[0051] 一种基于SDN网络的自适应可靠数据传输方法,控制器周期性获取SDN网络统计信息,并根据带宽利用率设置TCP连接的初始窗口值;交换机检测端口队列长度,当队列长度超过阈值时,将该交换机设置为拥塞状态,控制器计算经过拥塞交换机的所有TCP流的发送速率并下发流表至拥塞交换机,使交换机修改TCP流ACK报文中的接收窗口字段,降低TCP流的速率,达到拥塞控制的目的。控制器是数据控制逻辑的核心,它接收来自交换机的拥塞通告,并根据网络状态分配TCP流的速率,拥塞探测更加快速和准确,实现传输速率的自适应调整;发送端作为源主机接收控制器下发的初始窗口更新消息并更新窗口值,增强了带宽的利用率;接收端不需要进行任何修改,可以兼容现有的TCP协议栈,并且部署灵活方便。
[0052] 图1所示为本发明流程图,具体包括以下步骤:
[0053] 初始化阶段:
[0054] 步骤1控制器启动并基于链路层发现协议(Link Layer Discovery Protocol,LLDP)收集各 SDN网络设备的连接信息(包括在每个交换机上的输入端口和输出端口),根据LLDP数据包携带的交换机标识和端口号动态生成网络拓扑;
[0055] 步骤2所述控制器周期性下发端口统计消息到交换机,所述交换机将流表项计数器中记录的端口统计数据发回所述控制器,这些统计数据包括所述交换机端口收发的包数、字节数、丢包数以及统计持续的时间,用于计算带宽利用率;
[0056] 建立连接阶段:
[0057] 步骤3所述控制器基于TCP连接的三次握手记录所有TCP数据流信息并生成全局数据流表GVT。图2为基于TCP连接的GVT生成过程,建立TCP连接的第一次握手时,客户端发送SYN报文,由于所述交换机中没有该数据流的流表项,该交换机通过OpenFlow协议发送包含SYN报文的OF_PacketIn数据包到所述控制器,该控制器将该数据流信息添加到GVT 中。所述GVT包括数据流标识(Flow_ID)、源IP地址(SRC_IP)、目的IP地址(DES_IP)、发送数据报文的大小(Size)、数据流路由信息(Flow_Path)和往返时延RTT(RTT)。
[0058] 所述控制器发送流表修改消息FLOW_MOD报文到所述交换机,该消息根据OpenFlow 1.3协议中Nicira私有扩展匹配域(Nicira extensible match,NXM)要求的特定匹配结构OXM (OpenFlow Extensible Match)添加TCP SYN匹配域。OXM的头部结构如图3所示,其中定义 OXM_CLASS字段为0x0001,表明此为自定义的NXM,定义OXM_FIELD字段值为 TCP_SYN,表示匹配域为TCP头部的SYN选项,定义M字段值为0,表示没有掩码,定义 OXM_LENGTH字段值为5字节。OXM负载payload中第一个字节的值设置为1,表示TCP 头部的SYN位为1。同时,所述消息下发动作指令为Output,端口设为所述交换机与控制器通信的端口PortStoC。所述交换机收到流表修改消息后,将TCP_SYN字段作为NXM添加到该交换机的流表项中,同时添加动作指令Output。之后所述交换机均会根据流表项匹配到TCP SYN并将数据包上交所述控制器,该控制器接收SYN数据包并记录所有TCP数据流信息并添加到GVT中,获得网络中所有TCP流的信息。
[0059] 步骤4所述控制器根据相邻两次获取的端口发送字节数和统计持续的时间,计算每个端口的可用带宽,计算公式如下:
[0060]
[0061] 其中Bport_id是端口的最大带宽,在网络部署时已知,tx_bytesi和tx_bytesi+1分别为第i 次和第i+1次统计时端口port_id传输的字节数,ti和ti+1分别为从第一次统计到第i次和第i+1 次获取端口统计信息时持续的时间。
[0062] 将步骤3中所述TCP流经过的所有端口可用带宽的最大值作为该TCP流所在链路的可用带宽,即 其中flow_id表示TCP 流的标识,port_id表示端口号,port_id∈flow_id表示流标识为flow_id的TCP流经过了端口号为port_id的交换机端口。
[0063] 步骤5利用OpenFlow发现协议(OpenFlow Discovery Protocol,OFDP),在类型长度值结构(Type-Length-Value,TLV)中放入时间戳作为负载,由所述控制器产生带有时间戳的OFDP 分组,并将OFDP分组放入Packet_out消息的数据部分,通过Packet_Out命令向所述TCP流经过的所有交换机发送OFDP分组,命令中的操作设置为Flood,即要求所述交换机向邻居交换机转发OFDP分组;
[0064] 步骤6所述交换机收到转发的OFDP分组后,由于没有对应的流表项,因此通过Packet_in 命令将其转发到控制器,所述控制器用当前系统时间减去OFDP分组中的时间戳可得到所述控制器到交换机Si、交换机Si到交换机Sj以及交换机Sj到控制器的时延,记为T1,同样,也可得到所述控制器到交换机Sj、交换机Sj到交换机Si以及交换机Si到控制器的时延,记为T2;
[0065] 步骤7利用Internet控制报文协议(InternetControlMessage Protocol,ICMP),通过所述控制器向所述交换机Si和Sj分别发送带有时间戳的响应请求。所述交换机收到之后回复携带响应请求时间戳的响应回复消息。所述控制器将当前系统时间与响应回复分组中的时间戳相减得到对应交换机Si、Sj和控制器之间的往返时延,记为Ti和Tj,则所述交换机Si和Sj之间链路的往返时延为 路径R上两个交换机Si和Sk之间的链路往返时延为 其中Si和Si+1表示路径R上相邻的两个交换机;
[0066] 步骤8所述控制器产生携带时间戳的地址解析协议(Address Resolution Protocol,ARP)探测包发送到与TCP流两端主机A和B相连的交换机,由所述交换机转发到两个主机,主机产生携带ARP探测包时间戳的ARP回应包发回所述控制器,所述控制器用当前系统时间减去时间戳分别得到两个主机经所连交换机Sa和Sb到控制器的往返时延,该往返时延减去交换机Sa和Sb到控制器的往返时延即得到主机A、B与相连的交换机Sa、Sb之间的往返时延da和 db,由此得到所述TCP流的往返时延 所述控制器将RTTA→B记入全局数据流表GVT中。
[0067] 步骤9所述控制器根据每条流的可用带宽和RTT值计算初始窗口值IW,并通过 Packet_Out命令向连接发送端主机的所述交换机下发初始窗口更新消息,消息格式如图4所示,其中包含OpenFlow标准报文头(ofp_header)、对应TCP流的标识(Flow_ID)、与发送端主机相连的所述交换机标识(Switch_ID)、端口号(Port_ID)、初始窗口值(IW)、优先级和cookie字段。报文头部ofp_header中的type字段设为OFPT_IW_UDP,表示初始窗口更新消息。初始窗口值IW计算如下:
[0068]
[0069] 式中,MSS_length表示一个数据分段的长度,1MSS表示一个数据分段。
[0070] 步骤10所述交换机收到来自所述控制器的初始窗口更新消息后,读取消息中的端口号 Port_ID,从对应端口将该消息发送到主机。所述主机上的守护进程检测到初始窗口更新消息,该进程读取消息中的初始窗口值IW,并调用Linux内核命令修改TCP初始窗口值。通过修改初始窗口值,使数据流的传输能够尽快适应当前的网络带宽,有效缩短老鼠流的传输时间。
[0071] 数据传输阶段:
[0072] 步骤11所述交换机通过队尾丢弃队列管理方式实时监控TCP流经过的每个端口队列长度Q(t),当所述交换机中端口的队列长度超过阈值L=Q/3(Q为队列缓存最大值)时,所述交换机产生拥塞通告消息(Congestion Notification Message,CNM),并通过Packet_in命令将其发送到所述控制器。所述消息结构如图5所示,其中包含OpenFlow标准报文头ofp_header,拥有所有端口信息的ofp_port,表明端口队列长度的port_buff,优先级和cookie字段。报文头部ofp_header中的type字段设为OFPT_BUF_CN,表示拥塞触发消息。所述交换机收到拥塞通告消息后则进入拥塞状态,并周期性的监视队列长度;
[0073] 步骤12所述控制器接收来自所述交换机的拥塞通告,从通告中获取所述交换机的队列长度Q(t),估算经过所述交换机的TCP流的发送窗口大小,所述TCP流i发送窗口大小的估算公式如下:
[0074]
[0075] 其中n是经过拥塞端口的TCP流的总数,可由全局数据流表获得,B是所述交换机拥塞端口的最大带宽,在网络部署时就已知,RTTavg是所有经过拥塞端口的TCP流的平均RTT,即
[0076] 所述控制器估算出发送窗口大小后,根据队列长度Q(t)来表征所述交换机的拥塞程度,计算经过所述交换机的所有TCP流的ACK报文中的接收窗口大小。所述ACK报文中接收窗口的大小计算如下:
[0077] 设置阈值QL=Q/2和 即满足L<QL<QH,利用上述两个阈值检测所述交换机的拥塞程度,根据拥塞程度的不同,设置不同的接收窗口大小:
[0078] (1)L≤Q(t)<QL:轻度拥塞,设置TCP流i的接收窗口
[0079]
[0080] (2)QL≤Q(t)<QH:持续拥塞,设置TCP流i的接收窗口
[0081]
[0082] (3)Q(t)≥QH:严重拥塞,设置TCP流i中ACK报文的接收窗口
[0083] Wr(i)=1MSS
[0084] 其中SWNDi为TCP流i当前发送窗口大小。
[0085] 步骤13所述控制器使用与步骤3类似的方法生成并发送流表修改消息FLOW_MOD报文到所述交换机,修改ACK报文接收窗口的流表。在OXM结构中添加TCP ACK匹配域,OXM的头部结构如图2所示,其中定义OXM_CLASS字段为0x0001,表明此为自定义的 NXM,定义OXM_FIELD字段值为TCP_ACK,表示匹配域为TCP头部的ACK选项,定义 M字段值为0,表示没有掩码,定义OXM_LENGTH字段值为9字节。OXM负载payload中第一个字节的值设置为1,表示TCP头部的ACK位为1。在OXM负载中第二至第五个字节设置接收窗口值Wr(i)。另外,在所述流表修改消息中扩展动作集合,根据OpenFlow1.3协议,在Instruction结构中,将type字段设为OFPT_APPLY_ACTIONS,在动作集合 OFPT_SET_FIELD中添加修改接收窗口(MOD_WINDOW)新动作。
[0086] 步骤14所述交换机收到来自所述控制器的修改窗口流表消息,将TCP_ACK字段作为 NXM添加到该交换机的流表项中,同时通过Write_Action指令添加动作MOD_WINDOW。之后所述交换机均会根据流表项匹配到TCP ACK报文并根据动作指令MOD_WINDOW将 TCP ACK报文中的接收窗口值字段修改为RRWND(i)'=min(Wr(i),RWND(i)),其中RWND(i) 为数据流i的ACK报文中原有的接收窗口字段的大小。ACK报文中接收窗口的调整促使发送方调整发送窗口Ws=min(Wc,Wr),因此可有效缓解拥塞,提高数据流的传输效率;
[0087] 步骤15所述交换机持续监视队列长度,只要每个周期(设为流经交换机的所有TCP流的RTT平均值RTTavg)监视队列的长度仍超过阈值L,则持续向所述控制器发送拥塞通告。当连续三个周期监视的队列长度均小于阈值L,所述交换机向所述控制器发送拥塞恢复消息,该消息的结构与图5的拥塞通告消息类似,只需将报文头部ofp_header中的type字段设为 OFPT_BUF_CR,表示拥塞恢复消息。所述控制器收到拥塞恢复消息后,向所述交换机下发 Flow-mod消息,将该消息中的command字段设为OFPC_DELETE_STRICT。所述交换机收到上述消息后,删除修改窗口流表项,并恢复正常状态;
[0088] 断开连接:
[0089] 步骤16所述交换机第一次接收到客户端或服务器发送的TCP FIN数据包后,解析包头,将解析包头后的数据包上交所述控制器,该控制器从所述全局数据流表GVT(Global-View flow Table)中将对应的TCP流记录删除,并发送流表修改消息到所述交换机,该流表修改消息在OXM结构中添加TCP FIN匹配域,该消息结构与步骤3中类似,OXM的头部结构如图 3所示,其中定义OXM_CLASS字段为0x0001,表明此为自定义的NXM,定义OXM_FIELD 字段值为TCP_FIN,表示匹配域为TCP头部的FIN选项,定义M字段值为0,表示没有掩码,定义OXM_LENGTH字段值为5字节。OXM负载payload中第一个字节的值设置为1,表示TCP头部的FIN位为1。同时,所述消息下发动作指令为Output,端口设为所述交换机与控制器通信的端口PortStoC。所述交换机收到流表修改消息后,将TCP_FIN字段作为NXM 添加到该交换机的流表项中,同时添加动作指令Output。之后所述交换机均会根据流表项匹配到TCP FIN并将数据包上交所述控制器,该控制器接收FIN数据包并从所述GVT表中将对应的TCP流记录删除。
[0090] 以上结合附图对本发明的具体实施方式作了详细说明,但是本发明并不限于上述实施方式,在本领域普通技术人员所具备的知识范围内,还可以在不脱离本发明宗旨的前提下做出各种变化。