O termo SLIP (sigla da expressão inglesa Serial Line Internet Protocol) designa um protocolo serial assíncrono utilizado na Internet para acesso remoto discado.
A necessidade de um protocolo de camada de ligação de dados para deixar o IP operar ligações em série foi identificada muito cedo no desenvolvimento do TCP / IP (Transmission Control Protocol/Internet Protocol). Os engenheiros que trabalharam sobre o Protocolo de Internet precisavam de uma maneira para enviar datagramas IP através de conexões em série que ligam os computadores. Para resolver o problema eles criaram um protocolo muito simples que iria enquadrar datagramas IP para transmissão através da linha Serial. Este protocolo é chamado de Serial Line Internet Protocol (SLIP).
Visão Geral e História
O SLIP é diferente da maioria dos protocolos TCP / IP, porque nunca tinha sido definido como um padrão formalmente. Foi criado informalmente no início de 1980 e o seu uso espalhou-se como um padrão de fato antes de ele ser descrito num documento RFC. Mesmo quando ele foi finalmente publicado, em 1988, a decisão foi tomada especificamente para que o SLIP não fosse designado um padrão oficial da Internet. Os autores do artigo que o descreve, RFC 1055, fez com que ninguém se perca neste ponto, nomeando o SLIP como “A Nonstandard For Transmission Of IP Datagrams Over Serial Lines: SLIP ”.
Porque o SLIP foi designado como um “fora do padrão” em vez de um padrão? Bem, ele foi desenvolvido como uma medida muito rudimentar para fornecer uma camada com dois enquadramentos sempre que fosse necessário. É tão simples que não há realmente muito a padronizar. Além disso, o protocolo tem tantas deficiências que o IETF (Internet Engineering Task Force), aparentemente, não quis dar o status de norma formalizada. O RFC 1055 faz uma menção específica dos problemas com o SLIP e o fato de que o trabalho já estava em curso naquele tempo para definir um sucessor mais capaz do SLIP.
O SLIP é tão simples que é uma das poucas tecnologias que podemos descrever quase completamente sem reclamar que é complicado. O SLIP executa apenas uma função: o enquadramento de dados para a transmissão. Ele não faz nada mais.
O enquadramento SLIP funciona da seguinte forma: Um datagrama IP é transmitido para o SLIP, que quebra-a em bytes e envia-los um de cada vez sobre o link. Após o envio do último byte do datagrama, um valor de byte especial é enviado e informa o dispositivo da recepção que o datagrama terminou. Isso é chamado de personagem SLIP END, e tem um valor de byte de 192 decimal (C0 hexadecimal, 11000000 binário). E é basicamente isso: levar todo o datagrama, enviar um byte de cada vez, e, em seguida, enviar o byte 192 para delimitar o final do datagrama.
Há apenas um problema com o SLIP. Se o valor de byte especial END é 192 decimal, o que acontece se o valor byte 192 aparecer no próprio datagrama? Ao transmiti-lo como 192 decimal iria enganar o destinatário a pensar que o datagrama terminou prematuramente. Para evitar isso, um caracter de escape especial (ESC) é definido, e tem um valor decimal de 219 (DB em hexadecimal, 11011011 em binário). O termo escape significa que este símbolo transmite o significado que este byte e o próximo têm um significado especial. Quando um valor de 192 aparece no datagrama, o dispositivo de envio substitui-o pelo caracter ESC (219 decimal) seguido do valor decimal 220. Assim, um único 192 torna-se 219 220 (ou DB DC em hexadecimal). O destinatário traduz de volta de 219 220 para 192.
Isso deixa um último problema: o que acontece se o próprio caracter de escape está no datagrama original? Ou seja, e se houver um valor de byte de 219 no datagrama IP para ser enviado? Isso é tratado por uma substituição semelhante: em vez de 219 colocamos 219 221.
Então, este é basicamente tudo o que o SLIP faz:
- Dividir um datagrama IP em bytes.
- Enviar o caracter END (valor 192) após o último byte do datagrama. Em melhores implementações, envie o caracter END antes do primeiro byte também.
- Se qualquer byte a ser enviado no datagrama é 192, é substituído por 219 220.
- Se qualquer byte a ser enviado é 219, substituí-la por 219 221