BroadNet
DIAMETERFormato del messaggio

AVP DIAMETER, tipi di dato e Result-Code

Aggiornato il 5 min di letturaBasato su standard
Risposta diretta

Gli AVP (Attribute-Value Pair) trasportano tutti i dati DIAMETER. Ciascuno ha un AVP Code, un ottetto di flag (V vendor, M mandatory, P riservato), una length, un Vendor-Id opzionale e un valore tipizzato. I valori usano tipi di base come Unsigned32, OctetString, Address, Time, Enumerated e Grouped. Gli AVP Result-Code ed Experimental-Result riportano gli esiti.

§01

Struttura dell'AVP

Ogni elemento di dato DIAMETER — identità, campi di sottoscrizione, quote, esiti — è codificato come AVP. Un AVP inizia con un AVP Code a 32 bit, poi un ottetto di flag, una length a 24 bit che copre l'intero AVP, un Vendor-Id opzionale a 32 bit e il valore riempito fino a un confine di 4 ottetti. L'AVP Code da solo è univoco nello spazio gestito dall'IETF; quando il flag V (Vendor-Specific) è impostato il code viene invece interpretato nello spazio di numerazione del Vendor-Id che segue — è così che 3GPP (Vendor-Id 10415) definisce le centinaia di AVP usati da S6a, Gx e Cx senza collidere con il protocollo di base.

Formato AVP RFC 6733text
0                   1                   2                   3
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         AVP Code (32)                      |
| V M P r r r r r|                AVP Length (24)            |
|              Vendor-Id (32)  — present only if V=1          |
|    Data ...  (padded to a 4-octet boundary)                |
§02

I flag V, M e P

Tre flag dell'AVP governano il modo in cui un ricevente deve trattare l'AVP. V (Vendor-Specific) segnala che segue un Vendor-Id e che l'AVP Code appartiene allo spazio di quel vendor. M (Mandatory) è quello importante: se M è impostato e il ricevente non comprende l'AVP, deve rifiutare l'intero messaggio con DIAMETER_AVP_UNSUPPORTED (5001) — quindi impostare M erroneamente rompe l'interlavoro, e gli AVP vendor che un'implementazione può ignorare in sicurezza vengono inviati con M azzerato. P era originariamente un marcatore di sicurezza end-to-end; la RFC 6733 ne ha deprecato l'uso e il bit è ora riservato e impostato a zero.

Bit di flag AVP
FlagNomeSignificato quando impostato
VVendor-SpecificÈ presente un campo Vendor-Id; il codice si trova nello spazio di quel vendor
MObbligatorioIl destinatario deve comprenderlo o rifiutare il messaggio (5001)
P(riservato)Precedentemente sicurezza end-to-end; deprecata da RFC 6733, impostata a 0
§03

Tipi di dato di base

I valori degli AVP sono fortemente tipizzati. La RFC 6733 definisce un insieme di tipi di base e diversi tipi derivati costruiti a partire da OctetString. I tipi Integer e unsigned trasportano contatori, identificatori ed enumerazioni; OctetString trasporta dati binari opachi o strutturati; e i tipi derivati aggiungono una semantica che un'implementazione può validare. Address codifica un indirizzo IP con una famiglia di indirizzi iniziale di due ottetti. Time è un conteggio di secondi in stile NTP a 32 bit. Enumerated è un Integer32 i cui valori sono nominati dall'applicazione. DiameterIdentity e DiameterURI trasportano FQDN e URI dei peer.

Tipi di dato AVP DIAMETER comuni
TipoCodificaUso tipico
Unsigned32 / Integer32Intero a 32 bitContatori, quote, Auth-Application-Id, Result-Code
Unsigned64 / Integer64Intero a 64 bitVolumi in ottetti, contatori grandi
OctetStringOttetti opachiPayload binari (vettori di autenticazione, TPDU)
UTF8StringOctetStringTesto leggibile dall'uomo (User-Name, nome del prodotto)
EnumeratedInteger32Insiemi di valori denominati (ad es. RAT-Type, CC-Request-Type)
AddressOctetString + famigliaIndirizzi IPv4/IPv6 (Host-IP-Address, Framed-IP)
OraUnsigned32Secondi dal 1900 (Event-Timestamp)
DiameterIdentityOctetStringFQDN Peer (Origin-Host, Destination-Host)
GroupedAVP annidatiAVP che contengono altri AVP
§04

AVP Grouped

Un AVP Grouped ha come valore un elenco concatenato di altri AVP — così i record strutturati si annidano in modo pulito senza nuove regole sul filo. Subscription-Data in S6a, Charging-Rule-Install in Gx ed Experimental-Result trasportano tutti sub-AVP all'interno di un gruppo. Il raggruppamento è ricorsivo: un AVP Grouped può contenere ulteriori AVP Grouped, ed è così che un profilo di sottoscrizione LTE completo o un insieme di regole PCC viene espresso come un unico AVP di primo livello. Ogni AVP contenuto conserva il proprio code, flag e length, quindi un ricevente analizza il gruppo con lo stesso meccanismo che usa al livello superiore.

