中兴通信-aaa系列zxip10-radius服务器设计方案v2.new_第1页
中兴通信-aaa系列zxip10-radius服务器设计方案v2.new_第2页
中兴通信-aaa系列zxip10-radius服务器设计方案v2.new_第3页
中兴通信-aaa系列zxip10-radius服务器设计方案v2.new_第4页
中兴通信-aaa系列zxip10-radius服务器设计方案v2.new_第5页
已阅读5页,还剩26页未读, 继续免费阅读

下载本文档

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

kok电子竞技:文档简介

目概 编写目 参考资 总体设 系统需 功 性 运行环 接口设 用户接 硬件接 软件接 规范接 ACE相关资料介 数据设 资 开发进 概编写目编写本《RadiusRadius服务器中各成分的术语和缩 用 NAS组:一个或多个NAS组成一个NAS组,相当于一个端局。NASISP、按地区进行。CDR:CalldetailOCI:Oracle提供的数据 接 ,充当应用软件与SNMP管理器的中 软 参考资YD/TXXX-XXXX《 YD/TXXX-XXXX《 ITU-T建议H.323基于包交换的 ITU-T建议H.225.0基于包交换的 IETFRFC1994IETFRFC2107IETFRFC2194IETFRFC2284IETFRFC2289IETFRFC2477IETFRFC2484IETFRFC2607IETFRFC2637IETFRFC2809IETFRFC2865IETFRFC2866IETFRFC2867IETFRFC2868IETFIETFRFC2881IETF总体设系统需计费计费信

转发到其

报表和结算系Delphi应用程报表和结算系Delphi应用程数据库服务

