Protocolos de Comunicação

  Tenho notado que muitas pessoas que acessam BBS não fazem idéia do que
  e' um protocolo e qual a diferença entre os diversos tipos deles,
  assim sendo resolvi escrever um texto a respeito. Espero que gostem...
 

  Pense por um instante como os índios do velho oeste americano se
  comunicavam através das nuvens de fumaça... existia uma codificação
  qualquer, talvez semelhante ao nosso antigo código Morse que definia
  letras, palavras ou significados. Aquele tipo de comunicação era
  algo realmente primitivo, pois que os sinais que eram enviados
  poderiam ser alterados pelo vento. Imagine por exemplo que duas
  grandes bolas de fumaça significassem *perigo*, e que uma grande bola
  e uma pequena bola significasse *tudo calmo*. Se um índio emitisse
  duas grandes bolas, o vento poderia se encarregar de alterar uma das
  bolas grandes transformando-a em pequena, e o sinal sairia errado.

  Em comunicação eletrônica os dados são convertidos em bits que nada
  mais são do que dois sinais elétricos. Nossos computadores entendem um
  bit ligado (1 ou sim) como um sinal abaixo de -1 V e um bit desligado
  (0 ou não) como um sinal acima de -0.7V. As mídias de transmissão (em
  nosso caso a linha telefonica) constantemente interferem na veracidade
  destes sinais, e o que era um Bit 1 passa a ser um Bit 0.

  Problemas como este são comuns em comunicação e o Homem desde os
  primórdios das comunicações procura solucioná-los através de sinais de
  verificação. Estes sinais são nada mais do que confirmações do que foi
  escrito, e não fazem parte da informação em si. E' como se por
  exemplo, ao final de cada frase eu colocasse um numero decimal
  explicitando o numero de palavras que eu escrevi.

  Na realidade, e' isto que faz um protocolo de comunicação!

  Vejamos agora então os diversos tipos de protocolos:

  ...apenas para simplificar as coisas vamos chamar de *fonte* a maquina
  que envia os dados e de *destino* a maquina que recebe os dados.

* Xmodem

  Nos primórdios da comunicação de dados entre micros, Ward Cristianson
  escreveu um protocolo para maquinas baseadas em CP/M, chamado Modem7.
  Com a entrada dos PCs Cristianson mudou seu código gerando um
  protocolo chamado Xmodem. Vejamos como ele funciona.

  O Xmodem *fonte* particiona o arquivo em blocos de 128 bytes cada um.
  Então ele envia um bloco juntamente com um byte de CheckSum (byte
  codificação que representa a soma dos bytes enviados). O Xmodem
  *destino* faz a soma dos 128 bytes recebidos e compara com o CheckSum.
  Se o CheckSum confere o *destino* envia um ACK (acknowledgment), que
  e' o sinal para que o *fonte* saiba que pode enviar outros 128 bytes.
  Caso o *destino* perceba que CheckSum nao confere, ele envia um NAK
  (not acknowledgment), e o *fonte* fica sabendo que tem que enviar
  aquele mesmo bloco outra vez.

  O Xmodem foi o primeiro protocolo de larga escala a ser utilizado, e
  hoje em dia e' considerado um protocolo lento e pouco confiavel.
  Entender isto e' fácil, basta pensar que em cada 1 Kb que enviamos
  estamos enviando no mínimo outros 8 ACK, um para cada bloco de 128
  bytes. Este 8 ACKs nada tem haver com a informação em si.

  Da descricao acima o Xmodem ainda evoluiu, passando a enviar blocos de
  at‚ 1 Kb (as vezes chamado 1K-Xmodem), e fazendo um CRC check de 2
  bytes que e' muito mais eficiente que o CheckSum.( As diferen‡as entre
  o CheckSum e o CRC check e' assunto para outro texto, ok?)

* Ymodem

  Em 1981 Chuck Forsberg desenvolveu um algoritimo muito parecido com o
  do 1K-Xmodem, que transfere blocos de 1Kb com CRC check, as principais
  inova‡”es entretanto ficaram sendo:
   - Batch transfer, i.e., o Ymodem pode transferir mais de um arquivo
     por conexão em fila. Ou seja, terminando o primeiro arquivo o
     protocolo continua transferindo os demais arquivos sem a
     necessidade de ter um usuário digitando o nome de cada arquivo.
   - Os arquivos trasmitidos pelo Ymodem j  vem com o nome, data e hora,
     coisa que não acontece com o Xmodem, que sempre pede a você o nome
     do arquivo que vai receber.

  Numa linha de 9600 Bauds, o Ymodem e' cerca de 50 a 65% mais rapido
  que o 1K-Xmodem. Entretanto o Ymodem e' muito sensível a ruídos e
  costuma abortar a transmissão em linhas ruidosas como as nossas.

