中興通信-aaa系列zxip10-radius服務(wù)器設(shè)計(jì)方案v2.new_第1頁
中興通信-aaa系列zxip10-radius服務(wù)器設(shè)計(jì)方案v2.new_第2頁
中興通信-aaa系列zxip10-radius服務(wù)器設(shè)計(jì)方案v2.new_第3頁
中興通信-aaa系列zxip10-radius服務(wù)器設(shè)計(jì)方案v2.new_第4頁
中興通信-aaa系列zxip10-radius服務(wù)器設(shè)計(jì)方案v2.new_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余26頁可下載查看

付費(fèi)下載

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

目概 編寫目 參考資 總體設(shè) 系統(tǒng)需 功 性 運(yùn)行環(huán) 接口設(shè) 用戶接 硬件接 軟件接 規(guī)范接 ACE相關(guān)資料介 數(shù)據(jù)設(shè) 資 開發(fā)進(jìn) 概編寫目編寫本《RadiusRadius服務(wù)器中各成分的術(shù)語和縮 用 NAS組:一個或多個NAS組成一個NAS組,相當(dāng)于一個端局。NASISP、按地區(qū)進(jìn)行。CDR:CalldetailOCI:Oracle提供的數(shù)據(jù) 接 ,充當(dāng)應(yīng)用軟件與SNMP管理器的中 軟 參考資YD/TXXX-XXXX《 YD/TXXX-XXXX《 ITU-T建議H.323基于包交換的 ITU-T建議H.225.0基于包交換的 IETFRFC1994IETFRFC2107IETFRFC2194IETFRFC2284IETFRFC2289IETFRFC2477IETFRFC2484IETFRFC2607IETFRFC2637IETFRFC2809IETFRFC2865IETFRFC2866IETFRFC2867IETFRFC2868IETFIETFRFC2881IETF總體設(shè)系統(tǒng)需計(jì)費(fèi)計(jì)費(fèi)信

轉(zhuǎn)發(fā)到其

報(bào)表和結(jié)算系Delphi應(yīng)用程報(bào)表和結(jié)算系Delphi應(yīng)用程數(shù)據(jù)庫服務(wù)

