Diameter是新一代AAA協(xié)議,,可以承載與TCP或者SCTP協(xié)議之上,,被廣泛應(yīng)用于IMS,,LTE網(wǎng)絡(luò)中,。RFC3588定義了Diameter的基礎(chǔ)協(xié)議,各種應(yīng)用可以在此基礎(chǔ)上對其進(jìn)行擴(kuò)展(主要是定義新的Application ID,Command和AVP),;基礎(chǔ)協(xié)議中包括一個(gè)基本的Accounting功能,,如果需要Authentication或者Authorization通常需要進(jìn)行對基礎(chǔ)協(xié)議擴(kuò)展。 1. 基本概念: · Connection: 是傳輸層的概念,,負(fù)責(zé)在兩端直接傳輸Diameter消息,; · Session: 是應(yīng)用層的概念,可以用Session-id 這AVP來標(biāo)識,;下圖展示了Connection與Session的區(qū)別,; +--------+ +-------+ +--------+ | Client | | Relay | | Server | +--------+ +-------+ +--------+ <----------> <----------> peer connection A peer connection B <----------------------------------------------------> User session x · Destination Host:用于標(biāo)識一臺運(yùn)行Diameter應(yīng)用的主機(jī),命名方式類似DNS格式,,但并不是域名,,只是一個(gè)標(biāo)識符而已,一臺運(yùn)行Diameter應(yīng)用的主機(jī)可以支持一個(gè)或者多個(gè)Diameter應(yīng)用,; · Destination Realm:用于標(biāo)識一組運(yùn)行Diameter應(yīng)用的主機(jī),,可以將多臺Host劃歸為一個(gè)Realm中; · Peer Table:用于消息路由的數(shù)據(jù)配置,, Peer table中的主機(jī)都是能和本地主機(jī)之間通信的(也就是說中間無需經(jīng)過消息轉(zhuǎn)發(fā)),,格式如下表: Host identity StatusT Static or Dynamic Expiration time abc.example.com R-Open statically 0 xyz.example.net R-Open dynamically 10 · Realm-Based Routing Table : 用于消息路由的數(shù)據(jù)配置,格式如下表: Realm Name Application Identifier Local Action Server Identifier Static or Dynamic Expiration time example 16777250 RELAY abc.example.com statically 0 example 16777272 RELAY xyz.example.net dynamically 10 2. Diameter Agents: · Relay Agents:對消息進(jìn)行轉(zhuǎn)發(fā),,只增加或者刪除路由信息,,而不會修改任何應(yīng)用層信息;在CER/CEA進(jìn)行能力交互時(shí),,需要返回自己支持的Application ID為Relay Application Identifier ,;使用Relay Agents的好處是簡化網(wǎng)絡(luò)的復(fù)雜性,不需要對所有Diameter節(jié)點(diǎn)都進(jìn)行復(fù)雜的配置,,比如只需配置節(jié)點(diǎn)讓Diameter消息轉(zhuǎn)發(fā)到Relay Agents,然后在Relay Agents上進(jìn)行比較全面的路由配置即可,。 · Proxy Agents:Proxy Agents也負(fù)責(zé)轉(zhuǎn)發(fā)消息,,與Relay Agent不同的是,它需要理解應(yīng)用層的信息,,進(jìn)而維護(hù)Transaction的狀態(tài),;在CER/CEA進(jìn)行能力交互時(shí),需要返回自己支持的所有Application ID,; · Redirect Agents:收到Diameter消息后不進(jìn)行轉(zhuǎn)發(fā),,而是回復(fù)一個(gè)應(yīng)答消息給發(fā)送者,應(yīng)答消息中包含一個(gè)或者多個(gè)地址,,告訴發(fā)送者應(yīng)該將消息發(fā)往這些地址,; · Translation Agents:完成Radius和Diameter協(xié)議之間的轉(zhuǎn)換; 3. 消息格式: MAC header IP header SCTP | TCP header Diameter header Data ::: 1) Diameter header: 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Version Message length Flags Code R P E T r r r r Application ID Hop by Hop ID End to End ID AVP[] ::: · Version: Diameter的版本號,,目前為1,; · Message length:包含頭部在內(nèi)的消息長度,,也就是頭部+所有AVP的長度之和; · Flags: R(equest):如果 置位表示這是一個(gè)Request消息,; P(roxiable):如果被置位說明該消息可以被轉(zhuǎn)發(fā),,否則必須本地處理; E(rror):如果置位,,說明產(chǎn)生了一個(gè)協(xié)議錯(cuò)誤,,只能出現(xiàn)在Answer消息中; T:如果被置位,,說明該消息有可能是一個(gè)被重傳的消息,; r:保留位; · Code:消息命令碼,,用來標(biāo)識各種Diameter消息,,由IANA負(fù)責(zé)統(tǒng)一分配; · Application ID:用來表示不同的Diameter應(yīng)用,,由IANA負(fù)責(zé)統(tǒng)一分配,; · Hop by Hop ID:用來匹配Request和Answer消息,在一個(gè)指定的Connection上的任何時(shí)間都必須是唯一的,;該值在Diameter消息轉(zhuǎn)發(fā)時(shí)會被Agent修改,; · End to End ID:用來識別重復(fù)消息;該值在本地的一段時(shí)間內(nèi)必須是唯一的,,傳輸過程中一直保持不變,;目標(biāo)主機(jī)會根據(jù)該值和Original-Host AVP來判讀是否是重復(fù)消息; 2) AVP header: 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 AVP code AVP flags AVP length V M P r r r r r Vendor ID (Optional) Data ::: · AVP code:用來標(biāo)識一個(gè)AVP,,由IANA來統(tǒng)一分配,; · AVP flags: V, Vendor specific: 如果置位說明 Vendor ID 存在; M, Mandatory:如果置位說明該AVP是必須的,; P:如果置位說明需要保證該AVP端到端的安全性,; r:reserved · AVP length:AVP長度; · Vendor ID:可選的,,如果AVP flags中的V被置位,,說明該域存在;該值也是由IANA分配的,; 4. Diameter和連接相關(guān)的三對基本消息: Diamete通過傳輸層TCP/SCTP建立連接后,,傳輸?shù)牡谝粋€(gè)消息就是CER/CEA,通過該消息的交互了解對端都支持哪些應(yīng)用,,看是否有共同的應(yīng)用,;如果對端是Relay Agent,則認(rèn)為肯定存在共同應(yīng)用;獲知對方支持你哪些應(yīng)用后,,發(fā)送消息的時(shí)候就不會發(fā)送對方不認(rèn)識的消息,,對方對收到的不認(rèn)識的消息也不會處理。此外雙方的IP地址也會在CER/CEA消息中交換,。CER/CEA是不能被Proxy,,Relay或者是Redirection的,所以說CER/CEA只能是直連節(jié)點(diǎn)之間的交換,,如果節(jié)點(diǎn)A經(jīng)過Relay Agent發(fā)送消息到節(jié)點(diǎn)B,,那么需要建立兩個(gè)連接,進(jìn)行兩次CER/CEA的交互,。當(dāng)需要斷開連接時(shí),,主動方需要發(fā)起DPR消息給對端指示斷開傳輸層連接。在連接期間,,雙方需要互發(fā)DWR/DWA (Watching Dog) 消息,,用來檢測對方是否處于Active狀態(tài). 5. 如何看規(guī)范中的Diameter命令的ABNF 定義: 具體參見協(xié)議的3.2,這里用一個(gè)例子大概總結(jié)一下: Example-Request ::= < "Diameter-Header: 9999999, REQ, PXY,,123456 > <Session-Id> //該AVP必須存在一個(gè),,且位置固定 { User-Name } //該AVP必須存在一個(gè) [ Destination-Host ] //該AVP可存在一個(gè)或者不存在 1*{ Origin-Host } //該AVP可存在一個(gè)或者多個(gè) *[ AVP ] //該AVP可存在零個(gè)或者多個(gè) |
|