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 v roamingu.
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 6733. Určuje minimální požadavky AAA protokolu. Aplikace Diameteru (anglicky Diameter 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 |