算中图 计费系统原理1所示,认证计费信息点可以是接入服务器,也可以是网守、CTSI服务器等RadiusRadius服务器发出请求,可以是认证请求,也可以是计帐请求,收到请求后,Radius服务器通过数据库接口数据库,再通知计费信息点请1RadiusSNMP实现与TMN网中的系统进行交互。、Radius服务器中有一个数据库接口,它通过数据库中的计费的方法、费率表CDR的功能。、 槽位、MAC的绑定 支持 平台上(6CPU、1G磁盘交换速度400呼叫/秒钟; 运行环最低要求硬件平台:1台以In SUN、HP、IBMUNIXWindowsNT数据库:V2.5MSSQLServer、Sybase还需要的软件:IIS4.0/APACHEWebServer(WEB、ROSE_HA(Cluster软件子系统/模块设RadiusRadius请求的,首先应在协议中指定的端口,若收到一个请求,则应数据库,再作出回答,由于,数据库需要一段时间,因此,服务器应2所示,程收Radius请程处理这个请图 Radius请求有两种而且两种请求需要在不同的端口 线程池也可以由1个或2个来组成。在具体的处理方面我们使用ACE提供的Task类,实现线程池,初始化线程之后,所有的启动线程后都处于阻塞状态,使用ACE的反应堆来 事件,包括在1812和1813端口的socket,中断、管道等的信号、还有若干系统中需要用到的定时器,包括watchdog在数据库连接方面radius服务器同样采用了类似与线程池的低耦合设计方案,连接池。在启动的时候radius服务器就已经同数据库建立了若干条连接当线程在处理radius请求需 程被使用;只有当需要数据库的时候,连接池中的连接才会被使用,这种低耦合的设计方案大大提高了系统的效率,当在系统负载到一定程度的时候,每一个线程和每接都的一些业务层,处理业务流协议层,处理Radius协图图 软件层次结构业务层:对具体的业务数据库,得要用户信息,反馈相应的认证、鉴权、计费信息radiusRadius这里主要介绍radius服务器业务层的处理流程包括业务的判断各种业务的流程, Radius服务器目前支持的业务有窄带接入、宽带接入、CTSI、VPDN、 IPradius请求Radius请求包来说,请求的类别是很容易区分的,包中的code是用来表示请判断是否有扩展属性e_h323_conf_id,这条属性来标明cisco的IP 则业务为IP ,厂商为9(CISCO的厂商编号)PAPPASSWORD字段来(PAP认证加密的是共享密钥,PASSWORDPASSWORD字段)根据属性SERVICE_TYPE判断是否是会议业务,这属于自定义的扩展。如果是解出会议和请求会议这两条属性如果是漫游包,PAPPASSWORDCHAPNAS-IdentifierUAS4800系统、MA5200系列或是竞天接入SERVICE-TYPE得到部分业务,它们可能是会议、教学、固网或是流的业务,他们对应的厂商编号分别为1000010008NAS-Port-TypeRFC2865中也有说对于窄带业务(0)对于宽带业务(3902UAS5000系列,2352UAS4800系列、10008B10系列、2011:MA5200系列、4874:竞天科技)Radius要求须先知道厂商扩展,而不是从包中得到。对于宽带接入,因为涉及到多#suportUAS4800/UAS1500/UAS10000#supportMA5200of #nas-identifier:version对 的M5200系列也有如上的配置,分号左右分别表示对应的kok电子竞技本号NAS-Identifier所对应的属性(HOSTNAME,这个值是在接#theNAS-IdentifieroftheNASinShanghaiJinshan还有就是B10和中兴的UAS5000系统产品的区分我们发现B10类型的接入服务器是不送主叫号码的,而UAS5000系统会有这个属性送出,表示端口、槽位和VLAN等的信息,于是问题就解决了。对一个宽带接入或是认证请求,我们先去根据NAS-Identifier属性判断厂商编号是否属于设定值即在配置文件中有设置,属于UAS4800系列或是 的MA5200系列或是竞天科技的接入服务器,如果都不是的话,那么我们判断主叫号码的属性是否被封装,如果已经封装,就是UAS5000系统的接入产品,否则就属于ZTE的B10系列了。我们用下面的图示来 ZTE 对于IP 业务(厂商编号为3902:CISCO、10008:国标)对于视迅的相关业务(10008) 在用目系统GB误用户余额黑单名中截剩余时间最小认证时间校验是认证中发现分radius服务器够的IP了绑定BNASMAC无叫资源申请VM的扩展属VM绑定端口绑定未没有这个业务的license,但是对这个限没发有权限限没有股神通权限没有IP话权没有会议的权会议已经已经绝修改会议会议未处于预约状取消会议错误会议在进IP址错误无效的会议名服务器不无效的主无效的被判断是否有扩展属性e_h323_conf_id,这条属性来标明cisco的IP 则业务为IP ,厂商为9(CISCO的厂商编号)根据属性SERVICE_TYPE判断是否是会议业务,这属于自定义的扩展。如果是,解出会议和请求会议这两条属性NAS-IdentifierUAS4800系统、MA5200系列或是竞天接入SERVICE-TYPE得到部分业务,它们可能是会议、教学、固网或是流的业务,他们对应的厂商编号分别为1000010008NAS-Port-TypeRFC2865中也有说对于窄带业务(0)对于宽带业务(3902UAS5000系列,2352UAS4800系列、10008B10系列、2011:MA5200系列、4874:竞天科技) 对于IP 业务(厂商编号为3902:CISCO、10008:国标)对于视迅的相关业务(10008)RFC2869中的规定,为了防止记帐结束包的丢失,接入服务器应该每隔一段RadiusRadius服务器在的时候返1015Radius服务器超过一定的时间间隔仍没有收到记帐中间包(315分钟,则认为用户已经下线。将在我们的系统中设计了两个STLset(集合)set和一个定时器来实现以上功能。首先,RadiusInterim包的信息都NasAddr采用的关键技UDP缓冲区的大小为一固定值,当缓冲区满时,则丢掉。Radius服务器中 一组已处理计帐请求的关键字的表,可以是5张表,对IP 关键字是CallIdentifier。有一个当前使用表的指针,指向当前可以添加记录的表。若有效时间值是3600秒,则定时器每隔900秒启动一次,由板库(STL)来实现。当收到计帐请求后,查询这5张表,若已有该记录则 SYBASEBCP调用接口函数来实现的 的Radius数据包应有处理方法,如协议中的长度域 由WatchDogWatchDogRadius服务器的程序也是一个守护进程(UNIX)或是服务(windows端口用于由radius服务器过程负责每隔一段时间发送UDP报文给watchdog程序表明自己的状态如果radius服务器现在的状态很不正常的话,它可能会发送级别比较高的告警信息给当radius服务器不能够正常工作的时候这样的UDP报文是无法发送给watchdog,watchdog在判断到存在若干个超时信息后,也会重新启动radius服务器。当然这个发送UDP报文给watchdog的线程也是受到主线程 在radius服务器的运行状态能够时刻被watchdog所了解和采用操作系统无关软件技术接口设用户接NTUnixradiustypedefunsignedchar unsignedchar typedefACE_UINT32AttrInt;typedefACE_UINT32AttrAddr;structcharstructchartypedef structAttrValPair{ typedefCMapList<AttrType,TypeId>CAttrType;typedefCMapList<AttrName,AttrType>CAttrNmTp;typedefCMapList<AttrType,AttrName>CAttrTpNm;radiusSTLradius服务器也是一个跨平台的kok电子竞技本,所以我们采用了SGI的STL,主要涉及的容器有<SET>集合<VECTOR> 可以参看SGI的STL的相关源码,一般在stl_set.hstl_vector.hstl_map.h中。radiusmaplistC++的范畴,就是说它不是一个标准的STL容器,但是由于它的安全性、高性能以及稳定性我们还是选择使用了这个容器,目前采用的是惠普(HP)MAPLIST实现,下面只是一个声名,具体的实现需要参看HP的STL实现{ { VALUEvalue_; MapEntry*next_; {tag=0xff;void*findKey(constKEY&key)void*findEntry(constKEY&key,constVALUE&value)//CMapList(size_tprealloc=10,size_tinc=5,size_tlimit=100);CMapList(size_tprealloc=20,size_tinc=10,size_tlimit=~CMapListintappend(constKEY&key,constVALUE&intappend(constKEY&key,constVALUE&value,constBYTE&tag1);voidclearAll(void);size_tsize(void)size_tcount(void)const; resize(size_tnewsize);voidreduceToCount(void);intgetValueByKey(constKEY&key,VALUE&value)intgetValueByKey(constKEY&key,VALUE&value,VALUE*&p)const;intsetValueByKey(constKEY&key,constVALUE&value);intgetNextEntry(KEY&cur_key,VALUE&value)intupdateWithEntry(constKEY&key,constVALUE&value,DupModeupdate_mode=intupdateWithEntry(constKEY&key,constVALUE&value,constBYTE&tag1,DupModeupdate_mode=DUPREPLACE);intgetEntryByOrder(KEY&key,VALUE&value,size_tn)intgetEntryByOrder(KEY&key,VALUE&value,BYTE&tag1,size_tn)const; removeByKey(constKEY&key); getNextDup(constKEY&key,VALUE&value)const; removeEntry(constKEY&key,constVALUE&value);voidalloc(size_tn);voiddealloc(size_tn);size_t //Incrementsize_t //Keepstrackofthesizeofthesize_tcount_; //Recordsthenumberofentryinthislist.size_tlimit_; //Incasethemaplistgrowtocollapse.MapEntry*list_head_; //Pointertothefirstnode.MapEntry*list_tail_; //Pointertothelastoccupiednode.MapEntry*list_end_; //Pointertothelastvacantnode.//=Don'tallowtheseoperationsforclass{//RadiusstructRadHeaderunsigned unsignedchar unsignedshort m_authcator//struct unsignedchar unsignedchar //structRadStrunsignedchar unsignedchar //structAttrStruunsignedcharm_type;unsignedcharm_length; m_value[1]; RadAttr/**// RadCtrl //Mainthreaddothe //Mainthreaddeliverthe //Subordinatethread

////ConstructorcalledbyClientCRadPack(CRadHost*host,CRadTask*task,RadCodeCRadPack(CRadHost*host,CRadTask*task,RadCodecode,char*packet,//ConstructorcalledbyServerCRadPack(CRadHost*host,CRadTask*task,char*packet,size_tsize,constACE_INET_Addr&addr);////DestructtheobjectvirtualvoidDestroy(void) deletethis; virtual~CRadPack(void);//BelowfourmethodadmitusaccesstotheprivatemembervariableintGetAttr(RadAttrattr,ACE_UINT32&value)const;intGetAttr(RadAttrattr,char*value,size_tlen)const;intSetAttr(RadAttrattr,constchar*value);//BelowfourmethodcanaccessvendorintGetVendorAttr(VendorAttrattr,ACE_UINT32&value)const;#ifdef GetVendorAttr(VendorAttrattr,AttrStr&value,size_tlen)const;intSetVendorAttr(VendorAttrattr,constchar*value);//Thismethodcreatearadpacketaccordingtoallthelocal//code,authenticator,CreatePack(void);//Thisisareversefunctiontothelastone.It,onthe//CreateAttr(void);//Thisfunctionisonlyimplementedinthederived//Itwillcalltheothermembermethodstocompletetheprocessing.virtualintProcess(RadCtrlctrl_arg=GOINGON);//Thisreallydothework.virtualintRadHandle(void)=0; m_vendorId= voidSetAdsiRadHead(RadHead& m_adsiRadHead= staticACE_Atomic_Op<ACE_Mutex,int> intCompareChapPasswd(char*chapPasswd,char//Setthedestinationipfrompeerip. SetTo(void); //Thesefourmethodswillcallonstaticfunctionmd5_PasswdXor(AttrTypetype);intPasswdXor(VendorAttrtype);intPasswdDeXor(AttrTypetype);intPasswdDeXor(VendorAttrtype); intintDigitalSignAnsw(char*auth=intConfirmAnsw(void);intConfirmIn(void);//Ifthismethodisfirstcalled,SetPeerSecret(void);intSetToSecret(void);intSetFromSecret(void);intSetNextPeer(u_shortport=0);intSetPeerPort(u_shortport=0);//Thevariablem_pPacketpointstoaRadius//Weshouldtakecareofreleaseitwhenwedestructthischar //challege //slatfor tunnelpassword //Them_attrIntMapandm_attrStrMaparethedynamicarrayofthe//(time_t,IPaddressaswell)typeattribute-valuepairandstring//attribute-value unsignedint //peer_istheIPaddressoftheremoteconversation//Andm_toAddristheIPaddressofthispacket'sdestination//Theyaresimplyidenticalwhenthisclassisusedintheclient//However,m_toAddrcouldbetheproxyaddressandthusdiffers//m_peerAddrwhenitisusedintheserver //ThesearethedescriptionofthereplypacketwhenwecallthemethodsendAndrecv().char* //Thesewouldbesetwhenthepacketis//Serverhastwosearchlist.Hereweonlyprovideforclient.//initializationweshouldappendtheproxyipandsecretinto//Twohost-concernedvariablearelistedhere.CRadHost* 硬件接软件接radius 0123456789012345678901234567890 | |||||||||Attributes 01234567890123456789 |Value 0123456789012345678901234567890 | Vendor-Vendor-Id |Vendor |Vendorlength 通过sybase提供的DB-Library实现对数据库的 RadiusRadius配置文件的副本由radius服务器产生,名称为serverbak.cfg,和以前的配置文件放在同 下(即Radius服务器的工作 。每次Radius服务器在启动的时候,都会判断副; UDP协议具有不可靠性,需要接收回应包来确定是否收到该TCP格式。Radius服务器,通知服务器配置文件已被修改,需要重考虑到兼容性的因素,这个模块应该能够在Win32Unix平台通用,因为对ACE的类库了(ACETCP消息并时候,在终端上面会将配置文件的修改显示给用户,供用户确认是否将此内容载入Radius服务器。Radius服务器上新增一个线程,做为系统的消息接收模块。线程在实时由环路地址()TCP消息。为了防止其他程序对环路地址发送消息影响radius服务器的正常工作,需要对包结构进行限制,增加鉴权码,具体内容参见2.2.3 Radius服务器的日志级别,载入内存之后还需要重新启用这个Radius服务器。Radius服务器收到这类Radius服务器将配置文件的 RadiusRadius服务器支持预负费计费,这就要求能够在用户下线的时候根据用户选择的业务、radius服务器来说Radius服务器只支持预费用户(F类用户)和后实时计费用户(G类用户。预负费用户当在鉴权的时候需要调用计费模块,计算出当前的金额能够让这个用户使用多长时间,当用户下线的时候,预负费用户和后实时用户都需要调用ZXIP10AAA系统的费率体系非常简单,用户的类型和使用的业务确定了一个费率套RadiusSTL实现。其中包括基本费用表、节假日表、分时段表、费率套餐表、基本业务表、业务名称表等服务器中有一个定时器定期这张RadChange表,来检查哪些费率表有改动,收到记帐结束包,判断是否属于预负费用户或是后实时计费用户,是则进入计 ACEACE 和并发的OO网络应用和服务的开发。此外,通过服务在运 ,ACE还使系统的配置和重配置得以自动化。ACEACE增强可移植性ACEOSOSACE更容易转换到标准的高级中间件:TAO使用了ACE提供的可复用组件和模式。它是CORBAACE和TAO被设计为能良好地协同工作,以提供全面的中间件解决方案。ACE下图显示了ACEACEOS该层用C写成,直接驻留在本地OSAPI之上。它提供轻型的类POSIXOS适配层,将ACE中的其他层及组件和以下与OSAPI相关联的平台专有特性 并发和同步:ACEOSAPI进程间通信(IPC)和共享内存:ACEIPC、以及共享内存的OSAPI。事件多路分离机制:ACEI/O、定时器、信号和同步的事件进行同步和异步多路分离的OSAPI。 :ACE的适配层封装了用于显式动态 的OSAPI。显式动态 的OS文件系统APIACEOS适配层的可移植性使得ACE可运行在许多操作系统上。ACE已在广泛的OS平台上进行了移植和测试,包括Win32(也就是,在In BorlandC++Builder和IBMVisualAge的WinNT3.5.x、4.x、2000、Win95/98和WinCE)、MacOSX、大多数kok电子竞技本的UNIX(例如,SPARC和In 上的Solaris1.x和2.x、SGIIRIX5.x和6.x、DG/UX、HP-UX9.x、10.x paqUNIXSCOVxWorks、ChorusClassiX4.0、QnXNeutrino、RTEMSPSoS)、MVSOpenEdition和CRAYUNICOS。ACEOS极大地增强了ACE的可移植性和可性。此外,还有JavaACE可用 )OS接口的C++包装可以直接在ACEOSCACEOSAPI),ACEOO(ActiveObject和多态PolymorphicTLI、UNIXFIFOSTREAMWin32ACEC++包装还封装了OS文件系统API。类和对象、而不是独立的COO包装有助于减少正确地学习和使用ACE所需的努力。例如,CC++包装是强类型的。所以,编译器可socket文件系统I/O这样的C一级OSAPI的类型系统违例。来消除额外的方法调用开销;这样的开销可由OS适配层和C++包装所提供的额外的类型socket和文件I/O的send/recv方法,ACEACEC++包装外观。该构架支持将并发分布式服务动态配置进应用。ACE事件多路分离组件:ACEReactorProactor(前摄器)是可扩展的面向对象I/O、定时器、信号服务初始化组件:ACEAcceptor(接受器)Connector(连接器)组件分别使主动和的初始化任务与初始化一旦完成后通信服务所执行的应用特有的任务去耦合。服务配置组件:ACEServiceConfigurator(服务配置器)支持应用的配置,这些应用分层的流组件:ACEStreamACE构架组件便利了通信软件的开发,它们无需修改、重编译、重,或频繁地重ACE 除了OS适配层、C++包装外观和构架组件,ACE还提供了包装成自包含组件的标准 演示ACE组件的常见用例:这些分布式服务还演示了怎样用像Reactor、ServiceConfigurator、AcceptorConnector、ActiveObjectIPCACE即使使用像ACE特别是,开发者必须掌握许多复杂的OS 认证、和数据安全。服务和启用。 TheACEORB(TAO):TAOACECORBA实时实现,包含有网络接口、OSCORBATAOOMGCORBA时应用的ORB的缺点。TAO像ACE一样,也是可自由使用的开放源码软件。 JAWS:JAWSWebACE构建。JAWSJAWS多路分派器、并发策略、I/O构架都被构造成一组协作对象,通过组合和扩展ACE中的组件来实现。JAWS也是可ACE的主页为 数据设Radius服务器配置是否被修改表:Radius服务器名称、被修改表的名称、是否Manager来设置为“1主叫号 本地管 与用户配置单:IP地址与端口列表、配置名称、值、修改日 其余的数据结构请参看《用户接口》中的《Radius服务器中定义的基本数据结可靠性对于radius服务器的所有线程都由主线程来进 软件计划和进度安资SUNUltra10,PC。2。开发进其它说明(可选

温馨提示

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

评论

0/150

提交评论