BroadNet
DIAMETERFormato de mensaje

AVP, tipos de datos y Result-Code en DIAMETER

Actualizado el 5 min de lecturaBasado en estándares
Respuesta directa

Los AVP (Attribute-Value Pairs) portan todos los datos de DIAMETER. Cada uno tiene un AVP Code, un octeto de banderas (V vendor, M mandatory, P reservado), una longitud, un Vendor-Id opcional y un valor tipado. Los valores usan tipos base como Unsigned32, OctetString, Address, Time, Enumerated y Grouped. Los AVP Result-Code y Experimental-Result reportan los resultados.

§01

Estructura de un AVP

Cada pieza de datos DIAMETER —identidades, campos de suscripción, cuotas, resultados— se codifica como un AVP. Un AVP comienza con un AVP Code de 32 bits, luego un octeto de banderas, una longitud de 24 bits que cubre todo el AVP, un Vendor-Id opcional de 32 bits y el valor rellenado hasta un límite de 4 octetos. El AVP Code por sí solo es único dentro del espacio gestionado por el IETF; cuando la bandera V (Vendor-Specific) está activa, el código se interpreta en cambio dentro del espacio de numeración del Vendor-Id que sigue: así es como 3GPP (Vendor-Id 10415) define los cientos de AVP usados por S6a, Gx y Cx sin colisionar con el protocolo base.

Formato de 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

Las banderas V, M y P

Tres banderas de AVP gobiernan cómo debe tratar el AVP un receptor. V (Vendor-Specific) señala que sigue un Vendor-Id y que el AVP Code vive en el espacio de ese fabricante. M (Mandatory) es la importante: si M está activa y el receptor no entiende el AVP, debe rechazar todo el mensaje con DIAMETER_AVP_UNSUPPORTED (5001) —así que activar M erróneamente rompe la interoperabilidad, y los AVP de fabricante que una implementación puede ignorar con seguridad se envían con M a cero. P fue originalmente un marcador de seguridad extremo a extremo; RFC 6733 desaconsejó ese uso y el bit queda ahora reservado y a cero.

Bits de bandera del AVP
IndicadorNombreSignificado cuando se establece
VVendor-SpecificHay un campo Vendor-Id presente; el código está en el espacio de ese proveedor
MObligatorioEl receptor debe entenderlo o rechazar el mensaje (5001)
P(reservado)Anteriormente seguridad de extremo a extremo; obsoleto según RFC 6733, establecido en 0
§03

Tipos de datos base

Los valores de AVP están fuertemente tipados. RFC 6733 define un conjunto de tipos básicos y varios tipos derivados construidos a partir de OctetString. Los tipos entero y sin signo portan contadores, identificadores y enumeraciones; OctetString porta binario opaco o estructurado; y los tipos derivados añaden semántica que una implementación puede validar. Address codifica una dirección IP con una familia de direcciones de dos octetos por delante. Time es un contador de segundos de 32 bits al estilo NTP. Enumerated es un Integer32 cuyos valores nombra la aplicación. DiameterIdentity y DiameterURI portan FQDN de pares y URI.

Tipos de datos de AVP DIAMETER comunes
TipoCodificaciónUso típico
Unsigned32 / Integer32Entero de 32 bitsContadores, cuotas, Auth-Application-Id, Result-Code
Unsigned64 / Integer64Entero de 64 bitsVolúmenes de octetos, contadores grandes
OctetStringOctetos opacosCargas útiles binarias (vectores de autenticación, TPDU)
UTF8StringOctetStringTexto legible por humanos (User-Name, nombre del producto)
EnumeratedInteger32Conjuntos de valores con nombre (por ejemplo, RAT-Type, CC-Request-Type)
AddressOctetString + familiaDirecciones IPv4/IPv6 (Host-IP-Address, Framed-IP)
HoraUnsigned32Segundos desde 1900 (Event-Timestamp)
DiameterIdentityOctetStringFQDN del par (Origin-Host, Destination-Host)
GroupedAVP anidadosAVPs que contienen otros AVPs
§04

Grouped AVP

Un Grouped AVP tiene, como valor, una lista concatenada de otros AVP —de modo que los registros estructurados anidan limpiamente sin nuevas reglas de cable. Subscription-Data en S6a, Charging-Rule-Install en Gx y Experimental-Result portan todos sub-AVP dentro de un grupo. La agrupación es recursiva: un Grouped AVP puede contener otros Grouped AVP, que es como un perfil completo de suscripción LTE o un conjunto de reglas PCC se expresa como un único AVP de nivel superior. Cada AVP contenido conserva su propio código, banderas y longitud, así que un receptor analiza el grupo con la misma maquinaria que usa en el nivel superior.

