Protocolos da Internet (HTTP, FTP, SMTP, POP, IMAP, TELNET)

A comunicação entre servidor e clientes que permite que a internet funcione é mais complexa que se pode imaginar. Na camada de Aplicação dos modelos que suportam os protocolos TCP/IP e UDP/IP operam diversos protocolos de funções específicas que permitem o funcionamento dos diversos aplicativos que usamos diariamente. Cada um deles desenvolvido para atender uma necessidade específica surgida em um determinado momento da história.

Por exemplo, o protocolo FTP surgiu da necessidade de se compartilhar arquivos entre máquinas, o pop como padronização de trocas de mensagens e o HTTP para viabilizar toda a estrutura de hiperlinks que permite o funcionamento da web.  A seguir veremos a estrutura de funcionamento de alguns destes protocolos, chamados protocolos da camada de aplicação.

Protocolo Telnet

O TELNET é um protocolo padrão especificado pela RFCs 855 e 845. O telnet foi o primeiro aplicativo demonstrado em dezembro de 1964 para a admissão de um usuário remoto em um servidor. O formato atual do protocolo TELNET que suporta o aplicativo telnet foi definido em 1983, três anos depois que o TCP/IP. Trata-se de um protocolo de uso geral cujo objetivo é permitir a conexão, via terminal, de um cliente remoto em um dado servidor. Ele permite que usuários remotos possam estabelecer uma conexão TCP com um servidor. Por padrão, os servidores utilizam a porta 23 para conexões TELNET.

A maior parte dos aplicativos telnet são aplicativos de linha de comando. Desta forma, para que uma conexão seja estabelecida o usuário precisará invocar o aplicativo e o endereço IP do servidor desejado:

telnet 192.168.0.1

 Uma vez que este comando seja realizado, o cliente telnet será aberto no cliente e tentará estabelecer uma conexão com o servidor. Uma vez que a conexão seja aceita, cada caractere digitado no terminal do cliente será enviado para o servidor. Se este caractere for recebido o servidor devolverá o mesmo caractere para a tela do terminal do cliente. Desta forma os caracteres que o usuário vê em seu terminal são, por padrão, a resposta (eco) do caractere já aceito pelo servidor (MORAES, 2008).

Para que o programa Telnet execute a tarefa de autenticação e conexão, temos que os equipamentos remotos devem possuir um sistema operacional que contenha mecanismos de autorização de acesso via sistema de contas. A execução do logon em um computador qualquer conectado na Internet via Telnet pode ser feita conhecendo-se um nome de usuário e uma senha válidos no servidor.

Uma vez que o protocolo exista e seja executado tanto no servidor quanto no cliente, O servidor Telnet será acionado, enviando então um prompt para o estabelecimento da sessão, pedindo o nome do usuário e a senha necessários. Desde que as credenciais sejam aceitas, o cliente poderá utilizar qualquer aplicativo disponível no servidor (CARNEIRO, BRAGA e JÚNIOR, 1998).

Originalmente o telnet foi concebido como opção para a disponibilização de recursos entre clientes remotos. Hoje em dia o protocolo é utilizado como base de negociação de autenticação para outros protocolos da pilha TCP/IP (TANENBAUM, 1998).

Comandos TELNET

A Tabela 2 mostra uma lista de alguns dos comandos mais comuns do protocolo TELNET:

Use unset para desabilitar uma opção anteriormente definida usando o comando set.

Use o comando status para determinar se o computador que está executando o cliente Telnet está conectado.

Exibe informações de ajuda.

Comando

Descrição

open Use open nome_do_ host para estabelecer uma conexão Telnet com um host.
close Use o comando close para fechar uma conexão Telnet existente.
display Use o comando display para exibir as configurações atuais do cliente Telnet.
send Use o comando send para enviar comandos ao servidor Telnet. Há suporte para os seguintes comandos:ao Comando Abort output.ayt Comando “Are you there?”.Esc Envia o caractere de escape atual.ip Comando Interrupt process.synch Executa a operação de sincronização do Telnet.brk Envia um sinal de interrupção.Quaisquer outros comandos diferentes desses listados anteriormente serão enviados como uma sequência para o servidor Telnet. Por exemplo, sendabcd enviará a sequência abcd para o servidor Telnet, que emitirá um eco da sequência na janela da sessão Telnet.
quit Use o comando quit para fechar o cliente Telnet.
set Use o comando set com um dos seguintes argumentos para configurar o cliente Telnet para a sessão atual.Bsasdel A tecla Backspace funcionará como Delete.codeset opção Disponível apenas quando o idioma é definido como japonês. Defina o conjunto de códigos atual como opção, que pode ser:

  • Shift JIS
  • EUC japonês
  • JIS Kanji
  • JIS Kanji (78)
  • DEC Kanji
  • NEC Kanji

Crlf Novo modo de linha; faz com que a tecla RETURN envie 0x0D, 0x0A.

Delasbs A tecla Delete funcionará como Backspace.

