Resumo

  • Em fevereiro de 1989, o RFC 1090 propôs abrir um circuito virtual X.25 de duas vias para cada sessão SMTP, usá-lo na conversa e liberá-lo ao final.
  • A liberação X.25 podia descartar dados ainda em trânsito. O lado que fazia a chamada aguardava a resposta SMTP de fechamento do serviço, em geral após QUIT, para então encerrar o circuito.

O último envelope ainda estava no corredor

O RFC 821, de 1982, já mencionava o uso de redes públicas X.25 para SMTP. Seu apêndice D sugeria um protocolo confiável de ponta a ponta, como TCP, sobre a conexão. Sete anos depois, R. Ullmann escreveu no RFC 1090 um método de uso direto do circuito virtual. O documento relatava operação em 24 redes públicas de dados distribuídas por 22 países. Era a experiência informada pelo autor, suficiente para transformar uma ideia de transporte em procedimentos minuciosos de plantão.

O desenho era enxuto. Uma sessão SMTP ganhava um circuito X.25, usava o canal simultaneamente nos dois sentidos e, concluída a troca, liberava a linha. Normalmente o chamador fazia a liberação. Comandos e respostas continuavam sendo SMTP. O detalhe perigoso estava no instante em que a camada de baixo retirava o chão da camada de cima.

O RFC 1090 explica que, ao contrário do comportamento atribuído ali ao TCP, o X.25 não entregava de modo síncrono os dados em trânsito quando começava a liberação. Pacotes ainda a caminho eram descartados. Bastava o chamador terminar de enviar e puxar a chave cedo demais para que o fim da conversa desaparecesse no corredor. O procedimento mandava esperar a mensagem SMTP Service Closing, geralmente resposta a QUIT, e então limpar o circuito. Quem segura a chave da sala precisa ouvir o “pode fechar” do colega antes de apagar a luz.

Uma troca de e-mail contém recibos de naturezas diferentes. A resposta ao fim dos dados do e-mail pertence à transação SMTP. A resposta Service Closing encerra a sessão. A liberação X.25 desmonta o caminho físico-lógico que carregava a conversa. A gestão posterior da mensagem no destino vem em outra etapa. O RFC 1090 disciplinou a passagem entre o último ato do serviço e o primeiro ato de desmontagem da linha. A ordem dos atos protegia os bytes que ainda corriam.

Na abertura, o circuito também precisava se apresentar. Os quatro primeiros octetos do campo Call User Data deveriam trazer o identificador de protocolo C0F70000, em hexadecimal. O documento, porém, pedia capacidade de configurar esses dados, inclusive o identificador, por endereço chamado. Cada rede podia ter hábitos próprios de acesso; o sinal comum se adaptava à chamada concreta.

Dentro da linha, o remetente podia dividir o fluxo SMTP entre pacotes conforme preferisse. Sequências com o bit M, indicando continuação, eram encorajadas até 2.048 bytes de comprimento total. Uma recomendação colocava cada comando ou resposta em um único pacote ou sequência, para que a depuração mostrasse frases reconhecíveis. Era conveniência operacional. Pacotes com bit Q e pacotes de interrupção ficavam fora desse uso e deveriam ser ignorados. Os caracteres viajavam em ASCII de oito bits, as linhas terminavam em CRLF e, se possível, uma implementação reconheceria também LF sozinho.

O reset do circuito tinha outro roteiro. Ao receber um reset de nível 3, liberava-se o circuito e tentava-se abrir outra conexão SMTP, talvez mais tarde ou com outras facilidades de chamada. O RFC queria essas facilidades configuráveis para cada endereço de destino. Uma linha interrompida pedia uma nova tentativa completa; uma nova chamada não transportava magicamente os últimos segundos da antiga.

Também havia relógios para impedir que a conversa tomasse posse eterna do circuito. O aceite da chamada podia levar até 100 segundos; a saudação Service Ready recebia mais 120. Depois de estabelecida a sessão, dez minutos sem resposta permitiam a liberação. Após QUIT, o prazo caía para vinte segundos. O documento reconhecia que a saída podia ficar pouco elegante e dizia que transações SMTP já concluídas continuavam concluídas. Esses tempos vieram da prática que o autor relatou: paciência medida para o outro lado responder e para a linha voltar a ficar disponível.

A pequena história do RFC 1090 cabe numa mão pairando sobre o interruptor. Uma ponta abre e normalmente fecha o circuito; a outra fornece a resposta que informa quando chegou a hora. O correio avançava porque os dois lados concordavam sobre o fim da conversa antes de encerrar o caminho.