* Kermit

  Este protocolo foi criado pela Columbia University e funciona
  basicamente como o Ymodem, exceto pelo fato de que as partes, *fonte*
  e *destino*, definem on-line o tamanho dos blocos que ser„o
  transmitidos. Isto faz com que a sensibilidade do Ymodem aos ruídos
  seja resolvida. Quando uma linha esta' muito ruidosa, o Kermit reduz o
  tamanho dos blocos. Uma vez definido o tamanho do bloco para o qual
  ocorrem um numero minimo de erros, inicia-se a transmissão. Isto faz
  com que as vezes o Kermit seja ainda mais lento que o próprio Xmodem,
  pois que o tamanho dos blocos e' definido de forma a receber o mínimo
  de erros possível, o que pode acontecer para blocos menores que 128
  bytes.

* Super-Kermit

  Como uma evolução do Kermit, Jan van der Eijk criou em 1985 o
  Super-Kermit. A grande diferença deste para os protocolos anteriores
  e' o fato de que o *fonte* não precisa mais receber um ACK do
  *destino* para enviar outro bloco. O *fonte* simplesmente sai enviando
  os blocos e quando o *destino* recebe um bloco defeituoso (CRC check)
  ele devolve o bloco inteiro, para então recebe-lo de novo. Isto reduz
  sensivelmente o tempo de transmissão, pois que os ACKs tornam-se
  desnecessários.
  Este tipo de protocolo que nao necessita de ACKs e' chamado de
  "Streaming protocols". O Super-Kermit s¢ nao e' considerado um "Full
  Streaming Protocol" porque quando ocorre um erro, o *destino* fica
  esperando o *fonte* terminar a transmissão do bloco subsequente.
 

* Zmodem

  Em 1986 Chuck Forsberg criou o Zmodem, um protocolo com imensas
  inovações:

   - CRC Check usando 32 bits (4bytes)

   - O Zmodem foi o primeiro protocolo verdadeiramente "Streaming", pois
     que ao nao necessitar de ACKs, o *destino* interrompe a transmissão
     do *fonte* no momento em que bem deseja.

   - Crash Recovery: Imagine que você está  recebendo um arquivo de 300Kb
     e depois de receber 290Kb, sua irmã mais nova resolve levantar o
     gancho do telefone. A transmissão e' abortada. Num protocolo
     qualquer de comunicação você precisa baixar os 300Kb outra vez, no
     Zmodem, o *fonte* fica sabendo através do *destino* que so' e'
     preciso enviar os últimos 10Kb do arquivo.

   - Blocos de tamanho variável: Uma das grandes vantagens do Kermit era
     conseguir transmitir em linhas extremamente ruidosas, isto porque o
     Kermit ia diminuindo o tamanho do bloco at‚ encontrar um tamanho
     "seguro". Ao definir este tamanho de bloco, ele era mantido at‚ o
     fim da transmissão. Esta segurança gerava por vezes uma lentidão
     desnecessária na transmissão, pois o fato de a linha estar ruim no
     inicio da transmissão não significa que a linha continuara' ruim
     durante toda a transmissao! O Zmodem resolveu este problema da
     seguinte forma: enquanto houver erro na transmissão eu reduzo o
     tamanho do bloco `a metade. Depois de 4 transmissões sucessivas sem
     erro eu duplico o tamanho do bloco, ate' chegar ao limite máximo de
     1 Kbyte por bloco.

   Pelos motivos acima citados o Zmodem e' considerado atualmente o
   protocolo mais confiavel e eficiente em transmissão de dados. Existem
   protocolos como o HS-LINK e o BiModem que conseguem, em linhas
   cristalinas, ter velocidade superior ao Zmodem, mas não tem a mesma
   resistência ao ruído. Se você não consegue baixar um arquivo via
   Zmodem, e' melhor procurar outra linha telefonica.
 

* Protocolos G's (Ymodem-G e 1K-Xmodem-G)

  Os protocolos G's são protocolos iguais aos seus homonimos (Ymodem e
  1K-Xmodem) apenas por uma diferença: eles operam em modems com
  correção interna MNP (Microcom Networking Protocol). O protocolo em si
  não faz nada alem de uma interface entre voce e o modem. Toda a
  correção de erros e' feita pelo MNP. Estes protocolos so' funcionam em
  modems que possuem MNP.

* Jmodem

  Este protocolo criado em 1988 por Richard Johnson, tem basicamente as
  mesmas características operacionais do Zmodem, exceto pelo fato que
  incrementa/decrementa o tamanho dos blocos de 512 em 512 bytes sempre
  que ocorre uma transmissão de um bloco com/sem sucesso at‚ o limite
  de 8 Kbytes. O Jmodem possue um CRC check de 16 bits.
  Por estes motivos, o Jmodem tende a ser mais rápido em linhas "limpas"
  e mais lento em linhas "sujas", do que o Zmodem.

* MPt (Puma p/ os mais íntimos)

  Antes de entrar no conceito do protocolo, uma pequena curiosidade:

  Matt Thomas sempre foi um nome lembrado nos BBS americanos desde que
  desenvolveu um protocolo chamado Lynx, que foi at‚ a versão 3.00
  Em Janeiro de 1990, Matt Thomas descobriu que seu protocolo tinha
  limitações fortes para continuar evoluindo e resolveu criar um novo
  protocolo chamado "Puma". Em Abril de 1990, por problemas de
  Copyright, Matt Thomas foi obrigado a trocar o nome para MPt. Ainda
  hoje podemos ver em alguns BBS cariocas o protocolo MPt sendo chamado
  de "Puma".
  Algumas inovações fizeram deste novo protocolo uma sensação lá fora,
  entre elas a compressão RLE (Run Length Encoding) que e' uma
  compressão de dados efetuada pelo protocolo sempre que ele consegue
  observar uma seqüência de bytes iguais. Mas certamente nenhuma outra
  inovação trouxe tanta revolução quanto a parametrização no
  "hand-shaking"... mas o diabos e' isto???

  No mundo da informática, todas as inovações acontecem a uma velocidade
  cada vez maior. Manter-se atualizado e' algo que demanda tempo,
  paciência e não raramente muito dinheiro. Preocupado com isto e na
  tentativa de fazer com que os usuários migrassem para o MPt, Matt
  Thomas criou uma espécie de arquitetura interna no MPt que permite que
  o protocolo identifique quais as funções que existem entre *fonte* e
  *destino*. Isto permite que as versões mais novas do MPt sempre sejam
  compatíveis com as anteriores, e que um MPt *fonte* mais recente não
  tente usar um algoritmo que o MPt *destino* mais antigo não possue.
  Assim sendo, antes de iniciar a transmissão, *fonte* e *destino*
  "apertam as m„os" (hand-shaking) e "se conhecem" para saber qual a
  idade de cada um.

  Os protocolos MPt tendem a ser mais rápidos que todos os acima
  mencionados, exceto na transmissão de arquivos pequenos 12K ou
  menores, onde os procedimentos de parametrização no Hand-shaking
  aumentam o tempo de transmissão.
 

* BiModem

  O BiModem teve uma das maiores revoluções em termos de transmissão de
  dados, ele permitiu que pela primeira vez pudéssemos transmitir e
  receber um arquivo ao mesmo tempo. A maioria dos modems atuais
  consegue fazer isto, o que acaba por reduzir a conta telefonica `a
  metade. Seu algoritmo de funcionamento e' semelhante ao do Zmodem em
  termos de definição de tamanho de bloco, sendo que o limite fica em
  4KBytes.

  Outra grande revolução fica por conta do Update de arquivos. Imagine
  que você possue uma empresa com um sistema distribuído de banco de
  dados ligado em varias cidades. Seu banco de dados tem um arquivo de
  digamos, 2 Mb que recebeu 30 Kb de novas informações. Num protocolo
  qualquer, você seria obrigado a descer os 2Mb por inteiro, gastando
  horas de transmissao. O BiModem por sua vez faz, através de pesquisas
  binárias, testes para saber aonde começam as alterações do seu
  arquivo. Aonde existe alteração ele vai inserindo os novos bytes. Com
  isto, ao invés de descer 2 Mb de arquivo, você s¢ desce 30 Kb!!!
 