Escapecaractere Alterna do modo da sessão Telnet para o modo de comando Telnet. Estando no modo de comando Telnet, pressione ENTER para voltar para o modo de sessão Telnet.

Localecho Desativa o eco local.

Logfilenome Especifica o nome do arquivo para o qual o log do Telnet é gravado para essa sessão. Se você não especificar o caminho do arquivo, ele será criado no diretório atual. Especificar um arquivo de log também ativa o registro em log.

Logging Ativa o registro em log para essa sessão.

mode {console | stream}O modo de operação.

Ntlm Ativa a autenticação NTLM.

term {ansi | vt100 | vt52 | vtnt} O tipo de terminal que você deseja que o cliente Telnet emule.

? Exibe informações de ajuda para set.

unset status

Obs.: O comando z não é reconhecido em todas as versões do serviço Telnet – nem mesmo em todas as versões UNIX. Você deve consultar a documentação da sua versão particular do Telnet para determinar se o comando z é aceito e, se for como reiniciar o Telnet após o comando z (CARNEIRO, BRAGA e JÚNIOR, 1998).

1.1. Protocolo FTP

O aplicativo ftp foi um dos primeiros aplicativos desenvolvidos para uso no que hoje chamamos de internet. Surgiu para permitir a troca de arquivos entre computadores ligados em rede. O protocolo FTP suporta este aplicativo. O protocolo FTP permite a troca de arquivos nos formatos ASCII e binário.

A primeira versão do protocolo FTP, desenvolvido em abril de 1971, antes da criação do TCP/IP. Na sua criação o FTP permita dois modos de transferência:

  • Direto: Transferência realizada entre duas máquinas conectadas;
  • Indireto: Transferência realizada entre duas máquinas utilizando-se os serviços de uma terceira.

Por padrão, todas as transferências FTP são realizadas através da porta 21. O cliente faz a requisição de uma conexão TCP para a porta 21 de um servidor. Esta conexão é chamada de conexão de controle e permanecerá aberta durante todo o processo de transferência. Assim que a conexão de controle é aceita e aberta, será criada uma nova conexão, desta vez chamada de conexão de dados. A conexão de dados é, por padrão, estabelecida na porta 21 do servidor. A conexão de controle será utilizada para administração da sessão de transferência (comandos, identificação, senhas) entre cliente e servidor (WIKIPÉDIA(4), 2009).

Para utilizar o FTP o usuário precisa executar um programa específico para isso, por exemplo, o Filezilla, ou possuir acesso à linha de comandos e utilizar um programa ftp para isso. Atualmente a maior parte dos navegadores web é capaz de utilizar este protocolo para o download de arquivos e, com o uso de plug-ins especiais, eventualmente o upload de arquivos.

No caso do uso de um aplicativo ftp de linha de comando podemos observar todo o processo de negociação do protocolo e entender os comandos necessários para a realização da troca de arquivos. O FTP faz parte dos protocolos da pilha TCP/IP que são baseados em comandos em claro[1].

Comandos do Protocolo FTP

Observando os comandos utilizados no FTP, podemos comparar estes comandos com os comandos de mesmo nome utilizados no Unix ou em sistemas operacionais derivados como o Linux. A seguir estão listados os principais comandos do FTP, para a gerência e troca de arquivos conforme está definido na RFC959 de forma resumida (REYNOLDS, 1985):

USER NAME (USER)

Nome de usuário: O campo argumento é uma cadeia de caracteres TELNET, que identifica o usuário que deseja ter acesso ao sistema de arquivos do servidor.

PASSWORD (PASS)

Senha: O campo argumento é uma cadeia de caracteres TELNET que contém a senha de acesso relativa ao usuário que deseja ter acesso ao sistema de arquivos do servidor.

ACCOUNT (ACCT)

Conta: O campo argumento é uma cadeia de caracteres TELNET que contém a identificação da conta do usuário que deseja ter acesso ao sistema de arquivos do servidor.

CHANGE WORKING DIRECTORY (CWD)

Trocar o diretório de trabalho: Este comando permite que o usuário trabalhe em outro diretório, do sistema de arquivos do servidor, sem a necessidade de criar uma nova conexão.

CHANGE TO PARENT DIRECTORY (CDUP)

Mudar para o diretório pai: Este comando permite que o usuário acesse o diretório pai do diretório de trabalho. Trata-se de um caso especial do comando CWD criado para facilitar a navegação no sistema de arquivos do servidor.

LOGOUT (QUIT)

Sair: Este comando termina a conexão com o servidor.

DATA PORT (PORT)

Porta: Determina qual porta TCP/IP será utilizada para conexão de dados. Existem padrões pé estabelecidos tanto para a porta que será utilizada para a conexão de dados quanto para a porta que será utilizada para a conexão de controle.

PASSIVE (PASV)

Passivo: Este comando solicita que o servidor aceite dados de uma porta não padrão e aguarde uma conexão em vez de iniciar uma conexão em resposta a um comando.

TRANSFER MODE (MODE)

