stringtranslate.com

Mensaje corto punto a punto

Short Message Peer-to-Peer ( SMPP ) en la industria de las telecomunicaciones es un protocolo abierto estándar de la industria diseñado para proporcionar una interfaz de comunicación de datos flexible para la transferencia de datos de mensajes cortos [1] entre entidades externas de mensajería corta (ESME) y entidades de enrutamiento. (RE) y SMSC . [2]

SMPP se utiliza a menudo para permitir que terceros (por ejemplo, proveedores de servicios de valor añadido, como organizaciones de noticias) envíen mensajes, a menudo de forma masiva, pero también se puede utilizar para el emparejamiento de SMS. SMPP puede transmitir mensajes cortos , incluidos EMS , notificaciones de correo de voz , transmisiones celulares , mensajes WAP , incluidos mensajes WAP Push (utilizados para entregar notificaciones MMS ), mensajes USSD y otros. Debido a su versatilidad y soporte para protocolos SMS no GSM , como UMTS , IS-95 (CDMA), CDMA2000 , ANSI-136 (TDMA) e iDEN , SMPP es el protocolo más comúnmente utilizado para el intercambio de mensajes cortos fuera de las redes SS7 .

Historia

SMPP (Short Message Peer-to-Peer) fue diseñado originalmente por Aldiscon , una pequeña empresa irlandesa que luego fue adquirida por Logica (desde 2016, después de una serie de cambios Mavenir ). El protocolo fue creado originalmente por un desarrollador, Ian J Chambers, para probar la funcionalidad del SMSC sin utilizar el equipo de prueba SS7 para enviar mensajes.

En 1995 el ETSI incluyó el protocolo SMPP en el informe técnico TR 03.39. [3]

En 1999, Logica entregó formalmente SMPP al SMPP Developers Forum, más tarde rebautizado como The SMS Forum.

El SMS Forum se disolvió en 2007, con este anuncio: "El SMS Forum, una organización sin fines de lucro con la misión de desarrollar, fomentar y promover SMS (servicio de mensajes cortos) en beneficio de la industria inalámbrica global, se disolverá el 27 de julio. 2007." [4] Como parte de los términos de traspaso originales, la propiedad del SMPP volvió a Mavenir.

Operación

SMPP utiliza el modelo de operación cliente-servidor , a pesar de que el nombre dice "peer-to-peer". El Centro de Servicios de Mensajes Cortos (SMSC) suele actuar como servidor, a la espera de conexiones de las ESME. Cuando se utiliza SMPP para el emparejamiento de SMS, el MC emisor suele actuar como cliente.

El protocolo se basa en pares de PDU ( unidades de datos de protocolo o paquetes) de solicitud/respuesta intercambiadas a través de conexiones OSI de capa 4 ( sesión TCP o X.25 SVC3). [5] El puerto bien conocido asignado por la IANA para SMPP cuando se opera sobre TCP es 2775, pero a menudo se utilizan múltiples números de puerto arbitrarios en entornos de mensajería.

Antes de intercambiar cualquier mensaje, se debe enviar y confirmar un comando de vinculación. El comando de vinculación determina en qué dirección será posible enviar mensajes; bind_transmitter solo permite que el cliente envíe mensajes al servidor, bind_receiver significa que el cliente solo recibirá los mensajes y bind_transceiver (introducido en SMPP 3.4) permite la transferencia de mensajes en ambas direcciones. [6] En el comando de vinculación, la ESME se identifica usando system_id, system_type y contraseña; El campo Address_range diseñado para contener la dirección ESME generalmente se deja vacío. El comando de vinculación contiene el parámetro interface_version para especificar qué versión del protocolo SMPP se utilizará.

El intercambio de mensajes puede ser sincrónico, donde cada par espera una respuesta para cada PDU que se envía, o asincrónico, donde se pueden emitir múltiples solicitudes sin esperar y ser confirmadas en un orden sesgado por el otro par; el número de solicitudes no reconocidas se denomina ventana ; Para obtener el mejor rendimiento, ambos lados comunicantes deben configurarse con el mismo tamaño de ventana.

