CURSOS DE COMPUTAÇÃO – UTP – 2010 DISCIPLINA: Serviços de Redes PROFESSOR: ROBERTO AMARAL TELNET Protocolo padrão TCP/IP para serviço de terminal remoto. O TELNET permite que um usuário em um site interaja com um sistema remoto de tempo compartilhado em outro site, como se o teclado e o monitor do usuário estivessem conectados diretamente ao equipamento remoto. O TELNET permite que um usuário em determinado site estabeleça conexão TCP com um servidor login situado em outro site. O TELNET transmite, então, os toques no teclado do usuário diretamente ao computador remoto, como se estivessem sendo digitados no teclado conectado à máquina remota. Esse terminal também retorna a saída da máquina remota até a tela do usuário. O serviço recebe o nome de transparente, porque faz com que o teclado e o monitor do usuário pareçam estar conectados diretamente à máquina remota. Embora o TELNET não seja sofisticado se comparado a alguns protocolos de terminal remoto, ele é amplamente utilizado. Geralmente o software do cliente do TELNET permite que o usuário especifique a máquina remota fornecendo seu nome de domínio ou seu endereço IP. Por aceitar endereços IP, o TELNET pode ser usado quando o software de atribuição de nomes de domínio estiver sendo depurado. O TELNET oferece três serviços básicos. Em primeiro lugar, define um terminal virtual da rede fornecedora de uma interface padrão para sistemas remotos. Os programas clientes não precisam entender os detalhes de todos os sistemas remotos possíveis; eles são projetados para usar a interface padrão. Em segundo lugar, o TELNET inclui um mecanismo que permite ao cliente e ao servidor negociar opções e fornece um conjunto de opções padronizadas (p. ex., uma das opções verifica se os dados passados pela conexão usam o caractere padrão ASCII de sete bits ou o conjunto de oito bits). Finalmente, o TELNET trata ambas as pontas da conexão de forma simétrica. Em particular, o TELNET não obriga a entrada do cliente via teclado, nem obriga o cliente a ter a saída indicada na tela. Dessa forma, o TELNET permite que um programa arbitrário torne-se um cliente. Além do mais, qualquer ponta pode negociar opções. Quando um usuário cama o TELNET, um programa aplicativo existente na maquina do usuário torna-se o cliente. O cliente estabelece uma conexão TCP com o servidor por intermédio da qual irão se comunicar. Uma vez estabelecida a conexão, o cliente aceita toques de teclado do usuário e os envia de volta e apresenta-os na tela do usuário. O servidor deve aceitar uma conexão TCP de um cliente e, a seguir, retransmite dados entre a conexão TCP e o sistema operacional local. Na pratica, o servidor é mais complexo do que a demonstrado abaixo porque precisa conduzir várias conexões simultâneas. Em geral, um processo de servidor-mestre aguarda novas conexões e cria um novo escravo para cuidar de uma conexão em particular. Desse modo, “o servidor TELNET”, da figura abaixo representa o escravo que trata de uma conexão em particular. A figura mostra o servidor-mestre que espera novas solicitações, nem mostra os escravos cuidando das outras conexões. Prof. Roberto Amaral Página 1 29/05/2017 CURSOS DE COMPUTAÇÃO – UTP – DISCIPLINA: Serviços de Redes PROFESSOR: ROBERTO AMARAL Cliente lê dados de terminal Dispositivo de entrada e saída de dados do usuário 2010 Cliente envia dados ao servidor Client TELNET Servidor recebe dados Servidor envia dados Servidor TELNET Sistema Operacional Sistema Operacional S Inter-rede TCP/IP istema Operacio nal Trajeto de dados em um sessão de terminal remoto TELNET, enquanto trafega do teclado do usuário até um sistema de operação remoto. Acrescentar um servidor TELNET a um sistema timesharing geralmente requer modificações no sistema operacional. Usamos o termo pseudoterminal para descrever o ponto de entrada do sistema operacional que permite que o servidor de um programa em funcionamento, como de um teclado. É impossível construir um servidor TELNET, anão ser que o sistema operacional forneça tal recurso. Se o sistema suporta tal abstração de pseudoterminal, o servidor TELNET pode ser implementado com programas aplicativos. Cada servidor-escravo conecta um canal TCP de um cliente a um pseudoterminal específico. Fazer com que o servidor TELNET seja um programa em nível de aplicativo traz vantagens e desvantagens. A vantagem mais óbvia é tornar mais fácil a inclusão das modificações e o controle do servidor do que se o código estivesse vinculado ao sistema operacional. A desvantagem clara é a da ineficiência. Cada sinal trafega do teclado do usuário, através do sistema operacional e pela interligação em redes até a máquina do servidor. Após chegar à máquina de destino, os dados deverão trafegar pelo sistema operacional do servidor até o programa aplicativo do servidor e dele retornar ao sistema operacional do servidor em um ponto de entrada de um pseudoterminal. Finalmente, o sistema operacional remoto entrega o caractere ao programa aplicativo que o usuário está executando. Nesse ínterim, a saída (inclusive o eco remoto do caractere, se essa opção tiver sido selecionada) trafega de volta do servidor para o cliente fazendo o mesmo trajeto. Os leitores que compreendem os sistemas operacionais vão notar que, para implementação demonstrada na figura acima, cada tique no teclado requer que os computadores troquem de contexto de processamento diversas vezes. Na maioria dos sistemas, um troca de contexto adicional é necessária, porque o sistema operacional da maquina do servidor deverá retornar os caracteres do pseudoterminal para outro programa aplicativo (p. ex., um interpretador Prof. Roberto Amaral Página 2 29/05/2017 CURSOS DE COMPUTAÇÃO – UTP – DISCIPLINA: Serviços de Redes 2010 PROFESSOR: ROBERTO AMARAL de comando). Embora a troca de contexto seja dispendiosa, o esquema é prático porque os usuários não digitam em altas velocidades. Acomodação da heterogeneidade Para fazer com que o TELNET seja interoperacional entre o maior número possível de sistemas, ele deveria acomodar os detalhes dos computadores e sistemas operacionais heterogêneos. Por exemplo, alguns sistemas requerem que as linhas de textos sejam finalizadas pelo caractere ASCII de carriage control (CR). Outros requerem que seja o caractere ASCII de linefeed (LF) e outros, ainda, que seja a seqüência dos dos caracteres, CR-LF. Além disso, a maioria dos sistemas interativos fornece um recurso que permite ao usuário introduzir uma tecla que interrompe o programa em operação. Todavia, a tecla específica usada para isso varia de um sistema para outro(p. ex., alguns sistemas usam Control-C, enquanto outros usam ESCAPE). Para acomodar esta heterogeneidade, o TELNET define como as seqüências de dados e de comandos são enviadas através da Internet. A definição ;e conhecida como o terminal virtual de rede (NVT – Network Virtual Terminal). Como a figura abaixo ilustra, o software do cliente converte os toques de teclado e as seqüências de comandos do terminal do usuário para um formato NVT e os envia ao servidor. O software do servidor converte os dados e comandos recebidos em formato NVT para o formato requerido pelo sistema remoto. Para o retorno dos dados, o servidor remoto os converte do formato de máquina remota para o NVT, e o cliente local converte do formato NVT para o formato da máquina local. Dispositivo de entrada e saída de dados do usuário Formato do sistema cliente usado Cliente Conexão TCP por Inter-rede Formato NVT usado Servidor Sistema Servidor Formato do sistema do servidor usado Uso do formato NVT (Network Virtual Terminal) pelo TELNET A definição do formato NVT é bastante objetiva. Todas as comunicações envolvem bytes de oito bits. Na inicialização, o NVT utiliza a representação padrão USASCII de sete bits para os dados e reserva bytes com alta contagem de bits para seqüências de comandos. O conjunto de caracteres USACII inclui 95 caracteres graficamente “imprimíveis” (p. ex., letras, números e marcas de pontuação), assim como 33 códigos de “controle”. A todos os caracteres possíveis de serem impressos é atribuído o mesmo significado, como no conjunto de caracteres padrão USASCII. O padrão NVT define a interpretação para os caracteres de controle como mostra a figura abaixo. Prof. Roberto Amaral Página 3 29/05/2017 – CURSOS DE COMPUTAÇÃO UTP – DISCIPLINA: Serviços de Redes 2010 PROFESSOR: ROBERTO AMARAL Código de Controle ASCII Valor Decimal NULL 0 Nenhuma operação (não tem qualquer efeito sobre a saída) BELL 7 Som audível/sinal visível (nenhum movimento) BS 8 Mova para a esquerda a posição de um caracter HT 9 Mova à direita até a próxima marca de tabulação horizontal LF 10 Mova para baixo (verticalmente) até a próxima linha VT 11 Mova para baixo até a próxima marca de tabulação vertical FF 12 Mova até a borda superior da próxima página CR 13 Mova até a margem esquerda da linha atual Outro controle - Significado atribuído Nenhuma operação (não tem efeito algum sobre a saída) Interpretação NVT TELNET de caracteres de controle USASCII. O TELNET na especifica a localização das marcas de tabulação. Além da interpretação de caracteres de controle mostrada acima, o NVT define que a finalização da linha padrão seja feita através de uma seqüência de duplo caractere CR-LF. Quando um usuário pressionar a tecla que corresponde ao fim da linha no terminal local (p. ex., ENTER ou RETURN), o cliente TELNET deverá converte-la em CR-LF para a retransmissão. O servidor TELNET converte CR-LF para a seqüência de caracteres de fim de linha apropriados na máquina remota. Prof. Roberto Amaral Página 4 29/05/2017 CURSOS DE COMPUTAÇÃO – UTP – 2010 DISCIPLINA: Serviços de Redes PROFESSOR: ROBERTO AMARAL Passagem de comandos que controlam a instala remota Foi mencionado que a maioria dos prgrams fornecem um mecanismo que permite aos usuários interromper um programa em execução. Geralmente, o sistema operacional local vincula tais mecanismos a determinada tecla ou seqüência de teclas. Por exemplo, a não ser que o usuário especifique de forma diferente, muitos sistemas UNIX reservam o caractere gerado pela seqüência Control-C como a tecla de interrupção. Pressionando Control-C, o UNIX interrompe o programa em execução; o programa não recebe Control-C como uma entrada. O sistema pode reservar outros caracteres ou seqüência de caracteres para outras funções de controle. O NVT TELNET acomoda as funções de controle ao definir como elas são passadas do cliente para o servidor. Teoricamente, pensamos que o NVT aceita a entrada de um teclado que possa gerar mais de 128 caracteres possíveis. Supomos que o teclado do usuário possua teclas virtuais que correspondem às funções tipicamente usadas para controlar o processamento. Por exemplo, o NVT define uma tecla conceitual de “interrupção” que solicita a interrupção do programa. A figura abaixo lista as funções de controle permitidas pelo NVT Sinal Significado atribuído IP Interrupt Process (finalizar execução do programa) AO Abort Output (descartar informações resultantes) AYT Are You There (testar se o servidor responde) EC Erase Character (excluir caracteres anteriores) EL Erase Line (excluir toda a linha atual) SYNCH BRK Synchorniza (limpar a rota de dados até o ponto TCP de urgência, mas não interpretar os comandos) Break (tecla de interrupção ou sinal de atenção) Função de controle reconhecida pelo NVT TELNET. Conceitualmente, o cliente as recebe do usuário, juntamente com os dados normais, e as passa para o sistema do servidor onde deverão ser interpretadas. Na prática, a maioria dos teclados não possui teclas extras para os comandos. Em vez disso, os interpretadores de comandos dos sistemas operacionais dispõem de uma variedade de formas para gerá-los. Já mencionamos a técnica mais comum: a vinculação de um caractere ASCII individual a uma função de controle de modo que, quando a tecla é pressionada, o sistema operacional executa a ação apropriada em vez de aceitar o caractere como uma entrada. Os projetistas NVT optaram por manter os comandos separados do conjunto de caracteres normais ASCII por dois motivos. Em primeiro lugar, porque definir as funções de controle separadamente permite maior flexibilidade ao TELNET. É possível transferir todas as seqüências possíveis de caractere ASCII, entre o cliente e o servidor, assim como todas as funções de controle possíveis. Prof. Roberto Amaral Página 5 29/05/2017 CURSOS DE COMPUTAÇÃO – UTP – 2010 DISCIPLINA: Serviços de Redes PROFESSOR: ROBERTO AMARAL Em segundo lugar, ao fazer a separação entre os sinais e dos dados normais, o NVT permite ao cliente especificar os sinais sem ambigüidade – nunca se confunda se o caractere deverá ser tratado como dado ou função de controle. Para transmitir funções de controle por uma conexão TCP, o TELNET codifica-as usando uma seqüência de escape. Uma seqüência de escape utiliza um octeto reservado para indicar que um octeto de código de controle vem em seguida. No TELNET, o octeto reservado que inicia de escape é conhecido como octeto IAC (interpret as command). A figura abaixo lixa os comandos possíveis e a codificação decimal usada para cada um deles. Comando Valor Decimal Significado atribuído Interpreta o octeto seguinte como comando (quando o octeto IAC aparece na forma de dados, o emissor o duplica e envia a seqüência de dois octetos) IAC 255 DONT 254 Negação a solicitação de execução da opção especificada DO 253 Aprovação a permitir a opção especificada WONT 252 Negação a permitir a opção especificada WILL 251 Concordância em executar a opção especificada SB 250 Início de subnegociação de opções GA 249 O sinal “vá em frente”(go ahead) EL 248 O sinal “apagar linha” (erase line) EC 247 O sinal “apagar caractere” (erase character) AYT 246 O sinal “você está ai” (are you there) AO 245 O sinal “cancela saída” (abort output) IP 244 O sinal “interromper processo” (interrupt process) BRK 243 O sinal “interromper” (break) DMARK 242 O intervalo de fluxo de dados de um SYNCH (sempre acompanhado de uma notificação TCP Urgent) NOP 241 Fora de operação SE 240 Fim de subnegociação de opções EOR 239 Fim de registro Comandos TELNET e sua codificação individual. Os códigos somente têm significado se precedidos por caractere IAC. Quando ocorre um IAC nos dados, eles são enviados duas vezes. Como a figura mostra, os sinais gerados por teclas conceituais em um teclado NVT possuem comandos individuais correspondentes. Por exemplo, para solicitar que o servidor Prof. Roberto Amaral Página 6 29/05/2017 CURSOS DE COMPUTAÇÃO – UTP – DISCIPLINA: Serviços de Redes 2010 PROFESSOR: ROBERTO AMARAL interrompa o programa em execução, o cliente deve enviar a seqüência de dois octetos IAC IP (255 seguido de 244). Os comando adicionais permitem que o cliente e o servidor negociem quais opções usarão e que sincronizem a comunicação. Como forçar o servidor a ler uma função de controle Enviar funções de controle juntamente com dados normais nem sempre é suficiente para assegurar os resultados desejados. Para compreender melhor, considere a situação em que um usuário poderia enviar uma função de controle da interrupção de processo para o servidor. Geralmente, tal controle só é necessário quando o programa em execução, na máquina remota, estiver funcionando mal e o usuário desejar que o servidor o interrompa. Por exemplo, o programa pode estar produzindo um loop infinito, sem ler a entrada nem gerar uma saída. Infelizmente, se o aplicativo no lado do servidor parar de ler a entrada, os buffers do sistema operacional posteriormente serão todos preenchidos e o servidor fecará impossibilitado de receber mais dados no pseudoterminal. Quando isso ocorre, o servidor deve parar de ler os dados da conexão TCP, fazendo com que os buffers fiquem carregados. Oportunamente, o TCP da máquina do servidor começa a indicar uma janela de tamanho zero, impedindo que os dados fluam pela conexão. Se o usuário gerar uma função de controle de interrupção quando os buffers estiverem cheios, a função de controle jamais chegará ao servidor. Isso indica que o cliente poderá formar a seqüência de comando IAC IP e envia-lo à conexão TCP, mas como o TCP parou de transmitir à máquina do servidor, o servidor não lerá a seqüência de controle. Ocorre o seguinte: O TELNET não pode depender somente do stream de dados convencional para transmitir as seqüências de controle entre o cliente e o servidor, já que um aplicativo que esteja operando erroneamente e que precise ser controlado poderá inadvertidamente bloquear o stream de dados. Para resolver o problema, o TELNET usa o sinal urgente. O TCP implementa a sinalização urgente com um mecanismo de dados urgentes. Sempre que envia uma função de controle do stream de dados, o TELNET envia também um comando SYNCH. A seguir, o TELNET anexa o octeto reservado denominado marca de dados e faz com que o TCP sinalize ao servidor, enviando um segmento com o conjunto de bits de DADOS URGENTES. Os segmentos conduzindo dados urgentes omitem o controle de fluxo e chegam ao servidor imediatamente. Em resposta a um sinal urgente, o servidor lê e descarta todos os dados até encontrar a marca de dados. O servidor retorna ao processamento normal após encontrar marca de dados. Opções TELNET Nossa descrição simples de TELNET omite um de seus aspectos mais complexos: as opções. No TELNET, as opções são negociáveis, possibilitando ao cliente e ao servidor reconfigurar sua conexão. Por exemplo, dissemos que geralmente o stream de dados passa dados de sete bits e utiliza os octetos com o conjunto de oito bits para passar informações de controle Prof. Roberto Amaral Página 7 29/05/2017 CURSOS DE COMPUTAÇÃO – UTP – 2010 DISCIPLINA: Serviços de Redes PROFESSOR: ROBERTO AMARAL como o comando de Interrupção de Processamento. Todavia, o TELNET também oferece a opção que possibilita ao cliente e ao servidor transmitir dados de oito bits (quando transmitir dados de oito bits, o octeto reservado IAC deverá ser duplicado para que apareça em meio aos dados). O cliente e o servidor deverão negociar e ambos deverão concordar em transmitir dados de oito bits antes que tais transferências sejam possíveis. As opções TELNET são bastante amplas: algumas estendem a capacidade de forma geral, enquanto outras tratam de detalhes específicos. Por exemplo, o protocolo original foi projetado para um ambiente half-duplex onde era necessário informar à outra ponta para “prosseguir” antes que ela pudesse enviar quaisquer dados. Uma das opções controla se o TELNET opera em modo hal-duplex ou ful-duplex. Outra opção permite que o servidor da máquina remota determine o tipo de terminal do usuário. O tipo de terminal é importante para o software que gera seqüências de posicionamento de cursos (p. ex., um editor de tela completa executando em uma máquina remota). A figura abaixo apresenta as várias opções TELNET mas freqüentes implementadas. Nome Código RFC Significado atribuído Transmit Binary 0 856 Mude transmissão para um binário de 8 bits Echo 1 857 Suppress-GA 3 858 Status 5 859 Timing Mark 6 860 Terminal Type 24 884 End-of-Record 25 885 Linemode 34 Permita que um lado faça echo dos dados que recebe Solicite status de uma opção TELNET de uma instalação remota Solicite status de uma opção TELNET de uma instalação remota Solicite que marca de sincronização seja inserida no stream de retorno para sincronizar as duas extremidades de uma conexão Troque informações sobre a marca e o modelo do terminal sendo utilizado (permite que os programas ajustem a saída como seqüência de posicionamento de cursos para o terminal do usuário) Finalize dados enviados com código EOR Use edição local e envie as linhas completas em vez de caracteres específicos. Opções TELNET comumente usadas 1116 Negociação de opções TELNET A forma pela qual o TELNET negocia opções é interessante. Por ser razoável que um servidor inicie uma opção especial, o protocolo é projetado para permitir que qualquer uma das extremidades faça uma solicitação. Assim, diz-se que o protocolo é simétrico quanto ao processamento de opções. A extremidade que recebe responde a uma solicitação com uma aceitação, positiva ou com uma negação. Em terminologia TELNET, a solicitação é WILL X, o que significa você concorda em permitir que eu use a opção X? e a resposta é ou DO X ou DON’T X Prof. Roberto Amaral Página 8 29/05/2017 CURSOS DE COMPUTAÇÃO – UTP – DISCIPLINA: Serviços de Redes 2010 PROFESSOR: ROBERTO AMARAL significando, respectivamente, eu concordo em deixar que você use a opção X ou eu não concordo em deixar que você use a opção X. A simetria surge porque DO X requer que a extremidade que recebe comece a usar a opção X e WILL X e WONT X significam começarei a usar a opção X ou não começarei a usa-la. Outro interessante conceito de negociação surge quando ambas as extremidades solicitam a execução de uma implementação não-aperfeiçoada NVT (ou seja, sem nenhuma opção definida). Se uma das instalações que recebe a solicitação pode simplesmente declinar. Assim, é possível interoperar com versões mais recentes e mais sofisticadas de clientes e servidores TELNET (ou seja, softwares que compreendem mais opções) com opções mais antigas, menos sofisticadas. Se tanto o cliente quanto o servidor compreendem a nova opção, é possível melhorar a interação. Caso contrário, reverterão a um estilo menos eficiente, mas operacional. Podemos resumir: O TELNET usa um mecanismo simétrico de negociação de opções que permite aos clientes e servidores reconfigurar os parâmetros que controlam sua interação. Já que todos os softwares TELNET compreendem um protocolo NVT básico, clientes e servidores podem interoperar mesmo se um compreender opções que o outro não compreenda. Prof. Roberto Amaral Página 9 29/05/2017