Comunicação de Dados e Redes de Computadores
4ºAno LEEC
Protocolos de Aplicação
POP3 – Post Office Protocol version 3
o Filipe Alexandre da Silva Vila Real
o Ricardo Filipe Rosário Faria
Turma: 4ET12
Porto, 4 de Junho de 2001
CDRC1 – Protocolos de Aplicação / POP3
Operações Básicas POP3
2
1
O servidor inicia o serviço POP3 estando “à escuta” na porta TCP 110.
Quando um cliente deseja usar o serviço, este estabelece uma ligação TCP com o
servidor. Após a ligação estar estabelecida, o servidor POP3 envia uma saudação.
Estão assim criadas as condições para que cliente e servidor POP3 troquem
comandos e respostas, respectivamente, até a ligação ser fechada ou abortada.
No POP3 os comandos são o meio de comunicação do cliente com o servidor. Todos
os comandos são terminados com o par CRLF. Um comando é composto por uma
palavra chave, de 3 ou 4 caracteres, uma palavra chave pode ou não ser seguida de
um argumento.
As respostas do servidor POP3 consistem de um indicador de estado seguido de
informação adicional relativa ao comando enviado pelo cliente. Todas as respostas
são terminadas com o par CRLF. As respostas podem ter um comprimento máximo de
512 caracteres, incluindo a terminação CRLF. Existem tipicamente dois indicadores de
estado: positivo (“+OK”) e negativo (“-ERR”). Servers MUST send the "+OK" and "ERR" in upper case.
Respostas a certos comandos ocupam mais do que uma linha. Nestes casos, após
enviar a primeira linha e o par CRLF, são enviadas linhas adicionais, cada uma
terminada com o par CRLF. Quando todas as linhas forem enviadas, uma linha final é
enviada, consistindo num octeto de terminação (código decimal 046, “.”) e o par CRLF.
Uma sessão de POP3 evolui sobre um diverso número de estados. Uma vez aberta a
ligação TCP, e após o envio da saudação por parte do servidor, a sessão entra no
estado AUTHORIZATION. Neste estado, o cliente deve fazer a sua identificação
introduzindo o respectivo username e correspondente password. Tendo sido bem
sucedida a identificação do cliente, a sessão entra no estado TRANSACTION. Neste
estado, o cliente requisita acções ao servidor POP3 por meio de comandos. Quando o
cliente invocar o comando QUIT, a sessão entra no modo UPDATE. Neste estado, o
servidor liberta os recursos adquiridos no estado TRANSACTION. A ligação TCP é
então fechada.
3
CDRC1 – Protocolos de Aplicação / POP3
2
Comandos
Uma vez aberta a ligação TCP por um cliente POP3, a identificação do cliente é feita
com recurso a dois comandos: USER name, PASS password. O servidor utiliza a
informação enviada neste par de comandos para decidir se deverá ser dado ao cliente
acesso a uma caixa de correio. Poderão ser dadas duas respostas por parte do
servidor, positiva ou negativa:
“+OK maildrop locked and ready”;
“-ERR invalid password”.
No estado de TRANSACTION, após ter sido bem sucedida a identificação do cliente,
existem diversos comandos à disposição do cliente. Após cada comando, o servidor
envia uma resposta. Eventualmente, o cliente pode invocar o comando QUIT, entrando
a sessão no estado UPDATE.
A
seguir
são
apresentados,
sucintamente,
comandos
válidos
no
estado
TRANSACTION.
STAT
É um comando sem argumento. O servidor responde positivamente com uma linha
contendo informação sobre a caixa de correio.
A resposta consiste do indicador de estado positivo (“+OK”), do número de mensagens
existentes na caixa de correio, e o tamanho da caixa de correio em octetos.
LIST
Este comando, tem um argumento opcional. No caso de ser passado um argumento
(número da mensagem) , é recebida uma resposta positiva de uma linha com
informação sobre a mensagem em causa.
Após “+OK”, segue-se o número da mensagem (o argumento) e o tamanho exacto da
mensagem em octetos.
No caso de não ser passado qualquer argumento, a resposta possuí mais do que uma
linha.
4
CDRC1 – Protocolos de Aplicação / POP3
Em cada linha é apresentada a informação respeitante às mensagens existentes,
sendo a última linha reservada para a terminação.
RETR
É um comando que possuí obrigatoriamente um argumento, o número da mensagem.
Se o servidor POP3 responde positivamente então estamos perante uma resposta
multi-linha. Após “+OK”, o servidor envia a mensagem correspondente ao argumento.
DELE
Este comando tem um argumento obrigatório que diz respeito ao número da
mensagem. O servidor POP3 marca a mensagem como apagada. Qualquer referência
futura a essa mensagem por parte de algum comando, é originada um resposta
negativa por parte do servidor. O servidor POP3 só apaga efectivamente a mensagem
quando a sessão entrar no estado UPDATE.
NOOP
Comando sem argumentos. O servidor POP3 não faz nada, simplesmente responde
positivamente.
RSET
Comando sem argumentos. Se alguma mensagem foi marcada para ser apagada, o
servidor POP3 desmarca e responde positivamente.
QUIT
Comando sem argumentos, que quando invocado pelo cliente, força a sessão a entrar
no estado UPDATE. O servidor POP3 remove todas as mensagens previamente
marcadas para serem eliminadas.
Existem ainda dois comandos, que são duas extensões aos comandos básicos.
Um comando UIDL, que
apresenta um argumento optativo, dizendo respeito à
mensagem da qual se quer visualizar o respectivo identificador. No caso de não ser
5
CDRC1 – Protocolos de Aplicação / POP3
passado nenhum argumento, é apresentado para cada mensagem uma linha com o
número e o respectivo identificador da mensagem.
O comando TOP, permite visualizar o cabeçalho da mensagem e um número de linhas
do corpo da mensagem que é passado como argumento. Este comando possuí assim
dois argumentos, o número da mensagem e o número de linhas do corpo da
mensagem a visualizar. De notar que se o número de linhas pedidas pelo cliente para
visualizar for superior ao número de linhas do corpo da mensagem, o servidor POP3
envia a totalidade da mensagem.
Código
3
Tendo como base as Operações Básicas do POP3, foi implementado o código que se
encontra em anexo e que agora nos propomos a fazer uma breve explicação.
Para ser estabelecida a ligação TCP, foram usadas uma série de primitivas para ser
possível fazer uma interface por sockets. Um socket é usado para permitir que um
processo comunique com outro, assim como um telefone é usado para permitir que
uma pessoa comunique com outra.
Um outro conjunto de primitivas é usado para permitir o envio e a recepção de dados
na rede, send(...) e recv(...).
Como foi referido anteriormente, após ser efectuada a ligação do cliente ao servidor,
estes trocam comandos e respostas.
Os comandos foram criados com recurso a duas funções, strcpy e strcat.
A primeira copia para o buffer de envio (buffer[NCHAR]), a palavra chave referente ao
comando e a segunda concatena os possíveis argumentos que deverão ser usados
para o servidor proceder correctamente aos comandos enviados.
CDRC1 – Protocolos de Aplicação / POP3
6
O envio do comando, e possíveis argumentos, é realizado chamando a função envia()
que por sua vez invoca a primitiva send(...). O que esta função envia de facto, é o
buffer onde foi criado o comando e ao qual foram concatenados possíveis argumentos.
Após o envio de um comando, é feita uma espera.
Foram implementadas duas funções. A função esperas() e a função esperam().
Qualquer uma destas funções faz uma chamada à função recebe(), que por sua vez
invoca a primitiva recv(...), que permite a recepção das respostas por parte do
servidor. Estas respostas são armazenadas no buffer que vai conter os dados
recebidos, rec[NCHAR].
A função esperas() é invocada quando a resposta do servidor é apenas de uma linha,
enquanto que a função esperam() é invocada quando a resposta a um comando ocupa
mais do que uma linha de informação (no caso da resposta ao comando RETR por
exemplo).
Estes são portanto os procedimentos que permitem o envio de comandos e a
recepção de respostas.
Ao nível da interface com o utilizador o que foi feito foi o seguinte: foi implementada
uma função menu() que oferece ao utilizador uma gama de comandos. Ao ser
actuada a tecla respeitante ao comando, é feita a chamada a uma função que irá criar
o comando, enviá-lo, e esperar por uma resposta do servidor.
A saída desta função é apenas possível quando é invocado o comando QUIT, ou seja
quando a sessão entra no modo UPDATE.
O código apresenta-se comentado, o que ajuda na explicação de algumas instruções
que se tornariam fastidiosas de serem aqui comentadas.
Download

Protocolos de Aplicação-POP3