Versiones

El estándar SMPP ha evolucionado a lo largo del tiempo. Las versiones de SMPP más utilizadas son:

La versión aplicable se pasa en el parámetro interface_version de un comando de vinculación.

Formato PDU (después de la versión 3.4)

Las PDU SMPP están codificadas en binario para mayor eficiencia. Comienzan con un encabezado al que puede seguir un cuerpo:

encabezado de PDU

Cada PDU comienza con un encabezado. El encabezado consta de 4 campos, cada uno de 4 octetos de longitud:

command_length
Es la longitud total de la PDU en octetos (incluido el propio campo command_length); debe ser ≥ 16 ya que cada PDU debe contener el encabezado de 16 octetos
command_id
Identifica la operación (o comando) SMPP. Si se borra el bit más significativo, se trata de una operación de solicitud. De lo contrario es una respuesta.
command_status
Siempre tiene un valor de 0 en las solicitudes; en las respuestas lleva información sobre el resultado de la operación.
sequence_number
Se utiliza para correlacionar solicitudes y respuestas dentro de una sesión SMPP; permite la comunicación asincrónica (usando un método de ventana deslizante )

Todos los campos numéricos en SMPP utilizan el orden big endian , lo que significa que el primer octeto es el byte más significativo (MSB).

Ejemplo

Este es un ejemplo de codificación binaria de una PDU submit_sm de 60 octetos . Los datos se muestran en valores de octeto hexadecimal como un volcado único y seguido de un desglose del encabezado y el cuerpo de esa PDU.

Esto se compara mejor con la definición de la PDU submit_sm de la especificación SMPP para comprender cómo la codificación coincide con la definición campo por campo.

Los desgloses de valores se muestran con decimales entre paréntesis y valores hexadecimales después. Cuando ve uno o varios octetos hexadecimales añadidos, esto se debe a que el tamaño de campo dado utiliza codificación de 1 o más octetos.

Nuevamente, leer la definición de PDU submit_sm de la especificación aclarará todo esto.

encabezado de PDU

'longitud_comando', (60) ... 00 00 00 3C'id_comando', (4) ... 00 00 00 04'estado_comando', (0) ... 00 00 00 00'número_secuencia', (5) ... 00 00 00 05

cuerpo de la PDU

'tipo_servicio', () ... 00'fuente_addr_ton', (2) ... 02'source_addr_npi ' , (8) ... 08'dirección_fuente', (555) ... 35 35 35 00'dest_addr_ton', (1) ... 01'dest_addr_ npi ', (1) ... 01'dest_addr', (555555555) ... 35 35 35 35 35 35 35 35 35 00'clase_esm', (0) ... 00'protocolo_id', (0) ... 00'bandera_prioridad', (0) ... 00'horario_entrega_hora', (0) ... 00'periodo_validez', (0) ... 00'entrega_registrada', (0) ... 00'reemplazar_si_presente_flag', (0) ... 00'codificación_datos', (3) ... 03'sm_default_msg_id', (0) ... 00'pequeña_longitud', (15) ... 0F'mensaje_corto', (Hola Wikipedia)... 48 65 6C 6C 6F 20 57 69 6B 69 70 65 64 69 61

Tenga en cuenta que el texto en el campo short_message debe coincidir con el data_coding. Cuando el data_coding es 8 (UCS2), el texto debe estar en UCS-2BE (o su extensión, UTF-16BE ). Cuando data_coding indica una codificación de 7 bits, cada septeto se almacena en un octeto separado en el campo short_message (con el bit más significativo establecido en 0). SMPP 3.3 data_coding copió exactamente los valores TP-DCS de GSM 03.38 , lo que lo hace adecuado solo para mensajes GSM predeterminados de 7 bits, UCS2 o binarios; SMPP 3.4 introdujo una nueva lista de valores de codificación de datos:

