O protocolo Telnet é um protocolo standard de Internet que permite io interface de terminais e de aplicações através da Internet. Este protocolo fornece as regras básicas para permitir ligar um cliente (sistema composto de uma afixação e um teclado) a um intérprete de comando (do lado do servidor).
O protocolo Telnet baseia-se numa conexão TCP para enviar dados em formato ASCII codificado em 8 bits entre os quais se intercalam sequências de controlo Telnet. Fornece assim um sistema orientado para a comunicação, bidireccional (half-duplex), codificado em 8 bits fácil de aplicar.
O protocolo Telnet assenta em três conceitos fundamentais:
Este protocolo é um protocolo básico, no qual se apoiam outros protocolos da sequência TCP/IP (FTP, SMTP, POP3,…). As especificações de Telnet não mencionam autenticação porque o Telnet está totalmente separado das aplicações que o utilizam (o protocolo FTP define uma sequência de autenticação acima do Telnet). Além disso, o protocolo Telnet é um protocolo de transferência de dados não seguro, o que quer dizer que os dados que veicula circulam às claras na rede (de maneira não codificada). Quando o protocolo Telnet é utilizado para ligar um hóspede distante à máquina na qual é aplicado como servidor, este protocolo é atribuído à porta 23.
Se exceptuarmos 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 através de Telnet consiste unicamente em transmitir os bytes no fluxo TCP (o protocolo Telnet precisa que os dados devem, por defeito - isto é, se nenhuma opção precisar o contrário- ser agrupados num tampão antes de serem enviados. Mais concretamente, isto significa que por defeito os dados são enviados linha por linha). Quando o byte 255 é transmitido, o byte seguinte deve ser interpretado como um comando. O byte 255 é assim nomeado IAC (Interpret As Command, traduza-se "interpretar como um comando). Os comandos são descritos posteriormente.
As especificações básicas do protocolo Telnet estão disponíveis no RFC 854, enquanto as numerosas opções são descritas nos RFC 855 a 861
| RFC concernant Telnet | |
|---|---|
| RFC 854 | Telnet Protocol Specifications |
| RFC 855 | Telnet Option Specifications |
| RFC 856 | Telnet binary transmission |
| RFC 857 | Telnet Echo Option |
| RFC 858 | Telnet Suppress Go ahead Option |
| RFC 859 | Telnet Status Option |
| RFC 860 | Telnet Timing Mark Option |
| RFC 861 | Telnet Extended options-list Option |
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 afixação). Por outro lado, as sessões dos terminais possuíam igualmente a sua própria maneira de controlar os fluxos de dados em entrada/saída.
Assim, em vez de criar adaptadores para cada tipo de terminal para poder haver uma interoperabilidade destes sistemas, decidiu-se a criação de um interface standard, chamado NVT (Network Virtual Terminal, leia-se "Terminal rede virtual"), fornecendo uma base de comunicação standard, composta por:
As especificações do protocolo Telnet permitem ter em conta o facto que certos terminais possam propôr serviços adicionais, não definidos nas especificações básicas (mas conformes às especificações), a fim de poder utilizar funções avançadas. Assim, estas funcionalidades traduzem-se em termos de opções. O protocolo Telnet propõe, por conseguinte, um sistema de negociações de opções que permitem a utilização de funções avançadas sob a forma de opções, iniciando pedidos para solicitar a autorização ao sistema distante.
As opções de Telnet afectam separadamente cada direção do canal de dados. Assim, cada extremidade pode negociar as opções, quer dizer, definir as opções que ela:
Desta maneira, cada uma das partes pode emitir um pedido de utilização de uma opção. A outra parte deve então responder se aceita ou não a utilização da opção. Se o pedido se refere a uma desactivaçã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 de 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 desactivou a opção |
| WON'T | DON'T | O emissor assinala que o emissor deve desactivar a opção |
Existem 255 códigos de opções. O protocolo Telnet prevê contudo um espaço de endereçamento que permite descrever novas opções.O RFC 855 explica como documentar qualquer nova opção.
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).
<ol>
Os caracteres seguintes são comandos que permitem controlar a afixação do terminal rede virtual :
| Encomendas de controlo da afixação | |||
|---|---|---|---|
| Número | Código | Nome | Significado |
| 0 | NULL | Null | Este comando permite enviar dados ao hóspede distante sem que estes sejam interpretados (nomeadamente para assinalar que o hóspede local ainda está em linha) |
| 1 | LF | Line Feed | Este comando permite deslocar o cursor de impressão para a linha seguinte, na mesma posição horizontal |
| 2 | CR | Carriage Return | Este comando (Retour Chariot) permite deslocar o cursor de impressão para a extrema esquerda da linha corrente |
Assim, define-se o comando CRLF, composto pelos dois comandos CR e LF um após o outro (em qualquer ordem) que permite deslocar 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 vasto) a possuir uma significado específico para o terminal rede virtual. Os caracteres seguintes podem eventualmente ter um significado num terminal rede virtual, mas não são necessariamente aplicados.
| Comandos de controlo da afixação | |||
|---|---|---|---|
| Número | Código | Nome | Significado |
| 7 | BEL | Bell | Este comando permite emitir um sinal sonoro ou visual sem alterar a posição do cursor |
| 8 | BS | BackSpace | Este comando permite alterar a posição do cursor para a sua posição precedente |
| 9 | HT | Horizontal Tab | Este comando permite alterar a posição do cursor para a tabulação seguinte à direita |
| 11 | VT | Vertical Tab | Este comando permite alterar a posição do cursor para a tabulação seguinte da linha de baixo |
| 12 | FF | Form Feed | Este comando permite alterar a posição do cursor para baixo à página seguinte conservando a posição horizontal |
Os caracteres seguintes são comandos que permitem controlar a sessão Telnet. Estes comandos, para serem interpretados como tal, devem ser precedidos do carácter de escape IAC (Interpret As Command). Assim, se estes bytes forem transmitidos sem estarem precedidos do carácter IAC, serão tratados como simples caracteres. Para transmitir o carácter IAC, é necessário que esteja precedido de um carácter de escape (ele mesmo), noutros termos, ele deve ser duplicado.
Os comandos que correspondem a uma negociação de opção devem ser seguidos de um byte que precisa a opção. Estes comandos permitem interromper sinais, suprimir informações no esconderijo do terminal, …
| Os caracteres de controlo da sessão | |||
|---|---|---|---|
| Número | Código | Nome | Significado |
| 240 | SE | Fim de negociação de opção | |
| 241 | NOP | No Operation | Este comando permite enviar dados ao hóspede distante sem que estes sejam interpretados (nomeadamente para assinalar que o hóspede local continua em linha) |
| 242 | DM | Data Mark | Permite esvaziar o conjunto dos tampões entre o terminal rede virtual e o hóspede distante. Corresponde a um toque sobre a tecka Synch do NVT e deve imperativamente ser associado a uma marcação de bit Urgente de TCP |
| 243 | BRK | Break | Carácter Break do terminal virtual |
| 244 | IP | Interrupt Process | Este comando permite suspender, interromper ou abandonar o processo distante |
| 245 | AO | Abort Output | Este comando permite suspender, interromper ou abandonar a afixação do processo distante |
| 246 | AYT | Are You There | Este comando permite verificar que o sistema distante continua “vivo” |
| 247 | EC | Erase Character | Este comando permite suprimir o carácter precedente |
| 248 | EL | Erase Line | Este comando permite suprimir a linha precedente |
| 249 | GA | Go Ahead | Este comando permite inverter o controlo, 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 | code d'option | |
| 252 | WON'T | code d'option | |
| 253 | DO | code d'option | |
| 254 | DON'T | code d'option | |
| 255 | IAC | Interpret As Command | Este comando permite interpretar o byte seguinte como um comando. O comando IAC permite ir além dos comandos básicos |
Artigo escrito por [mailto:webmaster@kioskea.net Jean-François PILLOU]