基于时间片的网络拥塞控制优化

2019-01-24 05:44王刚
电子元器件与信息技术 2018年11期
关键词:网络层队列路由器

王刚

(江西财经大学,江西 南昌 330013)

0 引言

随着网络技术的日益发展,网络应用领域和应用模式不断创新,基于UDP协议的音频、视频和P2P共享资源逐渐占据了互联网的大部分带宽,而目前通讯产业虽然取得了巨大的进展,但庞大的硬件设施投资仍然无法满足爆炸性增长的网络流量需求。因此,如何利用好现有的带宽资源为更多的网络应用提供有效服务是网络拥塞控制要解决的问题。

1 现有的拥塞控制机制

按网络层次可以将现有的网络拥塞控制算法大致分为两类:即TCP拥塞控制和IP 拥塞控制。

TCP拥塞控制:基于传输层TCP协议的端到端拥塞控制算法,是采用和式增加、积式减少的AIMD拥塞窗口管理方法进行流控制的机制。当TCP发送端收到ACK包,并且没有检测到丢包事件时,拥塞窗口加1;当TCP发送端检测到丢包事件后,拥塞窗口除以2。这种方法可以在网络拥塞时迅速降低TCP端的发包速度,可以缓解中间路由器和接收端的负荷,但其拥塞窗口的锯齿状变化会导致网络传输速率发生震荡,使网络带宽不能有效地利用。针对这些不足,业界又提出了改进算法:TCP Tahoe算法,增加了快速重传功能[1]。TCP Reno,增加了快速恢复功能,轻度拥塞时保持较大的拥塞窗口[2]。TCP NewReno,在快速恢复阶段,重传“部分确认”后丢失的报文,避免了过多的超时等待[3]。TCP Sack,检测到拥塞时,选择性的重传丢包,避免了不必要的重传。

IP拥塞控制:基于网络层的拥塞控制策略,是通过对路由器缓冲队列的分组实施调度来影响TCP拥塞控制的动态性能来实现的。目前已经有了一系列的队列调度和管理算法来实现网络的拥塞控制。FIFO(先进先出),即对先到来的数据包先提供转发服务,当缓冲区满后,丢失最后到达的数据包。FQ(公平排队)和WFQ(加权公平排队),到达的分组被进行分类并在合适的等待区域排队,WFQ调度器以循环方式为各个组提供服务。RED(随机早期检测算法),该算法通过监控数据包队列的长度,当拥塞迫近而未满之前,按照一定的概率丢弃进入路由器的数据包,从而尽早通知发送端减少拥塞窗口[4]。

2 现有机制的不足

TCP拥塞控制机制是一种通信端的拥塞控制机制,它是借助从TCP接收端反馈的ACK数据包和通信时延RTT来感知网络的拥塞状况。总体位于传输层,对网络层基本透明,很难对网络层路由器的拥堵情况做出细微精确的反馈,是一种后发反馈。传输层的TCP拥塞控制有以下缺陷:首先是反应迟滞的问题,由于需要等待来自接收端返回的ACK数据包带回拥塞信息,当网络状况不佳时,ACK传输本身需要一定的时延,当发送端获取到反馈信息之后,也许网络的拥塞情况却已经缓解了。其次是公平性的问题,由于协议只提供了TCP协议的拥塞控制,而网络中大量存在的UDP数据包并未提供相应的拥塞控制机制,当网络发生轻度拥塞时,TCP会主动减少自己的发包速度,而UDP会继续全速发包,这样就导致网络中出现UDP数据洪流,它们抢占了大部分的带宽,而具有网络友好特性的TCP数据流产生“饿死”现象[5]。

IP拥塞机制主要实施了对中间路由器的拥塞调节,它可以感知细微的网络拥塞变化情况,并且可以区分不同的发送端产生的数据流,可以在路由器中通过队列调度方案,丢弃产生拥塞的发送端的数据包,可以比较精确的进行拥塞控制。但是,由于该策略仅在中间的路由器完成必要的拥塞处理,例如丢弃数据包,而不能在网络拥塞的源头进行及时干预。后来的改进策略使用显示拥塞通知(ECN,Explicit Congestion Notification)技术,借助路由器的对IP报文的标记功能传递拥塞信息给接收端,然后通过ACK包反馈拥塞信息给发送端,在网络拥塞时,这一过程同样存在严重的时滞,同时也无法解决UDP洪流问题[6]。

3 新拥塞控制策略:基于网络层发送缓冲区队列管理的拥塞控制

3.1 问题描述

虽然许多学者在提高TCP对网络数据拥塞的发现和控制能力方面做了大量的改进性研究工作,寻求让网络用户能公平地分享网络带宽资源的方法。但这些研究大多基于Van.Jacobson 的经典拥塞算法和路由器缓冲队列的管理机制,很少对网络层的发送端缓冲区队列管理加以改进,使其具有拥塞控制机制。本文针对当前拥塞机制存在的不足之处,提出一种通过时间片管理发送端缓冲队列的方法,根据网络层拥堵信息,主动调节网络发送端发包速率的机制,从而实现拥塞控制的及时性和公平性[7]。

