Resumo

  • Fragmentos enviados por vários membros usavam uma sequência de todo o feixe. B e E marcavam começo e fim do pacote; o número avançava por fragmento e não reiniciava a cada pacote ou novo membro.
  • O acordo comum não exigia partes iguais nem um único escalonador. Pacotes pequenos podiam permanecer inteiros, enquanto a MRRU limitava o tamanho que o receptor prometia reconstruir.
  • O FCS de cada enlace protegia seu fragmento, não o pacote remontado. Endpoint Discriminator auxiliava o agrupamento sem autenticar; BAP/BACP e a extensão multiclasse trataram depois de banda dinâmica e latência.

A segunda linha não virou uma segunda rede

Quando um segundo canal PPP ficava disponível, tratá-lo como enlace totalmente separado multiplicava também endereços, negociação de protocolos de rede e estado operacional. Distribuir pedaços sem ordem compartilhada era igualmente insuficiente: velocidades e atrasos diferentes fariam a parte posterior chegar primeiro.

Multilink introduziu o feixe. Cada membro continuava com framing, LCP e autenticação próprios. Os protocolos de camada de rede podiam ser negociados uma vez para o conjunto. Assim, adicionar ou retirar uma linha não obrigava a destruir toda a conversação que existia acima dela.

O RFC 1717 apresentou o mecanismo em 1994, com múltiplos canais B de ISDN como motivação importante. O RFC 1990 o substituiu em 1996 e fechou ambiguidades. Chamar o resultado apenas de agregação de banda esconde a escolha essencial: tornar comum só o estado necessário para remontar pacotes enquanto a composição física mudava.

O objeto cortado ainda não era um quadro físico

Primeiro, o transmissor acrescentava o campo Protocol do PPP ao pacote de rede. Ainda não havia Address, Control, Flags ou FCS de um membro específico. Esse pacote encapsulado era a entidade lógica dividida pelo MP.

Cada parte seguia como protocolo PPP 0x003d, com cabeçalho Multilink. O primeiro fragmento começava pelo Protocol original. O bit B marcava a primeira parte e E a última; ambos podiam ser um quando um único fragmento carregava todo o pacote.

Isso significa que a divisão não era obrigatória. Um pacote curto podia seguir inteiro. Os fragmentos de outro pacote podiam ter comprimentos diferentes. O emissor podia distribuí-los segundo a velocidade de cada membro ou escolher outra política local. O receptor não precisava conhecer esse algoritmo, apenas a ordem e os limites declarados.

O contrato compartilhado era, portanto, menor que a implementação. Essa separação permitia melhorar desempenho sem renegociar a linguagem de reconstrução.

A numeração era do feixe

O cabeçalho normal carregava 24 bits de sequência. Um formato curto de 12 bits podia ser negociado, mas o mesmo formato valia em todo o feixe. Cada fragmento transmitido consumia o próximo número.

O contador não voltava a zero no começo de cada pacote. A entrada de uma linha secundária também não o reiniciava. Só um feixe realmente novo começava em zero. Desse modo, os números baixos de um membro recém-chegado não pareciam fragmentos antigos atrasados nos outros.

O receptor mantinha uma única estrutura de reassembly para o feixe. Como os membros podiam ter ritmos distintos, desordem era esperada. O receptor acompanhava o avanço observado em cada linha e calculava o mínimo que todas já tinham ultrapassado. Se um número abaixo desse ponto permanecesse ausente, não podia mais ser explicado apenas como atraso em outro membro; o pacote incompleto podia ser descartado para retomar a sincronização.

Buffer não eliminava toda a dúvida. A necessidade dependia de taxas, atrasos e tamanhos máximos. O RFC 1990 alertava que nenhum volume de memória garantiria a detecção contra um par que retivesse um pacote. Sequência organiza reconstrução; não cria confiabilidade.

Fragmentos corretos não provavam um pacote completo

Cada membro colocava seu fragmento MP em um quadro PPP comum e aplicava seu próprio FCS. Um FCS válido sustentava a integridade daquela parte naquele enlace. O MP não acrescentava uma nova verificação sobre o pacote inteiro após remontagem.

Dez partes podem passar no FCS e a décima primeira nunca chegar. O pacote continua indisponível. “Todos os FCS estão limpos” e “o feixe entregou pacotes completos” são afirmações diferentes.

O protocolo também não impunha um detector de falha. LQM ou LCP Echo podiam ajudar, mas eram mecanismos separados. Entrega confiável em um membro exigia negociar PPP Reliable Transmission à parte. MP não retransmitia e não confirmava resultados de aplicação.

Operações precisam separar estado do membro, erros de framing/FCS, última sequência em cada linha, mínimo do feixe, lacunas, descartes incompletos, pacotes passados para cima e efeito no serviço. Um único indicador de saúde perde a localização do defeito.

MRRU era a promessa de remontagem

Maximum Reconstructed Receive Unit definia o maior campo de informação remontado que o receptor aceitaria. Não era o MRU da linha física. Cada membro precisava comportar seu fragmento; o objeto lógico podia ser maior, desde que dentro da MRRU.

A opção LCP MRRU era o tipo 17 e sinalizava explicitamente a capacidade de receber Multilink ou anexar a linha a um feixe. O RFC 1990 exigia ao menos 1500 octetos e eliminava um default ambíguo. Short Sequence Header Format era o tipo 18.

Endpoint Discriminator, tipo 19, ajudava a decidir se linhas alcançavam o mesmo par e pertenciam ao mesmo feixe. Não anunciava capacidade MP sozinho e não comprovava identidade. Algumas classes eram atribuídas localmente, sem unicidade global. Magic-Number Block era apenas provavelmente único e foi desaconselhado como chave de autenticação ou banco quando havia autenticação real.

Um discriminador podia ser falsificado. Para a entrada segura no feixe, o RFC exigia autenticação PPP. Correspondência de identificador não era autorização.

A decisão de discar ficou fora do MP básico

O Multilink aceitava mudanças de membros, mas não escolhia quando abrir outra chamada nem qual par controlava a banda. O RFC 2125 atribuiu isso a BACP e BAP. BACP decidia o controlador da alocação; BAP solicitava inclusão ou retirada e informava o estado da chamada.

Sucesso da chamada comprovava aquela operação, não configuração útil, tráfego MP, aumento de throughput ou entrega de transação. A separação mantinha o resultado do plano de controle abaixo da prova do plano de dados.

Latência também ganhou extensão própria. O RFC 2686 mostrou que 1500 bytes a 28,8 kbit/s ocupavam cerca de 400 ms e podiam empurrar uma conversa para quase um segundo de ida e volta. Classes múltiplas permitiram intercalar fragmentos prioritários. A sequência básica resolvia ordem de reconstrução, não toda política temporal.

O feixe foi um acordo mínimo

Os pares compartilhavam capacidade MP, MRRU, um formato de cabeçalho, limites B/E e um espaço de sequência. Tamanho de fragmento, escolha do membro, detecção de falha, acionamento de chamada e prioridade permaneciam locais ou opcionais.

O feixe não apagava os membros nem se tornava autoridade central. Ele era a menor base sobre a qual decisões diferentes ainda produziam o mesmo pacote reconstruído.

0x003d prova uma representação MP no ponto observado. B/E e sequência descrevem a posição alegada; MRRU mostra um limite negociado; Endpoint Discriminator oferece uma pista. Entrega completa, identidade, ganho de banda e implantação atual só aparecem em capturas, contadores por membro, reassemblies concluídos e resultados da camada superior.

Fontes