×

大规模接入汇聚路由器的HAL结构及关键技术解析

消耗积分:1 | 格式:rar | 大小:0.6 MB | 2017-10-27

分享资料个

目前,大多数路由器均采用分布式转发、集中式路由处理的体系结构[1]。该结构方式使主处理单元与各从处理单元可以根据所处位置及执行任务的不同采用不同的处理方式,但也使顶层管理软件对底层各从处理单元难以进行协调统一的管理。硬件抽象层HAL(Hardware Abstraction Layer)在逻辑上介于底层硬件与上层协议软件之间,维护两者之间的数据传递,并对底层各接口模块进行管理,屏蔽底层硬件细节,使得应用软件可以通过控制HAL达到操纵底层硬件的目的。高性能路由器硬件抽象层的提出[2]成功解决了分布式路由器面临的通用性支撑软件系统结构的设计问题,为构建开放通用的路由器软件基础平台提供了保证。
  随着路由器承载业务能力的不断增强,大规模接入汇聚路由器的设计与实现也被提上了议事日程。ACR(大规模接入汇聚路由器)是3Tnet(高性能宽带网)网络的关键设备。该设备采用ACR宽带接入方式,即通过带有远端用户接口单元(RIU)、基于以太网传输接口的分合路器(EMDi)组成树形分叉地域分布式系统构架,保证大规模的用户直接接入骨干高速网络,实现视频点播、网络电视、IP电话等宽带业务,从而更加减化了网络拓扑结构,使业务引入更加快速,运营策略更加多样化。
  大规模用户接入方式也给路由器硬件抽象层的实现方式及信息的实时、高速传输提出了新的挑战,主要表现在以下几个方面:首先,承载业务量的数量及种类的增多对路由器内部通信的实时性、高效性提出了更多的要求;其次,大规模用户接入方式增加了路由器对外接口的数量,从而带来了设备管理上的难度;再次,从系统的通用性及可扩展性考虑,要求构建一种具有可扩展性且不依赖于硬件具体实现方式的软件体系结构,方便路由软件的移植和应用。由此可见,硬件抽象层的高度稳定性、可扩展性及可靠性将直接影响路由器的各项性能指标。
  由于大规模用户接入方式的特性,使得以前基于IPv6路由器的硬件抽象层的实现方式已经不适应数据高速传输及多用户接入的管理方式。本文将在讨论硬件抽象层基本结构的基础上,提出一种适用于大规模接入汇聚路由器的HAL的通用性软件结构设计及实现方式,提供高效、可靠的内部通信,并针对多用户接入数量不确定的情况,提出动态加载虚拟驱动模块的实现方法,增强路由器面向ACR接入方式的可用性。
  1 硬件抽象层基本结构及功能实现
  根据文献[2]提出的方案,高性能路由器硬件抽象层可分为内部通信、虚拟驱动及设备管理三大模块,这三部分模块相互配合,共同完成面向实际的用户设备接口的功能模拟及硬件细节的屏蔽,并对其进行统一协调的管理。硬件抽象层对用户设备接口的功能模拟主要由虚拟驱动模块完成,包括数据包的收发及协议报文的预处理等工作,为上层协议软件提供标准的API函数;而对用户设备的接口管理则由上层网络管理软件通过设备管理模块对其进行管理配置及监控;内部通信模块运行于内部以太网络,协调各模块之间的功能接口,保证各从处理单元与主处理单元之间实时可靠的数据传输。其基本结构如图1所示。
  大规模接入汇聚路由器的HAL结构及关键技术解析
  根据各模块的功能可知,硬件抽象层内部通信模块是各分处理单元与主处理单元信息交互的重要传输通道。内部通信模块汇集各底层设备的数据并根据类型分流至各上层处理模块,同时,数据维护模块对虚拟设备及各处理单元的维护信息也需要通过内部通信模块进行。因此,内部通信模块采用何种基于内部以太网的数据传输实现方式,对路由器内部数据的实时、有效、可靠传输起着至关重要的作用。当前内部通信模块采用基于分隔符的TCP传输方式,在应用层数据包的起始部分附加有特定格式的分隔符和数据长度域,解决了由于Nagle算法产生的包粘滞问题[3]。但该方式没能解决TCP传输方式的消耗过大、实时性不强的问题[4]。同时,消除分割符恢复报文的完整性也增加了应用程序的处理复杂度,从而不可避免地增加系统的开销并降低系统的实时性。系统的实时性对于用户业务急剧增多的ACR路由器而言是一个迫切需要解决的问题。UDP是一个面向消息的传输协议[5],其最大数据缓冲区长度为8192~65536字节,满足一次传输一个完整报文的条件。在内部以太网中采用UDP传输方式具有明显的优势。但由于UDP协议的无连接性,导致它是一个不可靠传输,文中第二部分将讨论如何实现一种基于UDP的内部通信的可靠性传输机制。
  硬件抽象层对用户设备接口的功能模拟主要通过虚拟驱动进行,路由器业务类型的扩展使得用户接口数量增多并呈现接入时间的不确定性,从而带来用户设备管理上的难度。针对此种情况,文中第三部分提出动态加载虚拟驱动模块的实现方法,增强路由器面向多用户接入方式的可用性。
  2 基于UDP传输方式的内部通信的可靠性实现
  内部通信模块处于硬件抽象层的底层,运行于内部交换网络,完成底层硬件与上层控制软件的数据传输,实现对底层硬件的初步屏蔽分离;针对分布式体系结构特点及多用户接入的业务需求,内部通信模块以Client\Server的方式分别运行于主处理单元模块及各线路接口单元模块上,采用UDP传输协议进行通信,主要基于以下几点考虑:
  首先,UDP协议是一个无连接协议,传输数据之前源端与终端不需建立连接,因此不需维护连接状态。这样服务器端可以使用一个或几个端口同时向多个客户端发送消息,符合分布式结构体系的要求。
  其次,UDP信息包很短,只有8个字节,相对于TCP的20个字节的信息包的额外开销很小,便于数据的快速传递。
  再次,吞吐量不受拥塞控制算法的调节,只受应用软件生成数据的速率、传输带宽和计算机性能的影响,适用于内部以太网络的数据传输。
  但由于UDP方式的无连接性,使得UDP传输的可靠性不强。而可靠性是内部通信模块所必须具有的性能,因此考虑在应用软件中实现UDP传输方式的可靠性保证,主要采用以下方式:

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.obk20.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'大规模接入汇聚路由器的HAL结构及关键技术解析',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.obk20.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);