Modo de transferência: O argumento é um caractere TELNET simples e único que especifica o modo de transferência que será utilizado. Pode ser o S para o modo stream, o B para o modo blocos ou o C para o modo comprimido.

RETRIEVE (RETR)

Recupere: Este comando faz com que o servidor transfira uma cópia do arquivo especificado para outro lugar no próprio servidor ou para um diretório na máquina do cliente.

STORE (STOR)

Armazene: Este comando faz com que o servidor aceite os dados transferidos do cliente via conexão de dados e armazene estes dados em um arquivo em seu próprio sistema de arquivos.

RENAME TO (RNTO)

Renomeie: Este comando especifica o novo caminho para um arquivo especificado.

DELETE (DELE)

Apague: Este comando faz com que o arquivo especificado seja apagado no sistema de arquivos do servidor.

REMOVE DIRECTORY (RMD)

Remover diretório: Este comando faz com que o diretório especificado seja removido do sistema de arquivos do servidor.

MAKE DIRECTORY (MKD)

Faça diretório: Este comando cria um diretório novo no sistema de arquivos do servidor.

PRINT WORKING DIRECTORY (PWD)

Imprima o diretório corrente: Este comando faz com que o caminho do diretório corrente seja devolvido ao cliente.

LIST (LIST)

Listar: Este comando provoca a criação de uma lista de dados de arquivos existentes no diretório corrente no servidor. Esta lista é então, enviada para o cliente.

Exemplo de transação FTP:

Como a maior parte dos protocolos em claro da camada de aplicação, o FTP obedece a uma sequência requisição-resposta padrão, como este exemplificado, e comentado, a seguir, com o uso do aplicativo ftp em linha de comando em um sistema Unix (Introduction to FTP, 1993):

ux1 4> ftp ftp.cso.uiuc.edu (abrir a seção com o servidor)

Connected to ux3.cso.uiuc.edu.
220 ux3.cso.uiuc.edu FTP server (Version 2.0WU(11) Tue Apr 13 13:24:04 CDT 1993)
ready.

Name (ftp.cso.uiuc.edu:ward): anonymous (log como anonimo)
331 Guest login ok, send your complete e-mail address as password.
Password: lynnward@uiuc.edu (digitar um email como senha)
230-Please read the file README

230-  it was last modified on Mon Mar 15 11:54:07 1993 – 238 days ago
230 Guest login ok, access restrictions apply.
Remote system type is UNIX.

Using binary mode to transfer files.

ftp> dir (Mostra o diretório corrente)
200 PORT command successful.

150 Opening ASCII mode data connection for /bin/ls.
total 1598

drwxr-xr-x   22 root     wheel       1024 Oct  7 10:40 .

drwxr-xr-x   22 root     wheel       1024 Oct  7 10:40 ..
drwxrwxr-x    2 zinzow   pc           512 Mar  2  1991 .bin
-rwxr-xr-x    1 root     wheel       1000 Apr 14  1993 .cache
-rw-rw-r–    1 root     amiga       2073 Feb 24  1989 .microupdate
-rw-rw-r–    1 root     amiga       2050 Feb 24  1989 .microupdate~
drwxr-xr-x    3 383      ftp         1024 Nov  4 12:00 ACM
-rw-r–r–    1 zinzow   ftp         4427 Mar 15  1993 README

drwxrwxr-x   11 wahlmann amiga        512 Aug 22 00:47 amiga
drwxrwxr-x    2 zinzow   ftp         1024 Jan 20  1993 bbs
drwxr-xr-x    2 root     wheel        512 Apr 13  1993 bin

d–x–x–x    2 root     wheel        512 Apr 13  1993 dev
drwxrwxr-x   15 138      wheel        512 Apr 15  1993 doc

226 Transfer complete.

ftp> ascii (determina que a tranferência sera ASCII)

200 Type set to A.

ftp> get README (tranfere o arquivo README para o cliente)

200 PORT command successful.

150 Opening ASCII mode data connection for README (4427 bytes).

226 Transfer complete.

4523 bytes received in 0.04 seconds (1.1e+02 Kbytes/s)

Protocolo SMTP

O protocolo SMTP (Simple Mail Transfer Protocolo ou protocolo simples de transferência de correio) é um dos protocolos que suportam o processo de envio de mensagens eletrônicas via internet. Definido pela RFC 821 este protocolo utiliza o TELNET para autenticação e, uma vez que o cliente seja autenticado, realiza uma sequência de comandos para o envio do correio eletrônico (e-mail) para o servidor que, por sua vez, efetuará a entrega ao destinatário ou fará o roteamento para o servidor deste usuário (TANENBAUM, 1998) (CARNEIRO, BRAGA e JÚNIOR, 1998).

O protocolo SMTP é baseado no seguinte processo de comunicação: um remetente SMTP estabelece um canal de transmissão (requisição-resposta) com um servidor SMTP, que pode ser tanto o destino final do mail enviado quanto um destino intermediário. Os comandos do SMTP são produzidos pelo cliente SMTP e enviados para o servidor (CARNEIRO, BRAGA e JÚNIOR, 1998). Como ocorre na maioria dos protocolos da camada de aplicação TCP/IP, os comandos gerados pelo cliente provocam um eco ou resposta do servidor (MORAES, 2008).