3.2 基于发送端缓冲队列管理的拥塞控制策略

在一台同时具有TCP和UDP应用的源主机上,我们按照包流的不同建立通讯进程缓冲队列(Process buffer),各缓冲队列对应相同的发送端进程名,Sender进程以循环的方式从各个队列提取数据报,但各队列一次取走数据报的个数决定于Sender进程在该队列服务时间的长短,也就是通过时间片来控制队列一次循环所能发送报文的数量。如图1所示。

图1 发送端缓冲区队列管理拥塞控制Fig.1 Queue Management Congestion Control of Sender Buffer

我们设当前有三个进程流正在进行通信,每个进程对应一个缓冲队列,每个队列一次存储6个报文,默认分配每个队列4个时间片。这样初始状态Sender进程一次轮询发送服务,每个队列一次可以发送出去4个报文,三个流开始享有相同的数据传输率。在运行期间,根据网络的拥塞状况调整各队列的时间片的数量。调整原则为,当发生网络中间路由器发生拥塞时,路由器反馈ICMP拥塞信息给主机发送端,发送端减少所对应拥塞队列的1个时间片;每隔一定周期(例如30秒),给每个队列增加1个时间片;每队列的时间片的变化范围为0到4,即减少到0时不再减小,增加到4时不再增加。

当传输网络上的中间路由器发生轻度拥塞时,根据路由器队列管理的随机早期检测算法(RED),在缓存占满之前,一旦发现拥塞迫近就按一定的概率丢弃进入路由器的数据包,并且发送ICMP拥塞报文(ICMP报文结构见图3)到发送端。发送端如果检测到来自路由器的ICMP拥塞报文(类型值为4,代码值为0),根据ICMP报文末端存储的TCP/UDP首部信息,可以提取到导致网络拥塞的数据包的目的IP地址,进而可以定位到对应的流,对该流的缓冲队列减少1个时间片,从而降低了包的发送速率,缓解了路由器的拥塞状况。

每隔一定周期,对所有最近没有进行减少时间片操作而且拥有时间片不超过默认时间片数量的流队列进行加1个时间片的操作,这一机制使得各通讯流的传输速率保持一个递增的趋势,但又不会抢占其他通讯进程的传输带宽。队列时间片的处理流程如图2所示。

通过对发送端缓冲队列的有效管理,可以在网络层对TCP和UDP都进行拥塞控制和流量均衡,网络发送端主机可以根据中间路由器的ICMP拥塞报文调整流的传输速度,这是对网络状况的变化做出的最直接的反应,可以使整体网络的拥塞控制灵敏度得到提高。

图2 队列时间片的处理流程图Fig.2 Processing flow chart of queue time slice

4 仿真实验

本文采用网络仿真软件NS2来验证在负荷相对较大的网络环境下,采用该拥塞控制机制可以让不同的网络通信进程平等地分享带宽,并且在出现网络拥塞时,UDP流也不会抢占TCP的带宽资源。仿真实验的网络拓补图如图4所示。源节点S1运行三个通讯进程,依次是TCP进程P1,UDP进程P2,TCP进程P3。P1、P3、P3分别同时发送1000M流量,通过路由器R1、R2,到达目标节点D1、D2、D3。如图3所示。

图3 仿真拓补结构Fig.3 Simulation topology architecture

我们分别采用无缓冲队列管理的发送端和有缓冲队列管理的发送端进行数据包传送实验,并对3个进程平均传输速率和传输时间进行记录。通过统计分析发现,在第一种情况下,UDP的带宽利用率为71.76%,TCP的带宽利用率分别为13.75%、14.49%,UDP出现了抢占TCP带宽资源的现象。在第二种情况下,UDP的带宽利用率下降到了41.25%,TCP的带宽利用率提高到了28.91%和29.84%,虽然UDP带宽占有仍然保持了一定的优势,但比例上已经降低到了一个相对合理的程度,不足以影响到TCP应用的正常通讯,基本实现了带宽资源的公平使用。

5 结论

随着多媒体流量在互联网上快速地增加,如何使这些基于UDP协议的多媒体数据流以相对友好的方式和TCP流量共享有限的带宽是目前拥塞控制领域比较突出问题。本文针对这个问题,提出了基于网络层发送端缓冲队列管理的拥塞控制机制,对TCP和UDP数据流实施公平的流量控制,并且基于最直接的ICMP拥塞反馈方式,可以实现对网络系统的高效拥塞控制。

猜你喜欢
网络层队列路由器
买千兆路由器看接口参数
维持生命
路由器每天都要关
路由器每天都要关
队列里的小秘密
基于多队列切换的SDN拥塞控制*
在队列里
论物联网安全威胁及其应对策略
丰田加速驶入自动驾驶队列
物联网技术在信息机房制冷系统中的应用