Oi Embora mensageiros e redes sociais estejam excluindo os métodos tradicionais de comunicação todos os dias, isso não diminui a popularidade do SMS. A verificação em um site popular ou a notificação de transação demonstra que eles vivem e viverão. Você já se perguntou como tudo isso funciona? Muitas vezes, o SMPP é usado para enviar mensagens em massa, que serão discutidas sob o gato.
Já havia artigos no Habr sobre smpp,
1 ,
2 , mas seu objetivo não era descrever o protocolo em si. Claro, você pode começar imediatamente com a fonte primária - a
especificação , mas acho que seria bom ter um breve resumo. Vou explicar com um exemplo v3.4. Fico feliz em suas críticas objetivas.
O SMPP é um protocolo de mensagens ponto a ponto. Isso significa que cada servidor ponto / hub é igual. No caso mais simples, o esquema de mensagens SMS fica assim:

No entanto, se o operador nacional não tiver uma rota para alguma região remota, ele solicita esse hub intermediário - SMS. Às vezes, para enviar um SMS, você precisa criar uma cadeia entre vários países ou mesmo continentes.
Sobre o protocolo
O SMPP é um protocolo da camada de aplicativo baseado na troca de
PDU e transmitido por sessões TCP / IP ou X25 para o envio de mensagens sms e ussd. Normalmente, o SMPP é usado no modo de conexão constante, o que ajuda a economizar tempo. O SMPP usa um modelo de comunicação cliente-servidor.
Modo de comunicação

A troca de mensagens entre o remetente e o
SMSC via SMPP pode ser realizada nos seguintes modos:
Transmissor (transmissor) - transmissão de uma mensagem em uma direção, alternadamente
Receptor (receptor) - recebe apenas mensagens do SMSC.
Transreceiver (transceptor) - Mensagens entre SMSC e usuário
Estrutura

Comprimento da mensagem
Uma mensagem SMS pode conter 70 caracteres ao digitar em cirílico e não mais que 157 caracteres latinos + 3
UDH se enviados. SMS com um grande número de caracteres, ele será dividido em vários segmentos e combinado no dispositivo receptor. No caso de segmentação, o número de caracteres é reduzido devido aos cabeçalhos da mensagem em que a parte da mensagem é indicada. Portanto, ao enviar uma mensagem SMS grande, ela contém no máximo 153 caracteres latinos ou 67 caracteres atípicos.
Esquema de codificação de dados
No entanto, os caracteres devem ser codificados para transmitir uma mensagem. No protocolo SMPP, um campo especial é responsável pela codificação - Data Coding Scheme, ou DCS. Este é um campo que indica como as mensagens devem ser reconhecidas. Além disso, o campo DCS inclui:
- o conjunto de caracteres que define a codificação;
- mensagem de classe;
- solicitação de exclusão automática após a leitura;
- indicação de compactação de mensagem;
- idioma de transmissão;
Alfabeto padrão de 7 bits (GSM 03.38). Foi desenvolvido para o sistema de mensagens GSM. Essa codificação é adequada para inglês e algumas línguas latinas. Cada caractere consiste em 7 bits e é codificado em um octeto.
UTF-16 (no GSM UCS2) Para incluir caracteres ausentes na codificação de 7 bits, foi desenvolvida a codificação UTF-16 que adiciona caracteres adicionais (incluindo cirílico) ao reduzir o tamanho da mensagem de 160 para 70, esse tipo de codificação repete quase completamente Unicode
Dados definidos pelo usuário de 8 bits. Isso inclui o KOI8-R e o Windows-1251. Embora essa solução pareça ser mais econômica em comparação com o mesmo UTF-1, para usar essas codificações, é necessária uma configuração preliminar nos dispositivos de recebimento e transmissão. Se em alguns deles os dados de codificação não forem suportados, a mensagem não será exibida corretamente. Como nesse caso, os dois dispositivos devem ser configurados com antecedência.
Mensagens de classe
- Classe 0, ou flash, uma mensagem armazenada na memória do telefone, a pedido do usuário;
- Class1, ou aqueles armazenados no telefone;
- Classe 2, deve garantir que a mensagem seja armazenada na memória do terminal móvel; caso contrário, deve enviar alertas SMSC sobre a incapacidade de salvar;
- Classe 3 - nesse caso, o telefone deve enviar uma notificação de que a mensagem pode ser salva, independentemente da quantidade de memória no dispositivo. Este tipo de mensagem implica que a mensagem atingiu seu destino;
Tipo de mensagem
Mensagem silenciosa (SMS0) Tipo de mensagem SMS sem conteúdo. Esse SMS é enviado sem aviso prévio e não é exibido na tela do dispositivo.
PDU
Cada operação do pdu é emparelhada e consiste em uma solicitação e uma resposta. Por exemplo: um comando que diz sobre o estabelecimento de uma conexão (bind_transmitter / bind_transmitter_resp) ou que a mensagem foi transmitida (deliver_sm / deliver_sm_resp)