Uma vez que o processo de conexão TELNET tenha sido encerrado, o cliente SMTP envia um comando MAIL indicando assim o remetente do mail em questão. Se o servidor SMTP puder receber essa mensagem, ele responde com um OK. Feito isto, o cliente SMTP envia um comando RCPT, para a identificação do destinatário da mensagem. Se o servidor SMTP puder receber a mensagem para esse recipiente, ele responde com um OK; se não puder receber, ele rejeita esse destinatário. Ocorrendo essa rejeição, o cliente SMTP e o servidor SMTP podem “negociar” diversos destinatários. Quando esses destinatários tiverem sido “negociados”, o remetente envia os dados de mensagem, terminado com uma sequência especial. Se o servidor processar com sucesso os dados, é dado então o OK como resposta (CARNEIRO, BRAGA e JÚNIOR, 1998).

Exemplo de seção SMTP:

#telnet smtp.fatec.br 25

HELO serverxx.sala160.fatec.br (substituir xx pelo número do seu PC)

250 Hello serverxx.sala160.fatec.br, pleased to meet you

MAIL FROM: professor@unive.br

250 ana@consumidor.br… Sender ok

RCPT TO: axxxxx@fatec.br (substituir  pelo seu endereço e-mail)

250 axxxxx@fatec.br … Recipient ok

DATA

354 Enter mail, end with “.” on a line by itself

Subject: Mensagem do professor

(linha em branco)

Boas notícias! Você já terminou o curso! O diploma está à sua

espera nos serviços académicos.

Professor

. (escrever um ponto final numa linha em branco)

250 Message accepted for delivery

QUIT

221 smtp.fatec.br closing connection

Neste exemplo, todos os comandos SMTP foram feitos sobre uma conexão TELNET. Este exemplo foi retirado das notas de aula e inclui as respostas do servidor obtidas durante os exercícios práticos.

Comandos SMTP

A seguir temos uma lista dos principais comandos do protocolo SMTP compilados e simplificados para facilitar o entendimento (TANENBAUM, 1998) (CARNEIRO, BRAGA e JÚNIOR, 1998) (MORAES, 2008).

HELO (HELLO) (Obrigatório)

Identifica o Emissor da mensagem para o Receptor.

MAIL(Obrigatório)

Este comando inicializa uma transação de mail na qual uma mensagem é enviada a uma ou mais caixa de mensagem (mailbox).

RCPT (ReCiPienT)(Obrigatório)

Este comando identifica o destinatário da mensagem; múltiplos destinatários são definidos por múltiplos usos desse comando.

DATA(Obrigatório)

Inicializa a transmissão da mensagem, após seu uso é transmitido o conteúdo da mensagem, que pode conter qualquer um dos 128 caracteres ASCII. O seu término é especificado por uma sequência “<CRLF>.<CRLF>”.

RSET (ReSET)(Obrigatório)

Este comando determina que a operação atual de mail deverá ser abortada. Todos os dados referentes são descartados.

SEND

Este comando é usado para inicializar uma transação de mail na qual uma mensagem é enviada para um ou mais terminais onde estejam os destinatários e não para os seus mailboxes. É um comando alternativo ao comando MAIL

SOML (Send Or MaiL)

Este comando é usado para inicializar uma transação de mail na qual uma mensagem é enviada para um ou mais terminais onde estejam os destinatários ou a seus mailboxes. A mensagem é direcionada aos terminais dos destinatários ativos no momento (e aceitando mensagens) caso contrário é direcionada aos seus mailboxes. É alternativo ao comando MAIL.

SAML (Send And MaiL)

Este comando é usado para inicializar uma transação de mail na qual uma mensagem é enviada para um ou mais terminais dos destinatários e aos seus mailboxes. A mensagem é direcionada aos terminais dos destinatários ativos no momento (e aceitando mensagens) e a todos os mailboxes.

VRFY (VeRiFY)

Este comando solicita ao Receptor-SMTP a confirmação de que o argumento identifica um usuário conhecido. Se for identificado é retornado o nome completo do usuário (se este possuir) e seu mailbox completo.

EXPN (EXPaNd)

Este comando solicita ao Receptor-SMTP a confirmação de que o argumento identifica uma lista de usuários de mail (mailing list). Se for identificada serão retornados os membros desta lista no mesmo formato retornado pelo comando VRFY.

HELP

Este comando faz com que o Receptor-SMTP envie informação de ajuda ao Emissor-SMTP.

NOOP(Obrigatório)

Este comando não possui efeitos nem parâmetros. Apenas faz com que o receptor envie um OK.

QUIT(Obrigatório)

Este comando determina que o Receptor-SMTP envie um OK e então feche o canal de comunicação com o Emissor-SMTP.

TURN

Este comando faz com que o Receptor e o Emissor troquem de papéis, o Receptor fica como Emissor e o Emissor como Receptor.