§05

Result-Code ed Experimental-Result

DIAMETER riporta l'esito di una richiesta nella risposta. L'AVP Result-Code di base (code 268) è un Unsigned32 raggruppato in intervalli per cifra iniziale: 1xxx informativo, 2xxx successo, 3xxx errori di protocollo (da un proxy/relay), 4xxx guasti transitori che il client può ritentare, e 5xxx guasti permanenti. Quando un'applicazione necessita di un errore vendor-specific che il Result-Code di base non può esprimere, usa l'AVP Experimental-Result (code 297) — un AVP Grouped che trasporta un Vendor-Id più un Experimental-Result-Code — ed è così che 3GPP segnala errori come DIAMETER_ERROR_USER_UNKNOWN o DIAMETER_ERROR_ROAMING_NOT_ALLOWED.

Intervalli di Result-Code e valori comuni
IntervalloClasseEsempio
1xxxInformativo1001 DIAMETER_MULTI_ROUND_AUTH
2xxxSuccesso2001 DIAMETER_SUCCESS
3xxxErrore di protocollo (proxy)3002 UNABLE_TO_DELIVER, 3007 APPLICATION_UNSUPPORTED
4xxxErrore temporaneo (riprova)4181 AUTHENTICATION_DATA_UNAVAILABLE (3GPP)
5xxxErrore permanente5001 AVP_UNSUPPORTED, 5012 UNABLE_TO_COMPLY
FAQ

Domande frequenti

Che cos'è un AVP in DIAMETER?

Un AVP (Attribute-Value Pair) è l'unità di dato in ogni messaggio DIAMETER. Trasporta un AVP Code, un ottetto di flag (V, M, P), una length, un Vendor-Id opzionale e un valore tipizzato. Tutte le identità, i campi di sottoscrizione, le quote e gli esiti sono codificati come AVP, e un messaggio è un header seguito da un elenco di essi.

Cosa fa il flag M (Mandatory)?

Se il flag M è impostato e il ricevente non comprende quell'AVP, deve rifiutare l'intero messaggio con DIAMETER_AVP_UNSUPPORTED (5001). Gli AVP che un peer può ignorare in sicurezza vengono quindi inviati con M azzerato. L'uso errato del bit M è una causa comune di fallimenti di interlavoro tra vendor.

Che cos'è un AVP Grouped?

Un AVP Grouped è un AVP il cui valore è a sua volta un elenco di AVP, che consente l'annidamento di record strutturati. Subscription-Data, Charging-Rule-Install ed Experimental-Result sono AVP Grouped. Il raggruppamento è ricorsivo, quindi un profilo di sottoscrizione LTE completo o un insieme di regole PCC può essere trasportato come un unico AVP di primo livello.

Come vengono identificati gli AVP vendor-specific?

Dal flag V più un campo Vendor-Id. Quando V è impostato, un Vendor-Id a 32 bit segue la length e l'AVP Code viene interpretato nello spazio di numerazione di quel vendor. 3GPP usa il Vendor-Id 10415 per definire gli AVP di S6a, Gx, Cx e le altre interfacce applicative.

Qual è la differenza tra Result-Code ed Experimental-Result?

Result-Code (AVP 268) trasporta i codici di esito IETF di base raggruppati come 1xxx/2xxx/3xxx/4xxx/5xxx. Experimental-Result (AVP 297) è un AVP Grouped con un Vendor-Id e un Experimental-Result-Code, usato quando un'applicazione necessita di un errore vendor-specific come il DIAMETER_ERROR_USER_UNKNOWN di 3GPP.

Cosa significano gli intervalli di result-code DIAMETER?

1xxx è informativo, 2xxx è successo (2001 DIAMETER_SUCCESS), 3xxx è un errore di protocollo generalmente sollevato da un proxy, 4xxx è un guasto transitorio che il client può ritentare, e 5xxx è un guasto permanente. La cifra iniziale indica al client se ritentare, fallire o reinstradare.

Riferimenti

Specifiche della fonte

Gli standard pubblicati su cui si basa questa pagina. Si apre in una nuova scheda.

BNGestito dal team di ingegneri BroadNet·Servizi di messaggistica di livello carrier dal 2003
Mettilo sul filo

Realizzato con un vero binding SMPP e un'API REST.

Richiedi l'accesso di prova con chiavi di test reali: invia prima al tuo numero verificato, poi passa alla produzione in oltre 200 paesi una volta approvata l'identità del mittente e i percorsi.