DIAMETER
DIAMETER je AAA protokol (authentication, authorization and accounting, česky autentizace, autorizace a účtovací) používaný pro přístup k síti nebo pro IP mobilitu. Hlavní koncept tvoří základní protokol, který může být rozšířen pro poskytování AAA služeb novým přístupovým technologiím. Může pracovat jak lokálně tak i vroamingu.
Rozšíření oproti RADIUS protokolu
Protokol DIAMETER je rozšířeným následníkem protokolu RADIUS (o čemž svědčí okolnost, že diametr čili průměr je dvojnásobkem rádiusu neboli poloměru). Diameter není přímo zpětně kompatibilní, ale poskytuje rozšířenou cestu pro RADIUS. Hlavní rozdíly protokolu DIAMETER oproti protokolu RADIUS jsou:
používá spolehlivý transportní protokol (TCP nebo SCTP, nepoužívá nespolehlivý UDP)
může použít zabezpečení na transportní vrstvě (IPsec nebo TLS)
podporuje přenos RADIUS
má větší adresní prostor pro dvojice hodnot atributů (anglicky Attribute Value Pairs, AVPs) a širší identifikátory (32bitové místo 8bitových)
jde o klient-server protokol, s výjimkou podpory některých zpráv inicializovaných serverem
lze použít stavový i bezstavový model
má dynamické objevování uzlů (používá DNS, SRV a NAPTR)
má schopnost vyjednávání
podporuje dohody na aplikační vrstvě, definuje metody odolávající chybám a stavové stroje (RFC 3539)
oznamuje chyby
má lepší podporu roamingu
je snadněji rozšiřitelný; lze definovat nové příkazy a atributy
je zarovnán na 32bitové hranice
má základní podporu uživatelských sezení a účtování
Popis protokolu
Základní protokol Diameteru (anglicky Diameter Base Protocol) je definován v RFC 3588. Určuje minimální požadavky AAA protokolu. Aplikace Diameteru (anglickyDiameter Applications) mohou rozšířit základní protokol přidáním nových příkazů nebo atributů. Aplikace zde není program, nýbrž protokol založený na Diameteru. Zabezpečení protokolu Diameter je poskytováno protokolem IPSEC nebo TLS.
Formát paketů
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Verze | Délka zprávy |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|příznak příkazu| Kód příkazu |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Aplikační-ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Hop-by-Hop Identifikátor |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| End-to-End Identifikátor |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| AVPs ...
+-+-+-+-+-+-+-+-+-+-+-+-+-


Příkazy
Každému příkazu je přiřazen kód příkazu, který se používá v obou typech zpráv – v požadavcích i odpovědích.
Jméno příkazu
Zkratka
Kód
Abort-Session-Request
ASR
274
Abort-Session-Answer
ASA
274
Accounting-Request
ACR
271
Accounting-Answer
ACA
271
Capabilities-Exchange-Request
CER
257
Capabilities-Exchange-Answer
CEA
257
Device-Watchdog-Request
DWR
280
Device-Watchdog-Answer
DWA
280
Disconnect-Peer-Request
DPR
282
Disconnect-Peer-Answer
DPA
282
Re-Auth-Request
RAR
258
Re-Auth-Answer
RAA
258
Session-Termination-Request
STR
275
Session-Termination-Answer
STA
275
Dvojice hodnot atributů (anglicky Attribute-Value Pairs, AVP)
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| AVP kód |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|V M P r r r r r| AVP délka |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ID-výrobce (volitelné) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data ...
+-+-+-+-+-+-+-+-+

Jméno atributu
Kód
Datový typ
Acct-Interim-Interval
85
Unsigned32
Accounting-Realtime-Required
483
Enumerated
Acct-Multi-Session-Id
50
UTF8String
Accounting-Record-Number
485
Unsigned32
Accounting-Record-Type
480
Enumerated
Accounting-Session-Id
44
OctetString
Accounting-Sub-Session-Id
287
Unsigned64
Acct-Application-Id
259
Unsigned32
Auth-Application-Id
258
Unsigned32
Auth-Request-Type
274
Enumerated
Authorization-Lifetime
291
Unsigned32
Auth-Grace-Period
276
Unsigned32
Auth-Session-State
277
Enumerated
Re-Auth-Request-Type
285
Enumerated
Class
25
OctetString
Destination-Host
293
DiamIdent
Destination-Realm
283
DiamIdent
Disconnect-Cause
273
Enumerated
E2E-Sequence
300
Grouped
Error-Message
281
UTF8String
Error-Reporting-Host
294
DiamIdent
Event-Timestamp
55
Time
Experimental-Result
297
Grouped
Experimental-Result-Code
298
Unsigned32
Failed-AVP
279
Grouped
Firmware-Revision
267
Unsigned32
Host-IP-Address
257
Address
Inband-Security-Id
299
Unsigned32
Multi-Round-Time-Out
272
Unsigned32
Origin-Host
264
DiamIdent
Origin-Realm
296
DiamIdent
Origin-State-Id
278
Unsigned32
Product-Name
269
UTF8String
Proxy-Host
280
DiamIdent
Proxy-Info
284
Grouped
Proxy-State
33
OctetString
Redirect-Host
292
DiamURI
Redirect-Host-Usage
261
Enumerated
Redirect-Max-Cache-Time
262
Unsigned32
Result-Code
268
Unsigned32
Route-Record
282
DiamIdent
Session-Id
263
UTF8String
Session-Timeout
27
Unsigned32
Session-Binding
270
Unsigned32
Session-Server-Failover
271
Enumerated
Supported-Vendor-Id
265
Unsigned32
Termination-Cause
295
Enumerated
User-Name
1
UTF8String
Vendor-Id
266
Unsigned32
Vendor-Specific-Application-Id
260
Grouped