Protocolo POP

O Post Office Protocol, ou protocolo de agência de correio, é um protocolo desenvolvido para permitir a recuperação de correios eletrônicos, mensagens, de servidores de e-mail (TANENBAUM, 1998). Existem várias versões deste protocolo. A mais atual é conhecida como POP3. O funcionamento do POP3 para recolhimento de mensagens baseia-se nas seguintes etapas:

  • Estabelecemos uma conexão TCP entre o aplicativo cliente de e-mail e o servidor onde está a caixa de correio
  • O cliente de e-mail autentica o usuário no servidor;
  • Todas as mensagens existentes na caixa de correio são transferidas sequencialmente para a máquina cliente;
  • As mensagens são apagadas da caixa de correio;
  • A ligação com o servidor é terminada;
  • O utilizador pode agora ler e processar as suas mensagens (off-line).

Opcionalmente, o servidor utilizando o protocolo POP3 pode ser configurado para que as mensagens não sejam apagadas da caixa de correi (WIKIPEDIA(2), 2011) o.

Assim como o SMTP, e a maior parte dos protocolos da camada de aplicação da pilha TCP/IP, o POP3 também consiste de um conjunto mensagens em formato requisição-mensagem sobre uma conexão TELNET.

Exemplo de sessão POP3

A seguir temos um exemplo de uma seção POP3 sobre TELNET que permite a visualização dos passos necessários a recuperação de mensagens (REIS, 2009):

telnet pop3.net4b.pt 110 Trying 195.245.176.7… Connected to pop3.net4b.pt. Escape character is ‘^]’. +OK <20949.1069262902@smtp.net4b.pt>

user mailboxnormal +OK

pass senha +OK

list +OK 1 665 2 672 3 779 4 938 5 604932 6 143199 7 28411 . stat +OK 7 779596 top 1 0 +OK 665 octets Return-Path: <mailbox.normal@netfacil.tk> Delivered-To: mailbox.normal@netfacil.tk Received: (qmail 7048 invoked from network); 13 Aug 2002 12:16:16 +0100 Received: from unknown ([10.0.3.1]) (envelope-sender <>) by smtp.lx.esp (qmail-ldap-1.03) with QMQP for <>; 13 Aug 2002 12:16:16 +0100 Message-ID: <20020813111616.13248.qmail@web-1.lx.esp> Date: 13 Aug 2002 12:16:16 +0100 From: “Mailbox Normal” <mailbox.normal@netfacil.tk> To: mailbox.normal@netfacil.tk Subject: Mensagem 1 X-Mailer: OniMail 0.05 – 200103131825 X-IPAddress: 195.245.189.138 MIME-Version: 1.0, retr 1 +OK 665 octets Return-Path: <mailbox.normal@netfacil.tk> Delivered-To: mailbox.normal@netfacil.tk Received: (qmail 7048 invoked from network); 13 Aug 2002 12:16:16 +0100 Received: from unknown ([10.0.3.1]) (envelope-sender <>) by smtp.lx.esp (qmail-ldap-1.03) with QMQP for <>; 13 Aug 2002 12:16:16 +0100 Message-ID: <20020813111616.13248.qmail@web-1.lx.esp> Date: 13 Aug 2002 12:16:16 +0100 From: “Mailbox Normal” <mailbox.normal@netfacil.tk> To: mailbox.normal@netfacil.tk Subject: Mensagem 1 X-Mailer: OniMail 0.05 – 200103131825 X-IPAddress: 195.245.189.138 MIME-Version: 1.0 . dele 1 +OK quit +OK Connection closed by foreign host.

Comandos do Protocolo POP3

A seguir temos uma lista dos principais comandos do protocolo POP3:

Comando

Descrição

USER identidade

Este comando permite a autenticação. Deve ser seguido da identidade do utilizador, quer dizer, uma cadeia de caracteres que identificam o utilizador no servidor. O comando USER deve preceder o comando PASS.

PASS senha

O comando PASS, permite indicar a senha do utilizador, cuja identidade foi especificada por um comando USER.

STAT

Informação sobre as mensagens contidas no servidor

RETR

Número da mensagem a recuperar

DELE

Número da mensagem a suprimir

LIST [msg]

Número da mensagem a afixar

NOOP

Permite deixar a ligação aberta no caso de inatividade

TOP <messageID> <n>

Comando que adiciona n linhas da mensagem, cujo número é dado em argumento. No caso de resposta positiva do servidor, este devolve os cabeçalhos da mensagem, seguidamente uma linha virgem e por último as n primeiras linhas da mensagem.

UIDL [msg]

Pede ao servidor para enviar de novo uma linha que contém informações sobre a mensagem eventualmente dada em argumento. Esta linha contém uma cadeia de caracteres, chamada lista de identificador única, permitindo identificar de maneira única a mensagem no servidor, independentemente da sessão. (O argumento opcional é um número que corresponde a uma mensagem existente sno servidor POP, quer dizer uma mensagem não apagada).

