O protocolo Telnet é um protocolo padrão da Internet que permite obter uma interface de terminais e aplicações pela Internet. Este protocolo fornece as regras básicas para ligar um cliente (sistema composto de uma exibição e um teclado) a um intérprete de comando (servidor).
O protocolo Telnet baseia-se em uma conexão TCP para enviar dados em formato ASCII codificados em 8 bits entre os quais se intercalam sequências de controle Telnet. Ele fornece, assim, um sistema orientado para a comunicação, bidirecional (half-duplex), codificado em 8 bits, fácil de aplicar. Ele é construído considerando três conceitos fundamentais: o paradigma do Terminal de Rede Virtual (NVT - Network Virtual Terminal), o princípio de opções negociadas e as regras de negociação.
Este é um protocolo básico, no qual outros protocolos da sequência TCP/IP (FTP, SMTP, POP3, etc.) se apoiam. As especificações do Telnet não mencionam a autenticação porque ele está totalmente separado dos aplicativos que o utilizam (o protocolo FTP define uma sequência de autenticação acima do Telnet). Além disso, o Telnet é um protocolo de transferência de dados sem proteção, o que quer dizer que os dados circulam abertamente na rede, ou seja, eles não são criptografados. Quando o protocolo Telnet é utilizado para ligar um hóspede distante a uma máquina que serve como servidor, este protocolo é atribuído à porta 23.
Fora as opções e as regras de negociação associadas, as especificações do protocolo Telnet são básicas. A transmissão de dados pelo protocolo Telnet consiste apenas em transmitir os bytes no fluxo TCP (de qualquer maneira, o protocolo Telnet especifica que os dados devem, por padrão, ser reunidos num tampão antes de serem enviados, ou seja, eles devem ser enviados linha por linha). Quando o byte 255 é transmitido, o byte seguinte deve ser interpretado como um comando. O byte 255 é chamado de IAC (Interpret As Command - Interprete como um Comando).
As especificações básicas do protocolo Telnet estão disponíveis no RFC 854, enquanto que as numerosas opções são descritas nos RFC 855 a 861:
RFC referente ao Telnet | |
---|---|
RFC 854 | Especificações originais do protocolo Telnet |
RFC 855 | Especificações das opções do Telnet |
RFC 856 | Transmissão binária no Telnet |
RFC 857 | Opção Echo do Telnet |
RFC 858 | Telnet suprimir opção 'ir em frente' ou 'continuar' |
RFC 859 | Opção de status do Telnet |
RFC 860 | Opção de sincronização no Telnet |
RFC 861 | Opção Telnet extendida - lista de opções |
No início da Internet, a rede (ARPANET) era composta por máquinas cujas configurações eram muito pouco homogêneas (teclados, jogos de caracteres, resoluções, comprimento das linhas de exibição). Por outro lado, as sessões dos terminais também possuíam a sua própria maneira de controlar o fluxo de dados de entrada/saída.
Assim, em vez de criar adaptadores para cada tipo de terminal para viabilizar uma interoperabilidade destes sistemas, decidiu-se criar uma interface padrão, chamada NVT (Network Virtual Terminal - Terminal de Rede Virtual), que fornecia uma base de comunicação padrão, composta por caracteres ASCII de 7 bits aos quais se acrescenta o código ASCII estendido - três caracteres de controle, cinco caracteres de controle opcionais e um jogo de sinais de controle básico. Desta forma, o protocolo Telnet consiste em criar uma abstração do terminal, que permitirá a qualquer hóspede (cliente ou servidor) se comunicar com outro hóspede sem conhecer as suas características.
As especificações do protocolo Telnet consideram o fato de que certos terminais possam possuir serviços adicionais, não definidos nas especificações básicas, a fim de poder utilizar funções avançadas. Assim sendo, estas funcionalidades são traduzidas em termos de opções. O protocolo Telnet propõe, então, um sistema que permita o uso de funções avançadas sob forma de opções negociadas, iniciando pedidos para solicitar a autorização ao sistema remoto.
As opções do Telnet afetam separadamente cada direção do canal de dados. Assim, cada extremidade pode negociar com as opções, ou seja, definir as opções desejadas, como utilizar (DO), não utilizar (DON' T), permitir que a outra extremidade utilize (WILL), não permitir que a outra extremidade utilize (WON' T). Desta maneira, cada uma das partes pode emitir um pedido de utilização de uma opção. A outra parte deverá, então, responder se aceita ou não a utilização da opção. Se o pedido se referir a uma desativação de opção, o destinatário do pedido não deve recusar para ser totalmente compatível com o modelo NVT:
A negociação das opções Telnet | ||
---|---|---|
Pedido | Resposta | Interpretação |
DO | WILL | O emissor começa utilizando a opção |
WON'T | O emissor não deve utilizar a opção | |
WILL | DO | O emissor começa utilizando a opção, após ter enviado DO |
DON'T | O emissor não deve utilizar a opção | |
DON'T | WON'T | O emissor assinala que desativou a opção |
WON'T | DON'T | O emissor assinala que o emissor deve desativar a opção |
Existem 255 códigos de opções. Contudo, o protocolo Telnet prevê um espaço de endereçamento que permite descrever novas opções. O RFC 855 explica como documentar qualquer outra nova opção.
As regras de negociação de opções permitem evitar situações de bloqueio (por exemplo, que uma das partes envie pedidos de negociação de opções a cada confirmação da outra parte). Os pedidos só devem ser emitidos durante uma mudança de modo. Quando uma das partes recebe um pedido de mudança de modo, ela deve adotá-lo apenas se já não se encontrar no modo adequado e quando houver um pedido que só deve ser inserido no fluxo de dados no lugar onde ele acontece.
Os seguintes caracteres são comandos que permitem controlar a exibição do terminal de Rede Virtual:
Comandos de controle da visualização: | |||
---|---|---|---|
Número | Código | Nome | Significado |
0 | NULL | Nulo | Este comando permite enviar dados ao host remoto sem que eles sejam interpretados (principalmente para indicar que o host local continua online). |
1 | LF | Avanço de linha | Este comando permite mover o cursor para a linha seguinte, na mesma posição horizontal. |
2 | CR | Retorno de carro | Este comando permite levar o cursor para a extrema esquerda da linha em curso. |
Assim, definimos o comando CRLF, composto pelos dois comandos CR e LF, um após o outro (em qualquer ordem), permitindo mover o cursor de impressão para a extrema esquerda da linha seguinte.
Os caracteres precedentes são os únicos (entre os 128 caracteres do código ASCII básico e os 128 caracteres do código ASCII estendido) a possuir um significado específico para o terminal de rede virtual. Os seguintes caracteres podem, eventualmente, ter um significado num terminal de rede virtual, mas não são necessariamente implementados:
Comandos de controle da exibição | |||
---|---|---|---|
Número | Código | Nome | Significado |
7 | BEL | Bell - Campainha | Este comando permite emitir um sinal sonoro ou visual sem alterar a posição do cursor |
8 | BS | BackSpace - Retrocesso | Este comando permite alterar a posição do cursor para a sua posição precedente |
9 | HT | Tabulação Horizontal | Este comando permite mudar a posição do cursor para a tabulação seguinte à direita |
11 | VT | Tabulação Vertical | Este comando permite modificar a posição do cursor para a tabulação seguinte da linha de baixo |
12 | FF | Form Feed - Avanço de página | Este comando permite alterar a posição do cursor para baixo, na página seguinte, conservando a posição horizontal |
Os caracteres abaixo são comandos que controlam a sessão Telnet. Estes comandos, para serem interpretados como tal, devem ser precedidos do caractere de escape* IAC. Assim, se estes bytes forem transmitidos sem estarem precedidos do caractere IAC, eles serão tratados como simples caracteres. Para transmitir o caractere IAC, é preciso que ele esteja duplicado.
O caractere de escape*, em computação, é a denominação de um único caractere em uma cadeia de caracteres que altera o significado de seu sucessor.
Os comandos que correspondem a uma negociação de opção devem ser seguidos de um byte que define a opção. Estes comandos permitem interromper sinais, excluir informações no cache do terminal, entre outras ações:
Os caracteres de controle da sessão | |||
---|---|---|---|
Número | Código | Nome | Significado |
240 | SE | Fim de negociação de opção | |
241 | NOP | No Operation - Sem operação | Este comando permite enviar dados ao hóspede remoto sem que estes sejam interpretados (principalmente para assinalar que o hóspede local continua online) |
242 | DM | Data Mark - Marca de dados | Permite esvaziar o conjunto dos tampões entre o terminal de rede virtual e o hóspede remoto. Ele corresponde a uma pressão na tecla Synch do NVT e deve imperativamente ser associado a uma marcação do bit Urgente de TCP |
243 | BRK | Break - Interrupção | Caractere Break do terminal virtual |
244 | IP | Interrupt Process - Interromper o processo | Este comando permite suspender, interromper ou abandonar o processo remoto |
245 | AO | Abort Output Abortar a saída | Este comando permite suspender, interromper ou abandonar a exibição do processo remoto |
246 | AYT | Are You There – Você está ai? | Este comando permite verificar que o sistema distante continua “vivo” |
247 | EC | Erase Character - Apagar caractere | Este comando permite remover o caractere precedente |
248 | EL | Erase Line - Apagar linha | Este comando permite excluir a linha precedente |
249 | GA | Go Ahead - Avance | Este comando permite inverter o controle, para as ligações half-duplex |
250 | SB | SB | Este comando indica que os dados que seguem são uma negociação da opção precedente |
251 | WILL | código de opção | |
252 | WON'T | código de opção | |
253 | DO | código de opção | |
254 | DON'T | código de opção | |
255 | IAC | Interpret As Command - Interpretar como um comando | Este comando permite interpretar o byte seguinte como um comando. O comando IAC permite ir além dos comandos básicos |
Você poderá encontrar mais informações sobre o Telnet acessando o RFC 854 em português, seu original em inglês e o artigo Como utilizar o Telnet.