El significado de data_coding=4o 8es el mismo que en SMPP 3.3. Otros valores en el rango 1-15 están reservados en SMPP 3.3. Desafortunadamente, a diferencia de SMPP 3.3, donde data_coding=0 era inequívocamente el alfabeto GSM predeterminado de 7 bits, para SMPP 3.4 y superiores el alfabeto GSM predeterminado de 7 bits no está en esta lista y data_coding=0puede diferir para varios centros de servicios de mensajes cortos ; puede ser ISO-8859-1 , ASCII , alfabeto predeterminado GSM de 7 bits, UTF-8 o incluso configurable por ESME. Al utilizar data_coding=0, ambas partes (ESME y SMSC) deben asegurarse de considerarlo la misma codificación. De lo contrario es mejor no usarlo data_coding=0. Puede resultar complicado utilizar el alfabeto GSM predeterminado de 7 bits; algunos centros de servicios de mensajes cortos lo requieren data_coding=0, otros, por ejemplo data_coding=241.

peculiaridades

A pesar de su amplia aceptación, el SMPP tiene una serie de características problemáticas:

Sin codificación de datos para el alfabeto predeterminado GSM de 7 bits

Aunque el valor de codificación de datos en SMPP 3.3 se basa en GSM 03.38 , desde SMPP 3.4 no hay ningún valor de codificación de datos para el alfabeto GSM de 7 bits ( GSM 03.38 ). Sin embargo, es común que DCS=0 indique el alfabeto GSM de 7 bits, particularmente para conexiones SMPP a SMSC en redes móviles GSM. Es aún más ambiguo si el alfabeto de 7 bits está empaquetado, como en GSM, lo que permite enviar 160 caracteres en 140 octetos, o si cada carácter de 7 bits ocupa un octeto completo (con el bit alto puesto a cero, como en ASCII). ).

Significado no estandarizado de data_coding=0

Según SMPP 3.4 y 5.0, data_coding=0significa "Alfabeto predeterminado de SMSC". La codificación real depende del tipo de SMSC y de su configuración.

Soporte poco claro para la codificación Shift-JIS

Una de las codificaciones del estándar CDMA C.R1001 es Shift-JIS, que se utiliza para el japonés. SMPP 3.4 y 5.0 especifica tres codificaciones para japonés (JIS, ISO-2022-JP y Extended Kanji JIS), pero ninguna de ellas es idéntica a CDMA MSG_ENCODING 00101. Parece que la codificación Pictogram (data_coding=9) se usa para transportar el mensajes en Shift-JIS en SMPP.

Incompatibilidad de submit_sm_resp entre versiones SMPP

Cuando falla submit_sm, el SMSC devuelve un submit_sm_respvalor distinto de cero de command_status y ″empty″ message_id.

Para obtener la mejor compatibilidad, cualquier implementación SMPP debe aceptar ambas variantes de negativo submit_sm_respindependientemente de la versión del estándar SMPP utilizado para la comunicación.

La intención original de los escenarios de error era que no se devolviera ningún cuerpo en la respuesta de la PDU. Este era el comportamiento estándar exhibido en todos los SMSC de Aldiscon/Logica y también en la mayoría de los demás proveedores. Cuando el foro WAP estaba adoptando SMPP 3.4, se solicitaron varias aclaraciones sobre si un cuerpo debería incluirse con una respuesta NACK y se tomaron medidas para aclarar esto en varios lugares de la especificación, incluida la submit_smsección y también en la bind_transceiversección. Lo que debería haberse hecho fue agregar la aclaración que finalmente agregamos en V5.0... de que se supone que los cuerpos no deben incluirse en las respuestas de error. Algunos proveedores han sido muy tontos en sus implementaciones, incluyendo organismos en las bind_transmitterrespuestas rechazadas pero no en bind_transceiverlas respuestas, etc. La recomendación que haría a los proveedores... como se sugirió anteriormente... acepten ambas variantes. Pero también es aconsejable permitirse emitir NACK submit_sm_respy deliver_sm_respPDU con y sin cuerpo vacío. En el caso de estas dos PDU, ese cuerpo vacío se verá como un único octeto NULL al final de la secuencia. La razón por la que es posible que necesite esta capacidad para incluir lo que yo llamo cuerpos ficticios con solicitudes NACKed es que el otro lado de la ecuación puede no poder o no querer cambiar su implementación para tolerar el cuerpo faltante. (Trabajé en tres versiones de la especificación SMPP en Aldiscon/Logica y diseñé la solución ESME para Openmind Networks)

