Protocolos de comunicação

Mensagens sobre bytes, delimitadores, escaping, integridade e sincronização entre aplicações.

TLDR

Perguntar sobre esta página

ChatGPTClaudePerplexityGrokGeminiCopiar e abrirDeepSeekCopiar e abrir

Mensagens sobre bytes

Um protocolo define limites, tipos, comprimentos, unidades, ordem de campos e ordem de bytes. UART entrega bytes, não mensagens. Serializa campos explicitamente; padding e endianness impedem usar uma struct crua como formato portátil.

No formato próprio da lição, cada frame é delimitado por 7E. O corpo contém tipo, sequência, comprimento, payload e checksum XOR dos bytes anteriores.

  • 7E no corpo transmite-se como 7D 5E.
  • 7D no corpo transmite-se como 7D 5D.
  • Remove escaping antes de interpretar campos e conferir checksum.
Corpo:  01 07 02 7E 05 7F
Linha:  7E 01 07 02 7D 5E 05 7F 7E

O XOR dá 7F. Os nove bytes em 8N1 a 9600 bit/s demoram pelo menos 9⋅10/9600=9,3759\cdot10/9600=9{,}375 ms. Para payload de L≤255L\leq255 bytes, reserva até 2(L+4)+22(L+4)+2 bytes transmitidos.

XOR deteta alguns erros, mas inverter o mesmo bit em dois bytes conserva o checksum: payload 7F 04 tem o mesmo XOR de 7E 05. ACK e timeout não revelam essa corrupção aceite.

Parser e recuperação

  • O estado persiste entre chegadas fragmentadas; não bloqueies à espera do frame inteiro.
  • Outro byte após escape invalida o corpo e leva a WAIT_START. Delimitadores consecutivos não publicam mensagens vazias. Excesso de capacidade, erro UART ou timeout invalidam o parcial.
Estado e entradaAção
WAIT_START, 7EIniciar corpo vazio em BODY
WAIT_START, outroIgnorar
BODY, byte normalGuardar dentro da capacidade
BODY, 7DPassar a ESCAPED
ESCAPED, 5E ou 5DGuardar byte XOR 20, voltar a BODY
ESCAPED, 7EDescartar parcial, iniciar corpo vazio
BODY, 7EValidar corpo, preparar o seguinte

Só publica um evento depois de validar tipo, campos, comprimento e checksum no fecho. Aplicar o primeiro campo antes dessa validação deixa efeitos de mensagens inválidas.

ACK, sequência e sessão

Em stop-and-wait, guarda a mensagem, envia e espera ACK; reenvia a mesma sequência após timeout, com tentativas limitadas.

  1. MOVE +5, sequência 7, é aplicado e confirmado.
  2. Se o ACK se perder, o emissor reenvia sequência 7.
  3. O recetor reconhece o duplicado, repete ACK 7 e não aplica outro +5.

ACK confirma aceitação segundo o contrato, não apresentação ao utilizador. Sequências de oito bits dão a volta; sessão e janela têm de impedir confusão com mensagens antigas. Estados absolutos podem tolerar repetição, mas ainda precisam de rejeitar versões antigas.

Sincronização e capacidade

Define quem inicia JOIN, quem responde START, versão, sessão, timeout e desempate se ambos iniciarem. Reconexão descarta bytes e estado parcial anterior.

Na replicação, ambos precisam do mesmo estado inicial, entradas na mesma ordem, instantes lógicos e regras determinísticas. Na centralização, um lado calcula o estado e o outro envia entradas/apresenta resultados.

Em 8N1 a 115200 bit/s, a capacidade ideal é 11520 bytes/s. Uma imagem de 1024×768 a 8 bpp demora pelo menos 68,27 s. Envia entradas ou alterações de estado e desenha localmente; overhead e retransmissões agravam o tempo.

Parser e traço de receção.

À tua maneira

Aparência

Modo de cor
Tema
Cor de destaque

Leitura

Fonte de leitura

Álgebra, lógica e uma ideia de cada vez.

Código

Fonte do código

Navegação

Cursor de leitura, sem edição. h, j, k, l movem; / pesquisa nesta página. v seleciona caracteres; V seleciona linhas; y copia. Tab permite destacar ou comentar. Espaço ou Enter abre blocos recolhíveis. Nos cartões, h, j, k, l mudam o foco.

CSS personalizado

Ativa uma sugestão ou guarda o teu CSS. Só muda este navegador.

Usa --page, --text e --accent para acompanhar o tema.

Seletores e recuperação

.site-header, .prose, .course-card, [data-reading-history], [data-playground] e .page-actions.

Abre a aparência com a tecla vírgula ou no rodapé. Se o CSS esconder os controlos, abre esta página sem CSS personalizado.

Pesquisar

Escreve para pesquisar em todo o site.

para escolher · Enter para abrir · Esc para fechar

Copiar fórmula

A cópia automática não está disponível. Copia o LaTeX abaixo.

Pesquisar nesta página

Enter procura · n / N repetem · Esc cancela. Ctrl / Cmd K pesquisa todo o site.

Atalhos de teclado

Clica numa tecla para a mudar. Esc cancela. Backspace desativa.

PesquisarCtrl / Cmd K

Os atalhos não interferem enquanto escreves. Tab e Enter funcionam sempre.