§05

Result-Code y Experimental-Result

DIAMETER reporta el resultado de una petición en la respuesta. El AVP base Result-Code (código 268) es un Unsigned32 agrupado en rangos por el dígito inicial: 1xxx informativo, 2xxx éxito, 3xxx errores de protocolo (de un proxy/relay), 4xxx fallos transitorios que el cliente puede reintentar, y 5xxx fallos permanentes. Cuando una aplicación necesita un error específico de fabricante que el Result-Code base no puede expresar, usa el AVP Experimental-Result (código 297) —un Grouped AVP que porta un Vendor-Id más un Experimental-Result-Code— que es como 3GPP señala errores como DIAMETER_ERROR_USER_UNKNOWN o DIAMETER_ERROR_ROAMING_NOT_ALLOWED.

Rangos de Result-Code y valores comunes
RangoClaseEjemplo
1xxxInformativo1001 DIAMETER_MULTI_ROUND_AUTH
2xxxÉxito2001 DIAMETER_SUCCESS
3xxxError de protocolo (proxy)3002 UNABLE_TO_DELIVER, 3007 APPLICATION_UNSUPPORTED
4xxxFallo transitorio (reintentar)4181 AUTHENTICATION_DATA_UNAVAILABLE (3GPP)
5xxxFallo permanente5001 AVP_UNSUPPORTED, 5012 UNABLE_TO_COMPLY
Preguntas frecuentes

Preguntas frecuentes

¿Qué es un AVP en DIAMETER?

Un AVP (Attribute-Value Pair) es la unidad de datos de todo mensaje DIAMETER. Porta un AVP Code, un octeto de banderas (V, M, P), una longitud, un Vendor-Id opcional y un valor tipado. Todas las identidades, campos de suscripción, cuotas y resultados se codifican como AVP, y un mensaje es una cabecera seguida de una lista de ellos.

¿Qué hace la bandera M (Mandatory)?

Si la bandera M está activa y el receptor no entiende ese AVP, debe rechazar todo el mensaje con DIAMETER_AVP_UNSUPPORTED (5001). Por eso los AVP que un par puede ignorar con seguridad se envían con M a cero. Usar mal el bit M es una causa habitual de fallos de interoperabilidad entre fabricantes.

¿Qué es un Grouped AVP?

Un Grouped AVP es un AVP cuyo valor es a su vez una lista de AVP, lo que permite anidar registros estructurados. Subscription-Data, Charging-Rule-Install y Experimental-Result son Grouped AVP. La agrupación es recursiva, así que un perfil completo de suscripción LTE o un conjunto de reglas PCC puede portarse como un único AVP de nivel superior.

¿Cómo se identifican los AVP específicos de fabricante?

Por la bandera V más un campo Vendor-Id. Cuando V está activa, un Vendor-Id de 32 bits sigue a la longitud y el AVP Code se interpreta dentro del espacio de numeración de ese fabricante. 3GPP usa el Vendor-Id 10415 para definir los AVP de S6a, Gx, Cx y las demás interfaces de aplicación.

¿Cuál es la diferencia entre Result-Code y Experimental-Result?

Result-Code (AVP 268) porta los códigos de resultado base del IETF agrupados como 1xxx/2xxx/3xxx/4xxx/5xxx. Experimental-Result (AVP 297) es un Grouped AVP con un Vendor-Id y un Experimental-Result-Code, usado cuando una aplicación necesita un error específico de fabricante como el DIAMETER_ERROR_USER_UNKNOWN de 3GPP.

¿Qué significan los rangos de result-code de DIAMETER?

1xxx es informativo, 2xxx es éxito (2001 DIAMETER_SUCCESS), 3xxx es un error de protocolo normalmente generado por un proxy, 4xxx es un fallo transitorio que el cliente puede reintentar, y 5xxx es un fallo permanente. El dígito inicial le dice al cliente si debe reintentar, fallar o redirigir.

Referencias

Especificaciones de la fuente

Las normas publicadas en las que se basa esta página. Se abre en una pestaña nueva.

BNMantenido por el equipo de ingeniería BroadNet·Mensajería de nivel empresarial desde 2003.
Colócalo en el cable

Desarrollado con un enlace SMPP real y una API REST.

Solicita acceso de prueba con claves de prueba reales: primero envía a tu propio número verificado y, una vez aprobada tu identidad de remitente y las rutas, pasa a producción en más de 200 países.