-  Cormac Long [ Esta cita necesita una cita ]

ID de mensaje en SMPP 3.3 Recibos de entrega SMSC

La única forma de pasar recibos de entrega en SMPP 3.3 es colocar información en forma de texto en el short_messagecampo; sin embargo, el formato del texto se describe en el Apéndice B del SMPP 3.4, aunque el SMPP 3.4 puede (y debe) usar receipted_message_idTLV message_statepara este propósito. Mientras que SMPP 3.3 establece que el ID del mensaje es una cadena de octeto C (hexadecimal) de hasta 8 caracteres (más la terminación '\0'), la especificación SMPP 3.4 establece que el campo de identificación en el formato de recibo de entrega es una cadena de octeto C (Decimal) de hasta 10 caracteres. Esto divide las implementaciones de SMPP en 2 grupos:

Sin embargo, la especificación SMPP 3.4 establece que el formato del recibo de entrega es específico del proveedor de SMSC y, por lo tanto, el formato incluido en la especificación es simplemente una posibilidad. Como se señaló anteriormente, cuando se utiliza SMPP 3.4 receipted_message_idy message_statese deben utilizar TLV para transmitir el resultado de un mensaje.

Extensibilidad, compatibilidad e interoperabilidad

Desde la introducción de los parámetros TLV en la versión 3.4, el SMPP puede considerarse un protocolo extensible . Para lograr el mayor grado posible de compatibilidad e interoperabilidad, cualquier implementación debe aplicar el principio de solidez de Internet : "Sea conservador en lo que envía, sea liberal en lo que acepta". Debe utilizar un conjunto mínimo de funciones necesarias para realizar una tarea. Y si el objetivo es la comunicación y no las objeciones, cada implementación debe superar las no conformidades menores con el estándar:

La información aplicable a una versión de SMPP a menudo se puede encontrar en otra versión de SMPP, por ejemplo en el caso de SMPP 3.4 que describe el único mecanismo de recibos de entrega en SMPP 3.3 descrito anteriormente.

Seguridad

El protocolo SMPP está diseñado en un protocolo binario de texto claro que debe tenerse en cuenta si se utiliza para información potencialmente confidencial, como contraseñas de un solo uso a través de SMS. Sin embargo, existen implementaciones de SMPP sobre SSL/TLS si es necesario. [7]

Ver también

Referencias

  1. ^ "GSM 03.40 Realización técnica del Servicio de Mensajes Cortos (SMS)", 3GPP , 2003-12-03
  2. ^ "Especificación del protocolo punto a punto de mensajes cortos v5.0" (PDF) .
  3. ^ Friedhelm Hillebrand (2010). Servicio de mensajes cortos (SMS): la creación de mensajes de texto personales globales. Wiley . pag. 112.ISBN 978-0-470-68865-6.
  4. ^ "Página de inicio del foro de SMS". smsforum.net . Archivado desde el original el 22 de diciembre de 2007.
  5. ^ Neil Croft (2012). "Sobre la ciencia forense: un ataque silencioso por SMS". 2012 Seguridad de la información para Sudáfrica . IEEE . págs. 1–4. doi :10.1109/ISSA.2012.6320454. ISBN 978-1-4673-2159-4. ISSN  2330-9881. S2CID  13448347.
  6. ^ A. Henry-Labordère; Vicente Jonack (2004). Interfuncionamiento de SMS y MMS en redes móviles. Casa Artech . págs. 137-138. ISBN 1-58053-890-8.
  7. ^ "Protocolo seguro de igual a igual para mensajes cortos", Revista internacional de estudios de comercio electrónico, 2012

enlaces externos