ADSL接入及共享技术的实现(一)_第1页
ADSL接入及共享技术的实现(一)_第2页
ADSL接入及共享技术的实现(一)_第3页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ADSL接入及共享技术的实现(一)

论文关键词:网络共享AAL5业务ADSL接入协议NAT协议ADSL路由功能论文摘要:本文首先阐述网络共享原理,分析目前常用的RFC1483Bridged,RFC1483Routed,RFC1577,PPPOA,PPPOE等各种ADSL接入协议类型及实现网络共享的方法。选择MotorolaPowerPC850SAR芯片作为中央处理器,搭建基本硬件开发平台;选择WindRiver公司的Tornado2.0作为软件集成开发环境。参照vxworks5.4操作系统的设备驱动编写规范,结合850CPU的SAR功能初始化,实现SAR层END设备驱动。以RFC1483协议为例,阐述在不同的ATM复用方式下,各种协议数据报文的封装处理方法。参照Vxworks5.4操作系统网络服务子层的编写规范,给出AAL5业务网络服务子层的总体架构及相关算法、流程。在Vxworks5.4协议栈上实现网络地址转换(NAT)功能,最后构建出一套简单的ADSL接入共享系统。1引言随着ADSL技术的发展,ADSL宽带接入已经不仅仅是一种纯粹的接入技术。家庭局域网的普及,中、小型企业电子商务的繁荣,远程办公模式的引入,都呼吁着更经济、更有效的ADSL接入共享方案的出现。如今,市场上用于ADSL接入共享的产品非常多,如带路由功能的ADSLModem、ADSL共享器、ADSL路由器等等,各ADSL厂商根据实际应用的需求,在ADSL接入设备的多样性、高效性和灵活性上下功夫,进一步扩展了ADSL的应用前景。实现ADSL接入共享的方式归纳起来有以下三种,可以根据实际情况选择最合适的方案。1.普通ADSLModem+双网卡PC+Wingate之类的代理服务器或防火墙软件如图1-1所示,双网卡PC安装Wingate之类的代理服务器或防火墙软件,一块网卡连接ADSLModem,另一块连在局域网的HUB上,作为其它用户的IP网关。则局域网内的所有微机都可以通过这台主机访问Internet网络。图1-1双网卡PC+ADSLModem接入示意图该方案的优点是:无需添加任何设备,仅多一张网卡,即可通过软件实现路由功能,同时,能够使用管理软件所带的安全认证、帐户管理、防火墙等一系列功能。比较适合网吧等本就需要一台服务器作为帐户管理的场所。缺点是:需要占用一台服务器作为数据转发设备,成本较高;数据交换的效率较低,和服务器的性能有很大关系;此外,病毒入侵或服务器本身性能不稳定,极易造成网络异常。2.普通ADSLModem+共享器所谓共享器,其实是一种集成PPPOE、NAT等功能的简单路由器。图2-2所示的组网方案中,共享器取代了前一个方案中双网卡PC的地位。采用这种方案后,可以节省一台服务器以及相关软件的花费,较第一种方案来说,确实经济很多,也不用再担心病毒入侵、服务器不稳定等问题了。很多共享器本身就带多个LAN口,无需再添置HUB或Switch等设备即可供多台微机使用,对于家庭局域网或小型办公场所非常合适。图1-2共享器+ADSLModem接入示意图3.带路由功能的ADSLModem带简单路由器功能的ADSLModem集成了ADSL接入功能及网络共享技术。如图1-3所示,局域网用户仅需将自身的IP网关指向设置在ADSLModem以太网接口上的IP地址,即可实现与外部网络的互连。由于ADSL接入和路由两种功能集成在同一设备中,减少了中间的数据转发环节,传输效率会更高一些,配置及调试起来也方便很多。此外,用一块CPU就可以实现ADSL接入协议及简单路由等软件功能,硬件成本降低很多,价格比起ADSLModem+共享器当然更有优势了。图1-3带简单路由功能的ADSLModem接入示意图本文将首先介绍网络共享原理,然后逐个分析目前常用的各种ADSL接入协议以及实现共享的方式。最后以Motorola850SAR+Vxworks5.4为开发平台,设计一套带简单路由功能的ADSL接入设备,重点阐述ATMSAR层驱动的编写、AAL5业务、各种接入协议以及带宽共享功能的软件实现。2网络共享原理2.1私有网络地址和公有网络地址私有地址是指内部网络(局域网内部)的主机地址,而公有网络地址是局域网的外部地址(在因特网上的全球唯一的IP地址)。因特网地址分配组织规定以下的三个范围网络地址保留用做私有地址:10.0.0.0——10.255.255.255172.16.0.0——172.31.255.255192.168.0.0——192.168.255.255也就是说这三个范围网络的地址不会在因特网上被分配,但可以在一个企业(局域网)内部使用。各个企业根据在可预见的将来主机数量的多少,来选择一个合适的内部网络地址。不同的企业,他们的内部网络地址可以相同。如果一个公司选择上述三个范围之外的其他网段作为内部网络地址,则有可能会引起路由的混乱。2.2NAT原理NAT(NetworkAddressTranslation)网络地址转换,是一个IETF标准,允许一个机构以一个公有网络地址出现在Internet上。NAT将每个局域网节点的私有网络地址转换成一个公有网络地址,反之亦然。它也可以应用到防火墙技术里,把私有地址隐藏起来不被外界发现,使外界无法直接访问内部网络设备,同时,它还帮助网络可以超越地址的限制,合理地安排网络中的公有网络地址和私有网络地址的使用。NAPT(NetworkAddressandPortTranslation)网络端口地址转换,可以将外部网的公有IP及端口号与内部网络的私有网络IP及端口号相互映射。通过这种端口重定向方式实现的NAT映射功能,可以将来自公共网络的服务请求映射到内部网络某台微机上。例如,如果公司想以内部网络中的主机A作为对外公开的Web服务器,就得告诉NAT设备将任何访问其公网地址80端口的连接重新定向为到内部网络A主机地址的80端口。如下图所示图2-1NAT端口映射应用示意图3ADSL连接协议概述3.1RFC1483Bridged接入方式RFC1483标准的制定是为了实现多种协议数据包在ATM的AAL5层的封装传送。在协议模型上,RFC1483-Bridged方式在数据链路层对MAC帧进行LLC/SNAP或VCMUX的封装,以此来指明上层所应用的协议类型,因此可以适用于网络层上的多协议传送。在形式上,它仿真了以太网的桥接功能,相当于将用户侧的终端设备直接挂接在网络侧的网桥设备上。由于ADSL接入设备配置为桥连接方式,理论上来说,设备后可以接多台配置为公网IP地址的微机,这些微机都可以通过网关直接接入Internet网络中。但实际上可分配的公有IP地址并不多,很多服务提供商限制了每根线上可分配的IP个数,因此只有将IP地址设在ADSL接入设备的WAN端,然后通过NAT的方式来共享有限的IP资源,这就是目前较为常见的1483Bridged+NAT接入方式,又称为桥路由方式,其接入模型如图3-1所示。图3-11483Bridged+NAT接入示意图3.2RFC1577经典IPOA接入方式严格的说,RFC1577并非一种接入标准,它规定了在ATM的AAL5上使用的地址解析机制,是对RFC1483Routed接入方式在ATMARP实现细节的补充。在协议模型上,RFC1577不再转发类似ARP协议的各种以太网报文,而是通过和网络指定的ARP服务器交互ATMARP信息获得下一跳IP地址所对应的ATM地址,然后采用RFC1483LLC/SNAP或基于VC的复用方式对Routed报文进行封装处理。RFC1577一般用于需要静态IP的商业用户,和RFC1483Bridged方式一样,可以采用带NAT功能的设备实现多台微机共享带宽。3.3RFC2364PPPOverATM接入方式PPPOA接入技术根据RFC2364封装标准对PPP包进行AAL5层封装处理,形成ATM信元流,传送到网络侧的宽带接入服务器上,完成授权、认证、分配IP地址和计费等一系列PPP接入过程。同样,可以采用带NAT功能的设备实现多台微机共享带宽。此外,当服务商是根据PPP接入的时间进行计费时,还需要考虑ADSL设备是否具有按需拨号(DOD功能)及自动断开功能,这样可以避免无数据访问时系统仍占用带宽,浪费网络资源及增加不必要的费用开支。3.4RFC2516PPPOE接入方式早期的PPPOE接入方式,拨号程序一般放在PC机上,ADSLModem配置为简单的RFC1483Bridged桥接方式,由PC机使用PPPOE客户端程序(比较常见的有Enternet300、RASPPPoE等)发起PPP拨号请求并获得动态的公网IP地址。其接入模型如下图所示图3-2PPPOE接入示意图为了实现多台微机带宽共享,需要将PPPOE客户端呼叫例程集成至ATUR端,其后加上NAT地址转换机制。目前,一般带路由功能的ADSL接入设备都具有这样的功能。4开发平台的选择及搭建4.1产品定位鉴于目前市场上面向低端用户的ADSL接入产品较多,价格竞争非常激烈,利润空间已急剧减缩。我们希望开发一款针对中高端用户使用的ADSL路由器产品,除了实现普通ADSL接入及简单NAT、防火墙等功能外,还具有路由器产品的VPN、IPSEC、服务映射、动态路由更新协议等功能,具有和CISCO兼容的配置命令集,实现即配即用,便于用户随时进行监控管理。4.2硬件开发平台的选择通过调研,我们找到几款符合需求的CPU芯片,如Motorola的PowerPC850SAR、Intel的IXP225、SamSung的S5N89xx系列芯片,Virata等。这几款芯片在性能、价格等方面的综合比较如下表所示:表4-1硬件平台综合比较表若从成本方面考虑,选择virata芯片比较合适,而且厂方提供了自己的操作系统及全套开发源代码,几乎已是半成品。但测试中感觉部分协议、功能不够完善,控制台人机界面也不符合要求,还需要进行后续开发,而其提供的开发环境不够理想,代码可移植性也比较差,不利于技术积累。IntelIXP225、SamSungS5提供的软件支持较多,已支持forTornado的1483Bridged和PPPOA等协议,也有NAT、PAT等网关路由应用模块,此外,还支持VoiceOverAAL2功能。但芯片价格相比之下也高出很多。考虑到目前VoAAL2的应用并不明朗,很少有局端支持此项功能,所以暂不考虑这两款芯片。MotorolaPowerPC850SAR是850系列芯片针对ADSL接入推出的专用简化版本(此后又推出了性价比更高的850DSL芯片),价格较低,其提供的软件方面支持虽然较少,但已基本符合我们的需求,后续开发的难度不会太大。如果选择通用的Tornado开发套件进行开发,以后可以方便地迁移至IntelIXP225、IntelIXP425或SamSung等系统平台,代码的重复利用率高。由此,我们决定采用PowerPC850SAR作为核心部件,ADSL接入前端则选择兼容性较好的AlcatelDSP芯片组,总体架构如图4-1所示。4.3软件开发平台的选择软件上目前流行的嵌入式操作系统有vxworks、Psos、Rtos、QNX、ulLinux等,由于vxworks对PowerPC、ARM都有良好的支持,已经提供了针对Motorola开发评估板(ADS板)的BSP组件,并且其集成开发套件Tornado使用起来非常方便,可以有效地节省开发周期,也便于以后系统迁移,所以决定采用这款操作系统。4.4开发平台搭建简述开发平台的准备包括硬件平台调试及底层驱动编写,因为篇幅有限,硬件平台的调试略过,底层驱动及软件开发环境的搭建工作仅作简单描述:1)针对目标板与ADS板在SDRAM、Flash、Ethernet等芯片的不同,更改相应的外围器件驱动,生成新的BSP驱动,并编译生成vxworks系统的Boot代码,使其可以在新的目标板上运行。2)在此BSP基础上创建Bootable工程,编译bootable程序代码,使其可以正常下载至目标板中运行,并能正常启动TargetShell。此后,就可以建立downloadable工程,将应用程序以任务执行方式在目标板中进行调试。3)编写AlcatelDSP驱动,调通ADSL物理层、ATM层(Utopia接口)的连接。这部分工作的要点在于AlcatelDSP内部寄存器和提供目标代码都是LittleEndian模式,而PowerPC默认的总线是BigEndian模式,下载时需要对相应数据做字节或字交换。图4-2ADSL共享接入系统软件架构示意图这些部分调试完成后,就可以着手SAREND驱动、网络层接口及网关应用层的开发了。软件架构系统如图4-2所示(深黑色所示部分为本文所要着重阐述的SAREND驱动、ADSL业务驱动及NAT实现等模块)5SAREND驱动的编写SAR驱动模块是参照Vxworks系统的END驱动模板编写的,基本符合MUX接口规范,其中主要的几个功能实现。850SAR内部参数的全局联系结构。是SCC各个参数表间的联系,由左至右是从上级表到下级表的关系,代码实现中,对这些参数表的初始化顺序则要相反,即先初始化下级表,再初始化上级表。具体初始化流程如下:5.2加载及初始化函数sarEndLoad

