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