Zapiski 2016-2017 (povzetki RFC)

Tu boste pisali povzetke RFC-jev

RFC 3588 - Diameter

Povezava na RFC: https://tools.ietf.org/html/rfc3588

Uvod [uredi]

Diameter je AAA protokol ( skrbi za avtorizacijo, avtentikacijo in beleženje ). Deluje na aplikacijski plasti ISO/OSI modela, ter za svoje delovanje uporablja protokole TCP/SCTP oz. TLS/DTLS. Je naslednik AAA protokola RADIUS (RFC 2865), ki bazira na protokolu UDP.

Uporablja se pri storitvah kot so 3G, 4G in IMS za aplikacije dostopa do omrežja in mobilnosti. Ob uvedbi IP tehnologije v telekomunikacijskih omrežjih je bil Diameter izbran za AAA protokol v vseh fiksnih in mobilnih omrežjih, saj ponuja mnogo prednosti pred ostalimi (zastarelimi) AAA rešitvami in predstavlja temelj sistema EPS(Evolved Packet System) - omrežja, ki omogoča tehnologijo LTE.

Razvit je bil z namenom dodajanja funkcionalnosti, kot na primer: nadzor pravic, dinamična pravila, kakovost storitev(QoS), dodeljevanje pasovne širine ipd. Zaradi fleksibilnosti je Diameter možno razviti za rabo v specifičnih aplikacijah z dodajanjem novih ukazov oz. AVP-jev (več spodaj).
Določene funkcije, kot naprimer transakcije v realnem času v omrežju 4G je možno implementirati le s tem protokolom.


Glavne izboljšave nad predhodnikom RADIUS

Zanesljivost:

  • Medtem ko RADIUS poteka preko protokola UDP, ki je sam po sebi manj zanesljiv, Diameter uporablja zanesljivi prenosni medij TCP ali pa SCTP.

Varnost na nivoju prenosne plasti:

  • Za razliko od RADIUS-a je tukaj obvezna tajnost na nivoju paketa ( per packet confidentiality ), kar je zagotovljeno s protokoloma IPSec in TLS.

Fail-over mehanizmi:

  • RADIUS nima nikakršnega failover mehanizma ( zaradi rabe UDP-ja ), ki te funkcionalnosti ne podpira, medtem ko Diameter nudi potrditve na aplikacijski plasti, opisane v sledečih poglavjih.

Dogovarjanje o zmožnostih:

  • RADIUS ne podpira sporočil o napakah – ker se strežniki in klienti ne zavedajo zmožnosti drug drugega, obstaja možnost, da se ne bodo uspešno dogovorili o sprejemljivi skupni storitvi in v nekaterih primerih celo ugotovili, katere storitve so bile implementirane. Vse te funkcionalnosti Diameter podpira.

Fleksibilnost:

  • možna sočasna implementacija obeh protokolov, RADIUS in Diameter v enem omrežju,
  • možnost definiranja novih ukazov,
  • zagotovljeni pogoji za skaliranje (32-bitni naslovni prostor).

Odkrivanje vrstnikov:

  • Implementacija RADIUSA zahteva ročni vnos imen in naslovov strežnikov ter klientov, vključno s skupnimi skrivnostmi. To se izkaže kot veliko administrativno breme in pojavi se skušnjava po ponovni rabi že uporabljenih skupnih skrivnosti, kar lahko privede do velike varnostne luknje. Diameter preko DNS-ja omogoča dinamično odkrivanje vrstnikov, omenjene hibe odpravi. Več spodaj.

Podpora za agente:

  • RADIUS ne nudi podpore za agente "Proxy", "Relay", "Redirect" in podobne. Diameter jih podpira.

Delovanje [uredi]

Protokol za delovanje uporablja vrata 3868 za TCP/SCTP in 5868 za TLS/DTLS.
Temelji na izmenjavi sporočil – informacije se izmenjujejo po principu zahtevkov in odgovorov.

Izmenjava sporočil

Glava

 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Version | Message Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| command flags | Command-Code |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Application-ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Hop-by-Hop Identifier |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| End-to-End Identifier |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| AVPs ...
+-+-+-+-+-+-+-+-+-+-+-+-+-

Vsako sporočilo vsebuje glavo in podatke; v glavi se nahajajo sledeča polja:

Version: verzija protokola (trenutno edina podprta vrednost : 1)

Command Code: unikatni identifikator sporočila v aplikaciji


Command Flags (zastavice):

 0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+
|R P E T r r r r|
+-+-+-+-+-+-+-+-+
  • R (Request) bit: če 1 – zahtevek, sicer odgovor
  • P (Proxiable) bit: če 1 – sporočilo je lahko preusmerjeno, sicer ne
  • E (Error) bit: če 1 – sporočilo vsebuje napako
  • T (Potentially re-transmitted message) bit: služi odstranjevanju podvojenih zahtevkov
  • r (reserved) bit: rezerviran za uporabo v prihodnosti

