中興通信-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頁
免費預覽已結束,剩余26頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

轉發(fā)到其

報表和結算系Delphi應用程報表和結算系Delphi應用程數(shù)據(jù)庫服務

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

最新文檔

評論

0/150

提交評論