由系统在加载muxDevEndLoad时间接调用,是END驱动第一个被加载的例程,它根据入口参数unit,对相应AAL5通道的atmif结构表进行初始化,并调用SarAAL5Add增加相应的通道。sarEndStart由系统在运行muxDevEndStart时间接调用,它根据入口参数unit调用SarAAL5Start函数激活相应的AAL5通道,允许其正常开始收发。SarAAL5Add

增加一条AAL5通道,初始化这条通道的收发缓冲区,缓冲区描述字,TCT及RCT表中的相关参数值。SarAAL5Start激活一条AAL5通道,根据通道对应的atmif结构设定PVC,上行速率。将通道PVCMASK放入Lookup表中,激活该通道进行接收;发送Tx_Active命令,激活该通道进行发送。5.3停止及卸载函数在系统执行muxDevUnload或muxDevStop时间接调用这两个函数。sarEndUnload释放这个设备所占的EndObject结构资源。但通道所占的内存资源并没有释放。sarEndStop

停止这个接口。并调用sarAAL5Stop函数关闭这条通道,执行与sarEndStart相反的操作。SarAAL5Stop

解激活并关闭这条通道。将通道PVCMASK移出Lookup表,解激活该通道,使其停止接收;发送Tx_Deactive命令,解激活该通道,使其停止发送。5.4数据发送函数函数名称:sarEndSend功能:

将数据发送到相应的AAL5通道中。入口参数:指向通道的EndObject设备结构指针,指向待发送的数据包mBlk结构指针。返回:

发送成功,返回OK;阻塞状态返回END_ERR_BLOCK;其他情况返回ERROR。流程简介:将mBlk指向的数据包进行加封装操作,将指针及长度填入当前发送BD中即可。(注:为防止重入,使用到发送指示信号量,并在修改阻塞状态时给予中断保护)5.5中断控制流程SCC工作在UTOPIA模式下的中断联接在IDMA1上,使用函数Intconnect(IV_IDMA1,(VOIDFUNCPTR)sarIntr,0)就能够在SAR发生中断时调用sarIntr函数。此时我们将轮询整个SAR中断表,并对相应中断进行处理,为避免该中断过多占用系统资源,我们将其放置在一个netJob任务中。同时,进入该任务后,屏蔽全局中断,直到所有的中断事件处理完毕。5.6数据接收处理当Utopia接口收到来自于DSP的数据后,会提取出ATM报文头部信息,如果是AAL5通道报文,则将报文存入相应的数据缓冲区中,设置相关寄存器值,并产生Utopia数据接收中断。系统收到中断请求后,将会进入5.5所示的中断例程进行处理,判断是接收事件时,提取产生事件的通道号,计算出该通道对应的atmif结构起始地址,作为参数调用sarRecv函数,在函数中进行数据报文处理。6.AAL5业务模块的实现作为系统(Vxworks)协议栈和SAREND驱动模块之间的接口,ATMAAL5业务网络服务子层主要完成如下功能:1)发送:向系统注册1483Bridged、1483Routed、ATMARP、PPPOA、PPPOE等不同类型接口(interface),根据各个接口的不同类型,对系统IP数据报文进行ATM链路封装,将封装后的数据报文发送到驱动模块并同时指示发送的VC通道;注:因为1483Bridged封装的是以太网帧,解封装后可视为正常的以太网数据帧,直接交由协议栈处理,所以我们不需要再注册1483Bridged协议类型接口。2)接收:向系统注册业务类型,接收系统送来的数据报文(由驱动模块接收,并由系统根据接收的数据报文业务类型进行分发),根据接口属性对数据报文进行解封装后提交到系统协议栈或者交由其他模块处理,3)控制:接收系统对于接口上的控制操作(主要是根据vxworksnetworkservices提供的规范完成),通过向mux接口注册重发例程实现数据报文重发。6.1vxworks网络服务子层编写规范vxworks网络服务子层介于从OSI规范的网络层和链路层之间,主要负责处理系统网络协议栈和MUX接口之间的数据报文。它包括接口初始化、数据结构初始化、数据收发处理、错误报告和流量控制(可选)等部分。6.1.1接口初始化vxworks系统协议栈通过调用网络服务子层初始化例程(函数名称为xxxAttach())来激活相关网络接口。在这个例程开始处,我们需要先用muxBind函数将该服务子层绑定至相关的网络接口驱动上,使该服务子层能够从MUX层收发数据报文。6.1.2数据结构初始化服务子层在收发相关数据报文时,可能需要申请或释放网络内存块。为避免系统正常运行期间频繁使用系统内存块操作导致效率降低或稳定性降低,可以在初始化时预先申请一个内存区域,由netBufLib所提供的netBuffer控制机制进行管理。其它如接口的状态、服务子层数据封装类型、MUX接口初始化Cookie、服务子层地址映射表等参数结构也需要在这一步进行初始化。6.1.3数据收发处理如上所述,网络服务子层通过muxBind函数将数据接收例程绑定至底层设备驱动。底层设备驱动接收到报文后,通过调用stackRcvRtn函数将数据经由MUX层查找特定协议类型返回至服务子层。服务子层处理该报文之后如果返回FALSE,则系统将报文发往其它服务子层继续处理,否则,该报文被丢弃。数据报文被封装成mBlk形式从协议栈上层发送至网络服务子层,网络服务子层对报文进行处理后,再调用muxSend或muxTkSend函数将报文通过MUX层发送至该接口设备驱动。在这期间,网络服务子层可以通过调用该接口设备指定的地址解析函数获得二层目标地址,然后对数据帧进行二层封装。具体的数据收发处理实例可参见6.2.3AAL5Service协议数据处理流程。6.1.4错误报告当设备驱动层向网络服务子层汇报收发或其它错误时,网络服务子层可以通过回调stackErrorRtn函数向上层报告这个错误。6.1.5设备控制设备驱动程序需要增加相应的控制接口函数(如xxxIoCtrl),并注册至MUX层,网络服务子层就可以通过调用muxIoCtl控制底层设备驱动。6.2AAL5业务Service的实现Service层主要实现如下相关协议类型:ATMARPService.用于收发ATMARP报文,绑定类型为0x1577PPPOEService,用于收发PPPOE报文,绑定类型为0x8863,0x8864PPPOAService,用于收发PPPOA报文,绑定类型为0x2516如6.1所介绍的,我们首先需要向MUX注册(绑定)这些Service,然后在Service的收发中对相关协议的数据报文进行处理。6.2.1向vxworksMUX层注册Service1)根据协议类型,初始化封装数据、大小等值2)用muxBind函数绑定接收函数,使某接口收到相应类型的报文时能够提交该函数处理。例如(代码摘选自atmSrv.catmSrv1483RoutedAttach函数),绑定ATMARP时作如下调用:#defineMUX_PROTO_ATMARP0x1577intunit=1;muxBind(“pvc”,unit,(FUNCPTR)AtmSrv1483RoutedRcvRtn,NULL,NULL,NULL,MUX_PROTO_ATMARP,"AtmSrv1483RoutedRcvRtn",unit);/*此处,把AtmSrv1483RoutedRcvRtn函数绑定至pvc1接口,当pvc1收到0x1577类型的数据报文时,就会自动提交给该函数进行处理*/3)初始化Service网络参数,定义报文发送时的处理函数,并向MUX层注册该Service,例程如下:structifnet*pIfp=&AtmSrvCtrl[unit].ifp;bzero((char*)pIfp,sizeof(structifnet));pIfp->if_unit=unit;pIfp->if_name=ifName;muxIoctl(AtmSrvCtrl[unit].pCookie,EIOCGFLAGS,(caddr_t)&flags);pIfp->if_flags=flags;if(muxIoctl(AtmSrvCtrl[unit].pCookie,EIOCGMIB2,(caddr_t)&mib2Tbl)==ERROR)return(ERROR);pIfp->if_mtu=mib2Tbl.ifMtu;pIfp->if_baudrate=mib2Tbl.i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论