**** Conclusão

  Terminando este longo texto, apresento uma lista comparativa
  da velocidade de protocolos nas diversas velocidades de
  transmissão extraída do livro:
  "Dr. File Finder's Guide to ShareWare"
  - Mike Callaham & Nick Anis - Osborne McGraw-Hill 1990
  (a venda na Citec e Ciência Moderna no Rio de Janeiro)

Protocolo   Velocidades medidas em CPS para um arq de 12 Kb
            em 1200 Bauds    em 2400 Bauds    em 9600 Bauds

Xmodem                81              150               193
Xmodem CRC       80              151               192
1K-Xmodem        104              208               699
Ymodem               104              203               703
Super Kermit        103              198               680
Zmodem               111              224               894
Protocolos G        118              227               890
Jmodem               114              228               940
MPt                     119              236              1000
BiModem             116              224               912
 

Protocolo   Velocidades medidas em CPS para um arq de 243 Kb
            em 1200 Bauds    em 2400 Bauds    em 9600 Bauds

Zmodem           115              230              1094
Protocolos G    119              238              1145
Jmodem           114              230              1118
MPt                 118              237              1124
BiModem        118              237              1138
 

Protocolo   FAIXAS de Velocidades medidas em CPS
            em 1200 Bauds    em 2400 Bauds    em 9600 Bauds

Xmodem             45-82            140-150          175-205
Xmodem CRC    45-85            138-155          180-205
1K-Xmodem      92-108           198-218          670-710
Ymodem            94-112           188-210          690-710
Super Kermit      90-108           182-220          675-708
Zmodem            104-116          214-232          960-1100
Protocolos G     112-119          224-237          992-1148
Jmodem            108-116          224-232          930-1120
MPt                  110-119          220-238          980-1130
BiModem          112-119          222-238          988-1150
 
 

Hosted by www.Geocities.ws

1