Application ID: identifikator aplikacije

Hop-by-Hop ID: unikatni identifikator sporočila med dvema vozliščema

End-to-End ID: namenjen zaznavanju podvojenih sporočil

Length: dolžina glave + podatkov


AVP (Attribute-Value Pair)

V polju za podatke se nahajajo AVP-ji. To so enote, ki vsebujejo podatke za aplikacijo. Prav tako se delijo na razdelek glave in podatkov. AVP glava vsebuje sledeče:

AVP Code: identifikator AVP-ja (dodeli IANA)
AVP števila od 1 do 255 so rezervirana za združljivost z RADIUS strežniki, AVP števila od 256 naprej pa se uporabljajo za Diameter.
Nekaj primerov AVP Code-ov:

  • "Host-IP-Address AVP - AVP Code 257:" Obvesti Diameter peer o pošiljateljevem IP naslovu
  • "Firmware-Revision AVP - AVP Code 267:" Obvesti Diameter peer o firmware verziji naprave
  • "Disconnect-Cause AVP - AVP Code 273:" Diameter vozlišče mora to vključiti v Disconnect-Peer-Request sporočilo, da obvesti peer o razlogu za prekinitev transportne povezave
  • "Origin Host AVP - AVP Code 264:" AVP mora biti prisoten v vsakem Diameter sporočilu. Identificira končno točko, ki je izvor sporočila.
  • "Origin-Realm AVP - AVP Code 296:" AVP mora biti prisoten v vsakem Diameter sporočilu. Vsebuje Realm izvora sporočila.
  • "Destination-Host AVP - AVP Code 293:" Komu je namenjeno sporočilo. Če je to prazno se pošlje vsem Diameter strežnikom, ki so na voljo v Realmu, ki je specificiran v Destination-Realm AVPju
  • "Destination-Realm AVP - AVP Code 283:" Kateremu Realmu je namenjeno sporočilo. Priporočeno je da je to polje čim bližje glavi (header) sporočila.
  • "Routing AVPs:" Tukaj je vključenih več AVPjev ( AVP Code 282, 284, 280, 33, 258...), ki se ukvarjajo z usmerjanjem Diameter, ter RADIUS sporočil.

AVP Flag: zastavica: V(Vendor Specific), M (Mandatory), P (Protected)

Vendor ID: identifikator ponudnika ( če je postavljena zastavica V)

AVP Length: dolžina AVP glave + podatkov

V polju za podatke se nahajajo dejanski podatki. V njem se lahko nahajajo nadaljnji AVP-ji. AVP, v katerem je vsebovan še en AVP se imenuje Grouped AVP.


Povezava med vozlišči

Diameter izrablja funkcionalnost predhodnika, imenovano Peer Discovery over RADIUS, kjer vozlišče prvo vzpostavi povezavo prek TCP/SCTP in nato še povezavo Diameter s pomočjo rokovanja »Capability negotiation«. Tukaj gre za proces, kjer dve vozlišči ugotavljata, ali imata katere skupne aplikacije, ki bi med seboj komunicirali.
Nato nastopi Capability Exchange – izmenjevanje podatkov o aplikacijah.

Diameter protokol zapoveduje, da se med soležniki vzpostavita dve povezavi; primarna in sekundarna. Gre za zagotavljanje zanesljivosti - pri prekinitvi primarne povezave se uporabi sekundarna.


Pomožna Sporočila

Takoj ob vzpostavitvi povezave se med dvema vozliščema začnejo izmenjevati sporočila Device-Watchdog-Request/Answer. Služijo preverjanju »zdravja« povezave.
Vozlišče lahko zapre povezavo z drugim vozliščem tako, da pošlje zahtevek Disconnect-Peer-Request (DPR) z enim od sledečih razlogov: 1) Reboot, 2) Busy, 3) Do not want to talk to you.


Dodeljevanje vlog

Protokol posameznim agentom (aplikacijam) dodeljuje vloge. Te so:

Relay ( brez spreminjanja posreduj sporočilo )

Proxy ( pri posredovanju lahko spreminjaš sporočilo )

Redirect ( ne posreduj sporočila, vendar zagotovi informacijo o posredovanju )

Translator ( pretvori sporočilo Diameter v sporočilo RADIUS in obratno )

Ob vzpostavljeni povezavi naj bi vsako vozlišče vsebovalo dve tabeli:

Peer tabela: vsebuje informacije o identiteti vozlišč, neposredno povezanih na dotično vozlišče

Realm tabela: vsebuje informacije o usmerjevanju vozlišč, ki se nahajajo v Peer tabeli

Obe tabeli se uporabljata pri procesiranju, inicializaciji in posredovanju sporočil.
Vsak Diameter zahtevek naj bi naletel na odgovor (Answer message). Ta naj bi sledil isti poti, po kateri je prišel zahtevek in mora vsebovati ali Success ali pa Failure/Error sporočilo. Slednji se prav tako smatra kot odgovor.