算中圖 計(jì)費(fèi)系統(tǒng)原理1所示,認(rèn)證計(jì)費(fèi)信息點(diǎn)可以是接入服務(wù)器,也可以是網(wǎng)守、CTSI服務(wù)器等RadiusRadius服務(wù)器發(fā)出請求,可以是認(rèn)證請求,也可以是計(jì)帳請求,收到請求后,Radius服務(wù)器通過數(shù)據(jù)庫接口數(shù)據(jù)庫,再通知計(jì)費(fèi)信息點(diǎn)請1RadiusSNMP實(shí)現(xiàn)與TMN網(wǎng)中的系統(tǒng)進(jìn)行交互。、Radius服務(wù)器中有一個數(shù)據(jù)庫接口,它通過數(shù)據(jù)庫中的計(jì)費(fèi)的方法、費(fèi)率表CDR的功能。、 槽位、MAC的綁定 支持 平臺上(6CPU、1G磁盤交換速度400呼叫/秒鐘; 運(yùn)行環(huán)最低要求硬件平臺:1臺以In SUN、HP、IBMUNIXWindowsNT數(shù)據(jù)庫:V2.5MSSQLServer、Sybase還需要的軟件:IIS4.0/APACHEWebServer(WEB、ROSE_HA(Cluster軟件子系統(tǒng)/模塊設(shè)RadiusRadius請求的,首先應(yīng)在協(xié)議中指定的端口,若收到一個請求,則應(yīng)數(shù)據(jù)庫,再作出回答,由于,數(shù)據(jù)庫需要一段時間,因此,服務(wù)器應(yīng)2所示,程收Radius請程處理這個請圖 Radius請求有兩種而且兩種請求需要在不同的端口 線程池也可以由1個或2個來組成。在具體的處理方面我們使用ACE提供的Task類,實(shí)現(xiàn)線程池,初始化線程之后,所有的啟動線程后都處于阻塞狀態(tài),使用ACE的反應(yīng)堆來 事件,包括在1812和1813端口的socket,中斷、管道等的信號、還有若干系統(tǒng)中需要用到的定時器,包括watchdog在數(shù)據(jù)庫連接方面radius服務(wù)器同樣采用了類似與線程池的低耦合設(shè)計(jì)方案,連接池。在啟動的時候radius服務(wù)器就已經(jīng)同數(shù)據(jù)庫建立了若干條連接當(dāng)線程在處理radius請求需 程被使用;只有當(dāng)需要數(shù)據(jù)庫的時候,連接池中的連接才會被使用,這種低耦合的設(shè)計(jì)方案大大提高了系統(tǒng)的效率,當(dāng)在系統(tǒng)負(fù)載到一定程度的時候,每一個線程和每接都的一些業(yè)務(wù)層,處理業(yè)務(wù)流協(xié)議層,處理Radius協(xié)圖圖 軟件層次結(jié)構(gòu)業(yè)務(wù)層:對具體的業(yè)務(wù)數(shù)據(jù)庫,得要用戶信息,反饋相應(yīng)的認(rèn)證、鑒權(quán)、計(jì)費(fèi)信息radiusRadius這里主要介紹radius服務(wù)器業(yè)務(wù)層的處理流程包括業(yè)務(wù)的判斷各種業(yè)務(wù)的流程, Radius服務(wù)器目前支持的業(yè)務(wù)有窄帶接入、寬帶接入、CTSI、VPDN、 IPradius請求Radius請求包來說,請求的類別是很容易區(qū)分的,包中的code是用來表示請判斷是否有擴(kuò)展屬性e_h323_conf_id,這條屬性來標(biāo)明cisco的IP 則業(yè)務(wù)為IP ,廠商為9(CISCO的廠商編號)PAPPASSWORD字段來(PAP認(rèn)證加密的是共享密鑰,PASSWORDPASSWORD字段)根據(jù)屬性SERVICE_TYPE判斷是否是會議業(yè)務(wù),這屬于自定義的擴(kuò)展。如果是解出會議和請求會議這兩條屬性如果是漫游包,PAPPASSWORDCHAPNAS-IdentifierUAS4800系統(tǒng)、MA5200系列或是競天接入SERVICE-TYPE得到部分業(yè)務(wù),它們可能是會議、教學(xué)、固網(wǎng)或是流的業(yè)務(wù),他們對應(yīng)的廠商編號分別為1000010008NAS-Port-TypeRFC2865中也有說對于窄帶業(yè)務(wù)(0)對于寬帶業(yè)務(wù)(3902UAS5000系列,2352UAS4800系列、10008B10系列、2011:MA5200系列、4874:競天科技)Radius要求須先知道廠商擴(kuò)展,而不是從包中得到。對于寬帶接入,因?yàn)樯婕暗蕉?suportUAS4800/UAS1500/UAS10000#supportMA5200of #nas-identifier:version對 的M5200系列也有如上的配置,分號左右分別表示對應(yīng)的版本號NAS-Identifier所對應(yīng)的屬性(HOSTNAME,這個值是在接#theNAS-IdentifieroftheNASinShanghaiJinshan還有就是B10和中興的UAS5000系統(tǒng)產(chǎn)品的區(qū)分我們發(fā)現(xiàn)B10類型的接入服務(wù)器是不送主叫號碼的,而UAS5000系統(tǒng)會有這個屬性送出,表示端口、槽位和VLAN等的信息,于是問題就解決了。對一個寬帶接入或是認(rèn)證請求,我們先去根據(jù)NAS-Identifier屬性判斷廠商編號是否屬于設(shè)定值即在配置文件中有設(shè)置,屬于UAS4800系列或是 的MA5200系列或是競天科技的接入服務(wù)器,如果都不是的話,那么我們判斷主叫號碼的屬性是否被封裝,如果已經(jīng)封裝,就是UAS5000系統(tǒng)的接入產(chǎn)品,否則就屬于ZTE的B10系列了。我們用下面的圖示來 ZTE 對于IP 業(yè)務(wù)(廠商編號為3902:CISCO、10008:國標(biāo))對于視迅的相關(guān)業(yè)務(wù)(10008) 在用目系統(tǒng)GB誤用戶余額黑單名中截剩余時間最小認(rèn)證時間校驗(yàn)是認(rèn)證中發(fā)現(xiàn)分radius服務(wù)器夠的IP了綁定BNASMAC無叫資源申請VM的擴(kuò)展屬VM綁定端口綁定未沒有這個業(yè)務(wù)的license,但是對這個限沒發(fā)有權(quán)限限沒有股神通權(quán)限沒有IP話權(quán)沒有會議的權(quán)會議已經(jīng)已經(jīng)絕修改會議會議未處于預(yù)約狀取消會議錯誤會議在進(jìn)IP址錯誤無效的會議名服務(wù)器不無效的主無效的被判斷是否有擴(kuò)展屬性e_h323_conf_id,這條屬性來標(biāo)明cisco的IP 則業(yè)務(wù)為IP ,廠商為9(CISCO的廠商編號)根據(jù)屬性SERVICE_TYPE判斷是否是會議業(yè)務(wù),這屬于自定義的擴(kuò)展。如果是,解出會議和請求會議這兩條屬性NAS-IdentifierUAS4800系統(tǒng)、MA5200系列或是競天接入SERVICE-TYPE得到部分業(yè)務(wù),它們可能是會議、教學(xué)、固網(wǎng)或是流的業(yè)務(wù),他們對應(yīng)的廠商編號分別為1000010008NAS-Port-TypeRFC2865中也有說對于窄帶業(yè)務(wù)(0)對于寬帶業(yè)務(wù)(3902UAS5000系列,2352UAS4800系列、10008B10系列、2011:MA5200系列、4874:競天科技) 對于IP 業(yè)務(wù)(廠商編號為3902:CISCO、10008:國標(biāo))對于視迅的相關(guān)業(yè)務(wù)(10008)RFC2869中的規(guī)定,為了防止記帳結(jié)束包的丟失,接入服務(wù)器應(yīng)該每隔一段RadiusRadius服務(wù)器在的時候返1015Radius服務(wù)器超過一定的時間間隔仍沒有收到記帳中間包(315分鐘,則認(rèn)為用戶已經(jīng)下線。將在我們的系統(tǒng)中設(shè)計(jì)了兩個STLset(集合)set和一個定時器來實(shí)現(xiàn)以上功能。首先,RadiusInterim包的信息都NasAddr采用的關(guān)鍵技UDP緩沖區(qū)的大小為一固定值,當(dāng)緩沖區(qū)滿時,則丟掉。Radius服務(wù)器中 一組已處理計(jì)帳請求的關(guān)鍵字的表,可以是5張表,對IP 關(guān)鍵字是CallIdentifier。有一個當(dāng)前使用表的指針,指向當(dāng)前可以添加記錄的表。若有效時間值是3600秒,則定時器每隔900秒啟動一次,由板庫(STL)來實(shí)現(xiàn)。當(dāng)收到計(jì)帳請求后,查詢這5張表,若已有該記錄則 SYBASEBCP調(diào)用接口函數(shù)來實(shí)現(xiàn)的 的Radius數(shù)據(jù)包應(yīng)有處理方法,如協(xié)議中的長度域 由WatchDogWatchDogRadius服務(wù)器的程序也是一個守護(hù)進(jìn)程(UNIX)或是服務(wù)(windows端口用于由radius服務(wù)器過程負(fù)責(zé)每隔一段時間發(fā)送UDP報(bào)文給watchdog程序表明自己的狀態(tài)如果radius服務(wù)器現(xiàn)在的狀態(tài)很不正常的話,它可能會發(fā)送級別比較高的告警信息給當(dāng)radius服務(wù)器不能夠正常工作的時候這樣的UDP報(bào)文是無法發(fā)送給watchdog,watchdog在判斷到存在若干個超時信息后,也會重新啟動radius服務(wù)器。當(dāng)然這個發(fā)送UDP報(bào)文給watchdog的線程也是受到主線程 在radius服務(wù)器的運(yùn)行狀態(tài)能夠時刻被watchdog所了解和采用操作系統(tǒng)無關(guān)軟件技術(shù)接口設(shè)用戶接NTUnixradiustypedefunsignedchar unsignedchar typedefACE_UINT32AttrInt;typedefACE_UINT32AttrAddr;structcharstructchartypedef structAttrValPair{ typedefCMapList<AttrType,TypeId>CAttrType;typedefCMapList<AttrName,AttrType>CAttrNmTp;typedefCMapList<AttrType,AttrName>CAttrTpNm;radiusSTLradius服務(wù)器也是一個跨平臺的版本,所以我們采用了SGI的STL,主要涉及的容器有<SET>集合<VECTOR> 可以參看SGI的STL的相關(guān)源碼,一般在stl_set.hstl_vector.hstl_map.h中。radiusmaplistC++的范疇,就是說它不是一個標(biāo)準(zhǔn)的STL容器,但是由于它的安全性、高性能以及穩(wěn)定性我們還是選擇使用了這個容器,目前采用的是惠普(HP)MAPLIST實(shí)現(xiàn),下面只是一個聲名,具體的實(shí)現(xiàn)需要參看HP的STL實(shí)現(xiàn){ { 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實(shí)現(xiàn)對數(shù)據(jù)庫的 RadiusRadius配置文件的副本由radius服務(wù)器產(chǎn)生,名稱為serverbak.cfg,和以前的配置文件放在同 下(即Radius服務(wù)器的工作 。每次Radius服務(wù)器在啟動的時候,都會判斷副; UDP協(xié)議具有不可靠性,需要接收回應(yīng)包來確定是否收到該TCP格式。Radius服務(wù)器,通知服務(wù)器配置文件已被修改,需要重考慮到兼容性的因素,這個模塊應(yīng)該能夠在Win32Unix平臺通用,因?yàn)閷CE的類庫了(ACETCP消息并時候,在終端上面會將配置文件的修改顯示給用戶,供用戶確認(rèn)是否將此內(nèi)容載入Radius服務(wù)器。Radius服務(wù)器上新增一個線程,做為系統(tǒng)的消息接收模塊。線程在實(shí)時由環(huán)路地址()TCP消息。為了防止其他程序?qū)Νh(huán)路地址發(fā)送消息影響radius服務(wù)器的正常工作,需要對包結(jié)構(gòu)進(jìn)行限制,增加鑒權(quán)碼,具體內(nèi)容參見2.2.3 Radius服務(wù)器的日志級別,載入內(nèi)存之后還需要重新啟用這個Radius服務(wù)器。Radius服務(wù)器收到這類Radius服務(wù)器將配置文件的 RadiusRadius服務(wù)器支持預(yù)負(fù)費(fèi)計(jì)費(fèi),這就要求能夠在用戶下線的時候根據(jù)用戶選擇的業(yè)務(wù)、radius服務(wù)器來說Radius服務(wù)器只支持預(yù)費(fèi)用戶(F類用戶)和后實(shí)時計(jì)費(fèi)用戶(G類用戶。預(yù)負(fù)費(fèi)用戶當(dāng)在鑒權(quán)的時候需要調(diào)用計(jì)費(fèi)模塊,計(jì)算出當(dāng)前的金額能夠讓這個用戶使用多長時間,當(dāng)用戶下線的時候,預(yù)負(fù)費(fèi)用戶和后實(shí)時用戶都需要調(diào)用ZXIP10AAA系統(tǒng)的費(fèi)率體系非常簡單,用戶的類型和使用的業(yè)務(wù)確定了一個費(fèi)率套RadiusSTL實(shí)現(xiàn)。其中包括基本費(fèi)用表、節(jié)假日表、分時段表、費(fèi)率套餐表、基本業(yè)務(wù)表、業(yè)務(wù)名稱表等服務(wù)器中有一個定時器定期這張RadChange表,來檢查哪些費(fèi)率表有改動,收到記帳結(jié)束包,判斷是否屬于預(yù)負(fù)費(fèi)用戶或是后實(shí)時計(jì)費(fèi)用戶,是則進(jìn)入計(jì) ACEACE 和并發(fā)的OO網(wǎng)絡(luò)應(yīng)用和服務(wù)的開發(fā)。此外,通過服務(wù)在運(yùn) ,ACE還使系統(tǒng)的配置和重配置得以自動化。ACEACE增強(qiáng)可移植性ACEOSOSACE更容易轉(zhuǎn)換到標(biāo)準(zhǔn)的高級中間件:TAO使用了ACE提供的可復(fù)用組件和模式。它是CORBAACE和TAO被設(shè)計(jì)為能良好地協(xié)同工作,以提供全面的中間件解決方案。ACE下圖顯示了ACEACEOS該層用C寫成,直接駐留在本地OSAPI之上。它提供輕型的類POSIXOS適配層,將ACE中的其他層及組件和以下與OSAPI相關(guān)聯(lián)的平臺專有特性 并發(fā)和同步:ACEOSAPI進(jìn)程間通信(IPC)和共享內(nèi)存:ACEIPC、以及共享內(nèi)存的OSAPI。事件多路分離機(jī)制:ACEI/O、定時器、信號和同步的事件進(jìn)行同步和異步多路分離的OSAPI。 :ACE的適配層封裝了用于顯式動態(tài) 的OSAPI。顯式動態(tài) 的OS文件系統(tǒng)APIACEOS適配層的可移植性使得ACE可運(yùn)行在許多操作系統(tǒng)上。ACE已在廣泛的OS平臺上進(jìn)行了移植和測試,包括Win32(也就是,在In BorlandC++Builder和IBMVisualAge的WinNT3.5.x、4.x、2000、Win95/98和WinCE)、MacOSX、大多數(shù)版本的UNIX(例如,SPARC和In 上的Solaris1.x和2.x、SGIIRIX5.x和6.x、DG/UX、HP-UX9.x、10

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論