QUIT

O comando QUIT pede a saída do servidor POP3. Provoca a supressão de todas as mensagens marcadas como apagadas e reenvia o estado desta ação.

Protocolo IMAP

Um dos problemas que foi percebido com a popularidade do uso dos protocolos SMTP e POP3 foi a falta de um lugar centralizado para armazenamento das mensagens. Um usuário que se consulta seus e-mails de vários computadores ficaria com seus e-mails espalhados por estes vários computadores (TANENBAUM, 1998). Para solucionar este problema, entre outros, foi proposto o protocolo IMAP. Definido pela RFC 3501 o Internet Message Access Protocol ou protocolo internet de acesso a mensagens opera utilizando a porta 143 por padrão e está na sua quarta revisão. Sendo oficialmente conhecido como IMAP4rev1.

O protocolo IMAP4rev1 inclui operações de criação, exclusão e renomeação caixas de correio, verificação da existência de novas mensagens, remoção permanente de mensagens, fixação de bandeiras, coleta seletiva de mensagem de atributos selecionados e coleta seletiva de textos. As mensagens no IMAP4rev1 são acessadas através da utilização de números. Estes números são ou indicadores da ordem das mensagens ou identificadores exclusivos (REDE GRUPO DE TRABALHO M. CRISPIN , 2003).

Uma seção IMAP4rev1 consiste no estabelecimento de uma conexão cliente/servidor via TCP/IP, uma mensagem de saudação inicial é originada no cliente e respondida pelo servidor. Estas interações cliente/servidor consistem de um comando enviado pelo cliente, dados originados do servidor, e uma resposta de conclusão emitida pelo servidor. Todas as interações entre cliente e servidor consistem de linhas compostas de cadeias de caracteres finalizadas por um para CRLF (REDE GRUPO DE TRABALHO M. CRISPIN , 2003).

Assim como o SMTP, o POP3 e o FTP o protocolo IMAP4rev1 consiste de uma série de comandos especiais, em texto em claro, sob uma seção TELNET.

Exemplo de uma sessão IMAP4rev1

A seguir vemos o exemplo de uma sessão IMAP4rev1 (LINUX FOR ENGINEERING AND IT

APPLICATIONS, 2010):

telnet gateway.linux.class 143

Trying 192.168.2.240…

Connected to 192.168.2.240.

Escape character is ‘^]’.

* OK [CAPABILITY IMAP4REV1 LOGIN-REFERRALS STARTTLS

AUTH=LOGIN] gateway.linux.class IMAP4rev1 2003.339 at Wed, 13 Apr 2005 01:38:58 -0400 (EDT)

A1 LOGIN mailtest Password

A1 OK [CAPABILITY IMAP4REV1 IDLE NAMESPACE MAILBOX-REFERRALS BINARY UNSELECT SCAN SORT THREAD=REFERENCES

THREAD=ORDEREDSUBJECT MULTIAPPEND] User mailtest authenticated

A2 SELECT Inbox

* 2 EXISTS

* 2 RECENT

* OK [UIDVALIDITY 1113370837] UID validity status

* OK [UIDNEXT 3] Predicted next UID

* FLAGS (Answered Flagged Deleted Draft Seen)

* OK [PERMANENTFLAGS (* Answered Flagged Deleted Draft Seen)] Permanent flags

* OK [UNSEEN 1] first unseen message in /var/mail/mailtest

A2 OK [READ-WRITE] SELECT completed

A3 FETCH 2 BODY[HEADER]

* 2 FETCH (BODY[HEADER] {670}

Return-Path:

X-Original-To: mailtest@gateway.linux.class

Delivered-To: mailtest@gateway.linux.class

Received: from node18.linux.class (node18 [192.168.2.38])

        by gateway.linux.class (Postfix) with ESMTP id A291B2B15C

        for ; Tue, 12 Apr 2005 22:24:53 -0400 (EDT)

Received: from me@here.com (unknown [192.168.2.250])

        by node18.linux.class (Postfix) with SMTP id 4653B14112

        for ; Tue, 12 Apr 2005 22:24:03 -0400 (EDT)

To: some_guru@somewhere.com

From: pp@pp.com

Subject: Forged e-mail

Message-Id: <20050413022403.4653B14112@node18.linux.class>

Date: Tue, 12 Apr 2005 22:24:03 -0400 (EDT)

)

* 2 FETCH (FLAGS (Recent Seen))

A3 OK FETCH completed

A4 FETCH 2 BODY[TEXT]

* 2 FETCH (BODY[TEXT] {88}

Hey,

The “To:” and “From:” are non-existent, but you still get the e-mail.

bye, bye

)

A4 OK FETCH completed

A5 LOGOUT

* BYE gateway.linux.class IMAP4rev1 server terminating connection

A5 OK LOGOUT completed

Connection closed by foreign host.

Protocolo HTTP

