O BaseUDP é um protocolo de rede que permite a transmissão eficiente e escalável de mensagens de dados em um cenário de "um transmissor para muitos receptores". O BaseUDP é uma camada de protocolo leve, construída sobre UDP, que oferece aos receptores um mecanismo para detectar pacotes perdidos e solicitar sua retransmissão.
No BaseUDP, cada pacote de saída é transmitido uma única vez, independentemente do número de receptores. Várias mensagens também podem ser agregadas em um único pacote de rede, para reduzir o tráfego. Servidores de Retransmissão (Re-request Servers) com cache podem, opcionalmente, ser instalados próximos a receptores remotos para reduzir a latência e o consumo de banda em links WAN.
Este documento descreve as mensagens trocadas entre um servidor BaseUDP e seus clientes. Os transmissores BaseUDP enviam pacotes Downstream via UDP multicast para transportar o fluxo normal de dados destinado aos receptores. Esses pacotes também são enviados via UDP unicast em resposta a uma mensagem de Solicitação (Request) enviada por um receptor. Os clientes BaseUDP podem enviar essas mensagens de Solicitação para pedir a retransmissão de quaisquer pacotes do fluxo de dados.
O servidor BaseUDP transmite em um grupo multicast conhecido para cada tipo de fluxo de dados downstream BaseUDP de uma rede. Os receptores devem se inscrever nesse grupo multicast para receber os dados downstream. Um ou mais Servidores de Retransmissão também podem ser implantados para atender às solicitações unicast de retransmissão de mensagens específicas feitas pelos clientes. Os receptores devem ser configurados com os endereços IP e as portas para os quais podem enviar essas solicitações.
Todos os campos numéricos das mensagens BaseUDP especificadas neste documento (por exemplo, número de sequência, contagem de mensagens, comprimento de mensagens etc.) são números binários no formato Big Endian (ou seja, o byte mais significativo primeiro).
Observação: isso não se aplica necessariamente aos dados contidos nos campos Message Data dos Blocos de Mensagem.
Uma mensagem é uma unidade atômica de informação transportada pelo protocolo BaseUDP.
Em teoria, o BaseUDP suporta mensagens individuais de zero byte até 64 KB, embora cada mensagem deva ser pequena o suficiente para que o protocolo de rede UDP subjacente transporte com eficiência os pacotes BaseUDP resultantes.
O conteúdo de uma mensagem BaseUDP é definido pela aplicação de nível superior.
Uma Sessão é uma sequência de uma ou mais mensagens.
Embora uma única sessão possa durar indefinidamente, normalmente a aplicação define a sessão de forma a agrupar logicamente as mensagens com base em um recorte de tempo.
Depois que uma sessão é encerrada, nenhuma outra mensagem pode ser enviada nela. Dependendo do desenho do sistema BaseUDP e da aplicação, os receptores ainda podem solicitar a retransmissão de mensagens de uma sessão encerrada.
Uma sessão é considerada ativa se já foi iniciada e ainda não foi encerrada.
Um transmissor BaseUDP envia pacotes "downstream", que são recebidos pelos receptores BaseUDP. Um pacote BaseUDP pode conter um payload de 0 ou mais mensagens do fluxo de dados.
Cada pacote BaseUDP é composto por um Cabeçalho do Pacote Downstream e por uma série de Blocos de Mensagem. Os Blocos de Mensagem transportam os dados efetivos do fluxo.
| Nome do Campo | Offset | Comprimento | Valor | Observações |
|---|---|---|---|---|
| Session | 0 | 10 | ANUM | Indica a sessão à qual este pacote pertence |
| Sequence Number | 10 | 8 | NUM | Número de sequência da primeira mensagem do pacote |
| Message Count | 18 | 2 | NUM | Quantidade de mensagens contidas neste pacote |
O campo Sequence Number do Cabeçalho do pacote indica o número de sequência da primeira mensagem do pacote. Se o pacote contiver mais de uma mensagem, as mensagens seguintes à primeira são numeradas sequencialmente de forma implícita.
A quantidade de Blocos de Mensagem contidos em um pacote BaseUDP é indicada no campo Message Count do Cabeçalho do Pacote. O tamanho máximo do payload de um Pacote Downstream é definido pelo transmissor.
Observe que um Message Count igual a zero indica um heartbeat, e um Message Count igual a 0xFFFF (hexadecimal, ou 65535 em decimal) indica fim de sessão.
O primeiro campo de um Bloco de Mensagem é o Message Length, de dois bytes. O restante do Bloco de Mensagem é o campo Message Data, de comprimento variável. O primeiro Bloco de Mensagem sempre começa imediatamente após o Cabeçalho, ou seja, a 20 bytes do início do pacote. Os Blocos de Mensagem seguintes começam após o último byte do Bloco de Mensagem anterior.
| Nome do Campo | Offset | Comprimento | Valor | Observações |
|---|---|---|---|---|
| Message Length | * | 2 | NUM | Indica o comprimento, em bytes, da mensagem contida neste bloco |
| Message Data | * | * | ANUM | Os dados da mensagem |
* = Valores variáveis
O Message Length é uma contagem binária sem sinal que representa a quantidade de bytes de dados da mensagem que seguem este campo. O valor não inclui os dois bytes ocupados pelo próprio campo Message Length. O tamanho total do bloco de mensagem é o valor do campo Message Length mais dois.
O Message Data contém os dados efetivos da mensagem transmitida pelo BaseUDP. Tem comprimento variável e pode ter comprimento zero. O significado dos dados é específico da aplicação.
O servidor envia heartbeats periodicamente para que os receptores possam detectar perda de pacotes mesmo em períodos de pouco tráfego. Normalmente, esses pacotes são transmitidos uma vez por segundo e contêm o próximo Sequence Number esperado. Um pacote de Heartbeat é um pacote BaseUDP com Message Count igual a zero.
Quando a sessão atual termina, Pacotes Downstream com Message Count igual a 0xFFFF (hexadecimal, ou 65535 em decimal) são enviados por um curto período no lugar dos Heartbeats. Assim como os Heartbeats, esses Pacotes Downstream contêm o próximo Sequence Number esperado. Enquanto as mensagens de Fim de Sessão estiverem sendo enviadas, ainda é possível solicitar retransmissões da sessão atual. É a última oportunidade de garantir que todas as mensagens foram recebidas.
O Pacote de Solicitação é enviado para pedir a retransmissão de uma mensagem específica ou de um grupo de mensagens. Ele é enviado a um Servidor de Retransmissão. O receptor pode precisar enviar essa solicitação ao detectar uma lacuna no número de sequência das mensagens recebidas. A resposta a um Pacote de Solicitação válido é um Pacote Downstream padrão, enviado via unicast de volta à origem da solicitação de retransmissão. Isso permite que os usuários do BaseUDP downstream leiam o Pacote Downstream retransmitido no mesmo socket em que processam o multicast, se a solicitação tiver sido feita a partir desse socket (em outras palavras, o cliente precisa manter apenas um socket aberto para ouvir o multicast e processar as retransmissões, mesmo que as retransmissões não sejam multicast).
| Nome do Campo | Offset | Comprimento | Valor | Observações |
|---|---|---|---|---|
| Session | 0 | 10 | ANUM | Indica a sessão à qual este pacote pertence |
| Sequence Number | 10 | 8 | NUM | Primeiro número de sequência solicitado |
| Requested Message Count | 18 | 2 | NUM | Quantidade de mensagens solicitadas para retransmissão |
O campo Sequence Number do Cabeçalho do pacote indica o número de sequência da primeira mensagem solicitada.
O Message Count indica quantas mensagens devem ser retransmitidas. Se o tamanho total das mensagens solicitadas exceder o tamanho máximo de payload de um pacote UDP, serão devolvidas apenas as mensagens que couberem inteiramente. Para as mensagens seguintes, se ainda forem necessárias, é preciso fazer novas solicitações de retransmissão.
Um cliente receptor BaseUDP típico pode seguir o fluxo abaixo:
| Versão | Compatível com versão anterior |
Criticidade | Descrição da Alteração | Data |
|---|---|---|---|---|
| 1.0 | - | Relevante | Versão original | 05/10/2026 |