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.
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.
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) |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.
| Flag | Nome | Significato quando impostato |
|---|---|---|
| V | Vendor-Specific | È presente un campo Vendor-Id; il codice si trova nello spazio di quel vendor |
| M | Obbligatorio | Il destinatario deve comprenderlo o rifiutare il messaggio (5001) |
| P | (riservato) | Precedentemente sicurezza end-to-end; deprecata da RFC 6733, impostata a 0 |
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.
| Tipo | Codifica | Uso tipico |
|---|---|---|
| Unsigned32 / Integer32 | Intero a 32 bit | Contatori, quote, Auth-Application-Id, Result-Code |
| Unsigned64 / Integer64 | Intero a 64 bit | Volumi in ottetti, contatori grandi |
| OctetString | Ottetti opachi | Payload binari (vettori di autenticazione, TPDU) |
| UTF8String | OctetString | Testo leggibile dall'uomo (User-Name, nome del prodotto) |
| Enumerated | Integer32 | Insiemi di valori denominati (ad es. RAT-Type, CC-Request-Type) |
| Address | OctetString + famiglia | Indirizzi IPv4/IPv6 (Host-IP-Address, Framed-IP) |
| Ora | Unsigned32 | Secondi dal 1900 (Event-Timestamp) |
| DiameterIdentity | OctetString | FQDN Peer (Origin-Host, Destination-Host) |
| Grouped | AVP annidati | AVP che contengono altri AVP |
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.
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.
| Intervallo | Classe | Esempio |
|---|---|---|
| 1xxx | Informativo | 1001 DIAMETER_MULTI_ROUND_AUTH |
| 2xxx | Successo | 2001 DIAMETER_SUCCESS |
| 3xxx | Errore di protocollo (proxy) | 3002 UNABLE_TO_DELIVER, 3007 APPLICATION_UNSUPPORTED |
| 4xxx | Errore temporaneo (riprova) | 4181 AUTHENTICATION_DATA_UNAVAILABLE (3GPP) |
| 5xxx | Errore permanente | 5001 AVP_UNSUPPORTED, 5012 UNABLE_TO_COMPLY |
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.
Specifiche della fonte
Gli standard pubblicati su cui si basa questa pagina. Si apre in una nuova scheda.