Em 1989 Tim Berners Lee publicou a primeira página web e, com ela, criou a primeira versão, não oficial do protocolo HTTP. O Hypertext transfer protocol ou protocolo de transferência de hipertexto foi criado para facilitar a citação de trabalhos em artigos científicos e acabou moldando nosso mundo (CAPANEMA, 2009). Na verdade a web só se popularizou depois que o protocolo foi definido e depois da criação do navegador Mosaic por Marc Andreessen, da Universidade de Illinois (TANENBAUM, 1998).

O HTTP, atualmente na versão 1.1 revisão 15, formalmente HTTP/1.1rev15 define a estrutura das mensagens trocadas entre cliente e servidor durante a navegação web. Trata-se do mais importante protocolo da camada de aplicação da pilha TCP/IP e, como a maioria dos outros, consiste em um sistema de requisição-resposta em claro. Ou seja, o cliente envia uma requisição, no formato de uma mensagem de texto, e recebe uma resposta do servidor também no formato de uma mensagem de texto. Cabe ao navegador interpretar esta mensagem de texto e montar a página web para o usuário.

No âmbito do protocolo HTTP, os comandos trocados entre o cliente e o servidor são chamados de mensagens, ou requisições, e possuem uma sintaxe e semânticas especiais.

Mensagens do protocolo HTTP/1.1

A seguir há uma lista das mensagens que podem ser trocadas entre cliente e servidor (MORAES, 2008) (WIKIPÉDIA(5), 2011) (TANENBAUM, 1998).

GET

Solicita algum recurso como um arquivo ou um script CGI (qualquer dado que estiver identificado pelo URI) por meio do protocolo HTTP.

Host: www.exemplo.com

O cabeçalho Host reconhece vários diferentes nomes DNS que tenham o mesmo IP.

HEAD

Variação do GET em que o recurso não é retornado. É usado para obter  metainformaçoes da página por meio do cabeçalho da resposta.

POST

Envia dados para serem processados pelo servidor. Os dados são incluídos no corpo do comando.

PUT

Envia uma mensagem contendo um recurso para ser armazenado em um servidor específico.

DELETE

Exclui um recurso específico do servidor

TRACE

Ecoa o pedido, de maneira que o cliente possa saber o que os servidores intermediários estão mudando em seu pedido. O servidor destino deverá retornar ao cliente a mensagem recebida

OPTIONS

Requisita ao servidor destino uma lista de métodos que podem ser utilizados durante o ciclo requisição-resposta.

CONNECT

Esta mensagem deve ser utilizada com dispositivos proxies que possam se tornar um túnel de comunicação segura.

Exemplo de sessão HTTP

Assim como o SMTP, POP3 e FTP, o HTTP/1.1 também pode ser utilizado via TELNET. Desta forma, é simples de acompanhar o ciclo requisição-resposta, e diagnosticar possíveis problemas de conexão ou configuração, tanto no servidor quanto no cliente. A seguir está um exemplo de conexão realizado para testes e para a redação desta série de artigos:

>telnet 192.168.1.1 80

Trying 192.168.1.1…

Connected to teste.server.com.

Escape character is ‘^]’.

GET /index.htm HTTP/1.1

host: teste.server.com

HTTP/1.1 200 OK

Date: Mon, 11 OCT 2011 16:38:00 GMT

Server: Apache/2.4.23 (Unix)  (Ubuntu/Linux) mod_ssl/2.8.12 OpenSSL/0.9.6 PHP/4.1.2 mod_perl/1.27 FrontPage/5.0.2.2623

Last-Modified: Thu, 05 Jul 2011 06:16:05 GMT

ETag: “158e008c-182c-40e365d5”

Accept-Ranges: bytes

Content-Length: 6188

Connection: close

Content-Type: text/html

<html>

<head>

<body>

Oi este é o index.htm

</body></html>

Connection closed by foreign host.

>

Internet além dos protocolos

Até aqui vimos como funcionam os principais protocolos da camada de aplicação da pilha TCP/IP. Estes protocolos, por si só, não explicam o funcionamento da internet.  Existem protocolos complementares que permitem a navegação da internet, o envio e transporte de textos ricos, imagens, vídeos, voz e tudo mais que trafega na grande rede nos dias de hoje. Nesta seção, vamos estudar alguns destes protocolos:

URL, URI, URN

A cada pagina web, e a cada recurso disponível na internet, é atribuído um URL (Uniform Resource Locator – Localizador Universal de Recursos) que funciona como o nome universal da pagina. Os URLs têm três partes: o protocolo (também chamado esquema), o nome DNS da maquina em que a pagina esta e um nome local que indica a pagina especifica (normalmente, um nome de arquivo na maquina onde ele reside) (TANENBAUM, 1998). A URL é definida na RFC 1738 de autoria do próprio Tim Berners Lee (LEE, 1994).

A URL pode ser considerada como um caso específico da URI (Universal Resource Identifiers – Identificador Universal de Recursos) especificada pela RFC 3305. O objetivo da URI é permitir a identificação de qualquer recurso disponível na internet de forma universal e inequívoca. Já o URN (Universal Resource Name) serve para especificar o nome de qualquer recurso disponível na Internet (MORAES, 2008).