Cada pacote pdu consiste em duas partes - um cabeçalho e um corpo. A estrutura do cabeçalho é a mesma para qualquer pacote pdu: tamanho do comando é o tamanho do pacote, id é o nome do pacote e o comando status mostra uma mensagem transmitida com sucesso ou com erro.
Opções avançadas de TLV
TLV (Tag Length Value) ou campos opcionais. Tais parâmetros são usados para estender as funções do protocolo e não são necessários. Este campo é indicado no final do campo pdu. Como exemplo, usando TLV dest_addr_np_information, você pode organizar a transferência de informações sobre como portar um número.
Ton e Npi
O parâmetro TON (Type of Number) informa o SMSC sobre o formato de endereçamento e o tipo de rede.
Parâmetro NPI (Identificação do plano de numeração) indicando o plano de numeração.

Endereço de origem da mensagem ou nome alfa
As mensagens enviadas para o telefone são fornecidas em duas variedades: digital e alfabética. O digital pode ser longo (semelhante a um número de telefone) e curto. Às vezes, os operadores têm restrições ao envio de nomes neutros, por exemplo, informações, alertas etc. Às vezes, as operadoras não permitem tráfego se o nome não estiver registrado em sua rede. No entanto, são as características do operador.
Fases de envio
SMS-SUBMIT está enviando uma mensagem MO FSM (mensagem curta de um terminal móvel)
RELATÓRIO DE ENVIO DE SMS - confirmação de que a mensagem foi enviada por SMSC
SRI SM (SendRoutingInfo) - O SMSC recebe informações do HLR sobre o MSC / VLR da localização do assinante
SRI SM RESP - resposta do HLR em relação à carne de posição do assinante
MT-FSM - após receber o local, uma mensagem é enviada usando a operação "Encaminhar mensagem curta"
MT-FSM ACK - resposta do SMSC de que uma mensagem foi enviada
RELATÓRIO DE STATUS SMS - O SMSC envia o status de entrega da mensagem.
Status de entrega da mensagem
O RELATÓRIO DE STATUS DO SMS pode assumir vários valores:
Mensagem
ENTREGUE entregue com sucesso
REJECTD - mensagem rejeitada pelo centro de SMS
EXPIRED - a mensagem é removida da fila de envio após o final do TTL (vida útil da mensagem)
UNDELIV - outros casos de não entrega
DESCONHECIDO - nenhuma resposta de envio recebida.
Erros de transmissão
Às vezes, as mensagens não são entregues. Como resultado, ocorrem erros. Os erros são retornados para PDUs_sms_resp. Todos os erros podem ser divididos em temporário (temporário) e permanente (permanente).
Como exemplo, os temporários são absent_subscriber, o assinante não está disponível ou offline e o assinante permanente não existe. Dependendo dos erros que ocorrem, uma política para encaminhar essas mensagens é formada.
Por exemplo, se um assinante estava ocupado conversando e recebeu um erro de telefone móvel ocupado, a mensagem pode ser enviada novamente em alguns minutos; no entanto, se o assinante tiver um serviço de mensagens bloqueadas, o reenvio não fará sentido. Você pode encontrar a lista de erros nas páginas SMSC, por exemplo, assim.