Protocolo Exemplo
HTTP http://www.google.com
FTP ftp://ftp.globo.com
TELNET telnet://www.w3.org:80
ARQUIVO LOCAL Local file://home/cris/trabalho.doc

Tabela 4 – Exemplos de URLs (TANENBAUM, 1998)

A Tabela 4 mostra alguns exemplos de URLs destacando o protocolo usado para a localização do recurso. Observe que é possível identificar inclusive um arquivo na máquina do próprio cliente.

Em resumo, as URLs foram projetadas não só para permitir que os usuários navegassem na Web, como também para permitir o uso de FTP, noticias, mensagens de correio eletrônico, telnet e etc. Tornando quase desnecessários os programas especializados para estes e outros serviços (TANENBAUM, 1998).

Mime

O protocolo MIME (Multipurpose Internet Mail Extensions – Extensões Multifunção para Mensagens de Internet) é um protocolo que foi definido com o objetivo de permitir a inclusão de dados não-ASCII via e-mail.  Este protocolo tornou-se necessário já que o protocolo SMTP trabalha apenas com caracteres ASCII, formados por oito bits: o bit mais significativo em zero, seguido por sete bits ASCII.

O MIME atua convertendo os dados não-ASCII inseridos pelo usuário, para dados ASCII, de forma que possam ser transmitidos pelo SMTP. No receptor é feito o processo inverso, como ilustrado na figura 1.

Figura 5 – Esquema do Protocolo Mime (DUARTE e VAZ, 2009)

A ideia básica do MIME é permitir o envio de conteúdo diverso sem alterar as especificações dos protocolos relacionados com o envio de mensagens eletrônicas (SMTP, POP3 e IMAP). Para isto o MIME define cinco novos cabeçalhos de mensagens, como mostra a Tabela 5. O primeiro deles informa ao agente do usuário receptor da mensagem não apenas que ele esta lidando com uma mensagem MIME, como também a versão do padrão MIME que esta sendo usada. Presume-se que qualquer mensagem que não contenha um cabeçalho MIME-Version: seja uma mensagem de texto simples escrita em linguagem comum e processada como tal (TANENBAUM, 1998).

Cabeçalho Significado
MIME-Version Identifica a versão do MIME
Content-Description Cadeia de caracteres inteligível que identifica o conteúdo da mensagem
Content-ld Identificador exclusivo
Content-Transfer-Encoding Como o corpo da mensagem e codificado para transmissão
Content-Type Tipo e formato do conteúdo

Tabela 5 – Cabeçalho MIME (TANENBAUM, 1998)

Com o tempo foi necessária à inclusão de um conjunto de subtipos para identificar exatamente o tipo de arquivo que estava sendo transmitido assim, por exemplo, temos o tipo text subtipo enriched que indica a transmissão de texto rico, o tipo image subtipo Gif que indica a transmissão de uma imagem do Gif. Estes subtipos foram especificados na RFC 1521.

Uma vez que o protocolo para transmissão de conteúdo diversificado – MIME – estava pronta foi utilizada em conjunto com outros protocolos como o HTTP (CARNEIRO, BRAGA e JÚNIOR, 1998).

WIKIPÉDIA(4). Protocolo FTP. WIKIPÉDIA, a enciclopédia livre, 2009. Disponivel em: <http://pt.wikipedia.org/w/index.php?title=File_Transfer_Protocol&oldid=27495060>. Acesso em: 1 Novembro 2011.


[1] Diz-se que um comando está em claro quando não está criptografado e permite a leitura e o entendimento por seres humanos. Imita, ou usa uma linguagem humana.

Bibliografia

CARNEIRO, L. F.; BRAGA, N. C.; JÚNIOR, N. A. Redes de computadores. Rio de Janeiro: Rede Rio, 1998.

INTRODUCTION to FTP. Cites Data Center, 1993. Disponivel em: <http://opcenter.cites.uiuc.edu/nas/nash/apps/ftp.html>. Acesso em: 1 Novembro 2011.

MORAES, A. F. D. Redes de Computadores: Fundamentos. 6ª. ed. São Paulo: Érica, 2008.

REIS, F. Pop3 por Telnet. Informações sobre Internet e Informática, 2009. Disponivel em: <http://www.fariareis.com/telnet_pop3.htm>. Acesso em: 27 Outubro 2011.

REYNOLDS, J. RFC 959 Tradução para o Português. Normes – Internet, 1985. Disponivel em: <http://www.normes-internet.com/normes.php?rfc=rfc959&lang=pt>. Acesso em: 1 Novembro 2011.

TANENBAUM, A. S. Redes de Computadores. 3ª. ed. São Paulo: Editora Campus, 1998.

WIKIPÉDIA(4). Protocolo FTP. WIKIPÉDIA, a enciclopédia livre, 2009. Disponivel em: <http://pt.wikipedia.org/w/index.php?title=File_Transfer_Protocol&oldid=27495060>. Acesso em: 1 Novembro 2011.