Camada de aplicação

Conceitos, implementação de protocolos da camada de aplicação
• •

Paradigma cliente-servidor Modelos de serviço HTTP FTP SMTP, POP DNS Interface de sockets

Protocolos da camada de aplicação
• • • •

Programação de protocolos da camada de aplicação

Camada de aplicação

1

Aplicações em rede
Processo é um programa a ser executado numa máquina Na mesma máquina – comunicação entre-processos (sistema operativo) Em máquinas distintas – protocolo da camada de aplicação Agente de utilizador (user agent)
• • • •

Interface com o utilizador e com a rede Implementa o protocolo da camada de aplicação WWW: browser email: leitor de correio (mail reader)
Camada de aplicação 2

Paradigma cliente-servidor
Em geral, protocolo da camada de aplicação tem duas componentes: cliente e servidor Cliente
• • • •

Inicia o contacto com o servidor Solicita pedidos ao servidor WWW: cliente é implementado no browser email: cliente (SMTP e POP) é implementado no leitor de correio Fornece os serviços solicitados pelo cliente WWW: servidor Web entrega páginas solicitadas Email: servidor entrega correio ao destinatário
Camada de aplicação 3

Servidor
• • •

Endereçamento e API
Identificação de um processo
• •

Endereço IP identifica a estação onde reside o processo Porta identifica processo dentro de uma estação Portas bem-conhecidas (0-1023): servidor HTTP – 80; SMTP – 25;SSH - 22 Portas aleatórias: cliente (acima de 1024)

Portas
• • •

Interface entre a camada de aplicação e a camada de transporte (Application Programming Interface, API)

Camada de aplicação escreve e lê em sockets

Camada de aplicação

4

Requisitos das aplicações
Perdas
• •

Tolerante a perdas: áudio Intolerante a perdas: transferência de arquivos Tolerante a atrasos: transferência de arquivos, WWW Intolerante a atrasos: VoIP, jogos distribuídos

Atrasos
• •

Entrega sequencial dos pacotes Largura de banda
• •

Aplicações tolerantes: transferência de ficheiros Aplicações de tempo-real: multimidia

Camada de aplicação

5

Requisitos: exemplos
Aplicação Transferência arquivos email Páginas Web áudio/vídeo tempo-real áudio/vídeo armazenado Jogos interactivos Aplicações financeiras Perdas não não não tolerante tolerante tolerante não Largura de banda variável variável variável áudio: 5kb-1Mb vídeo:10kb-5Mb como o anterior ordem dos kbit/s variável Atrasos tolerante tolerante tolerante não, 100’s ms não, seg não, 100’s ms sim e não !

Camada de aplicação

6

Serviços fornecidos pela camada de transporte
Transmission Control Protocol (TCP)
• • • • •

Orientado à sessão (connection-oriented) Transferência fiável Entrega sequencial Controlo de fluxo e de congestão

User Datagram Protocol (UDP)
• •

Não é orientado à sessão Não dá garantias às aplicações

Camada de aplicação

7

Aplicações e serviços: exemplos
Protocolo da camada de aplicação SMTP [RFC 821] Telnet [RFC 854] HTTP [RFC 2068] FTP [RFC 959] proprietário NFS proprietário Camada de transporte TCP TCP TCP TCP TCP ou UDP TCP ou UDP Tipicamente UDP

Aplicação email Acesso remoto WWW Transferência de ficheiros streaming multimedia Ficheiros em rede VoIP

Camada de aplicação

8

Hypertext Transport Protocol (HTTP)
O protocolo da camada de aplicação da WWW Cliente

Ped

ido

Browser que solicita, recebe e apresenta objectos

PC com Explorer

Re

sp o

HT TP

st a

HT TP

Servidor

Envia dados em resposta aos pedidos Não guarda informação de estado sobre pedidos anteriores
PC com Netscape

TP HT TP HT Pe sta o sp Re o did

Servidor Apache

Porta usada: 80 Camada de transporte: TCP

Camada de aplicação

9

HTTP: exemplo
http://www.ist.utl.pt/index.html Browser
Sessão TCP www.ist.utl.pt Porta +1024 Pedido URL: index.html

Servidor HTTP www.ist.utl.pt
Escuta sessões TCP Porta 80

Aceita sessão Resposta OK: index.html Fecha sessão

Recebe pedido Mostra página Identifica imagens

Camada de aplicação

10

Persistência
Não persistente
• • • •

HTTP/1.0 Servidor fecha a sessão TCP depois de satisfazer o pedido 2 x RTT até à recepção do objecto Browsers podem abrir sessões paralelas HTTP/1.1 Múltiplos pedidos na mesma sessão TCP Browser envia pedidos logo que os identifica (pipelining) Mais rápido do que com sessões não-persistentes

Persistente
• • • •

Camada de aplicação

11

Pedido: exemplo
Linha de pedido (GET, HEAD, POST)
GET /index.html HTTP/1.1 Accept: text/html, image/gif, image/jpg Accept-Language: en-us User-agent: Mozilla/4.0 Host: www.ist.utl.pt

Linhas de cabeçalho

cr + lf

Camada de aplicação

12

Anatomia de um pedido
Método URL Nome do cabeçalho : Versão cr lf Valor cr lf Linha de pedido

Linhas de cabeçalhos Nome do cabeçalho : cr lf Valor cr lf

Corpo da mensagem
Camada de aplicação 13

Resposta: exemplo
Linha de resposta
HTTP/1.1 200 OK Date: Fri, 22 Feb 2001 13:20:50 GMT Server: Apache/1.3.6 (Unix) Content-type: text/html Content-Length: 327 <HTML> <TITLE>Instituto Superior T&eacute;cnico<TITLE>

Corpo da mensagem

Linhas de cabeçalho

cr + lf

Camada de aplicação

14

Anatomia de uma resposta
Versão Código Expressão cr lf Nome do cabeçalho : Valor cr lf Linha de resposta

Linhas de cabeçalhos Nome do cabeçalho : cr lf Valor cr lf

Corpo da mensagem
Camada de aplicação 15

POST e Common Gateway Interface (CGI)
Geração de conteúdo dinâmico Browser apresenta um formulário Pedido do browser ao servidor
• • •

Método POST URL de um cgi a ser executado no servidor Corpo da mensagem contem os dados introduzidos no formulário

Servidor executa o cgi Servidor envia o resultado ao browser

Camada de aplicação

16

Códigos de resposta
200 OK

Pedido bem sucedido. Objecto no corpo da mensagem Localização do objecto foi alterada. Nova URL indicada no cabeçalho Location: Objecto não foi modificado desde a data contida no cabeçalho If-modified-since Erro genérico. Pedido não é entendido pelo servidor O documento não existe no servidor

301 Moved Permanently

304 Not Modified

400 Bad Request

404 Not Found

505 HTTP Version Not Supported
Camada de aplicação 17

Cabeçalhos
Pedidos
• • • •

Respostas
• • •

Host: User-Agent: Accept: (text/*, image/gif) If-Modified-Since:

Date: Server: Last-Modified:

Comuns a pedidos e respostas
Content-Type: Content-Length: • Transfer-Encoding: chunked • Connection: close
• •

Camada de aplicação

18

Cookies
Informação de estado permite manter correlação entre pedidos de um utilizador para um mesmo servidor Cabeçalho na primeira resposta do servidor

Set-cookie: 1458279

Entrada numa base de dados do servidor Ficheiro na estação do utilizador

Associação servidor-cookie Cookie: 1458279

Cabeçalhos nos pedidos sucessivos do utilizador

Camada de aplicação

19

Servidores proxy (Web cache)
Utilizador configura o browser para usar o servidor proxy Browser faz pedido ao servidor proxy

Servidor original
Ped ido

Se servidor proxy tiver objecto, envia-o ao cliente Caso contrário, faz o pedido ao servidor origem, recebe o objecto, envia-o ao cliente Servidor proxy guarda o cliente objecto em cache

R cliente espo

HT TP st a HT TP P TT oH TP did HT Pe sta o sp Re

Servidor proxy

TTP oH di d TTP Pe ta H pos s Re

Servidor original
Camada de aplicação 20

Vantagem dos servidores proxy
Melhor tempo de resposta, em geral Diminui o tráfego com destino em servidores distantes
Ethernet local

Servidores origem
Internet

Ligação a 1.5 Mbps

10 Mbps LAN

Servidor proxy
Camada de aplicação 21

File Transfer Protocol (FTP)
Interface Cliente FTP FTP utilizador Transferência de ficheiros Servidor FTP Sistema de arquivos remoto

Sistema de arquivos local

Transferência de arquivos de e para uma estação remota (inicializada pelo cliente) Porta bem-conhecido: 21 (controle) e 20 (dados) Camada de transporte: TCP Servidor guarda informação de estado
Camada de aplicação 22

Sessão de controle e dados
Sessão de controle

Envio de comando e recepção de respostas Uma por cada arquivo transferido (end-of-file) O servidor inicia o estabelecimento da sessão para a transferência de dados (modo ativo)

Sessão de dados

Sessão de controle na porta 21

Cliente FTP

Sessão de dados na porta 20

Servidor FTP

Camada de aplicação

23

Comandos e respostas FTP
Comandos
• • • • • •

Respostas
• • • •

USER username PASS password LISTdir : lista de ficheiros na directoria actual RETR ficheiro: buscar (get) STOR ficheiro: colocar (put) PORT n: porto onde o cliente escuta o pedido de sessão de dados do servidor

331 Username OK, password required 125 data connection already open 425 Can’t open data connection 452 Error writing file

Camada de aplicação

24

Correio eletrónico
Mailbox do usuário

Componentes

• •

Clientes (leitores de correio) Servidores de correio Simple Mail Transfer Protocol (SMTP)

Agente de utilizador Servidor de mail

Fila de mensagens a enviar Agente de utilizador

SMTP SMTP SMTP
Servidor de mail Agente de utilizador Agente de utilizador

Servidor de mail Agente de utilizador

Agente de utilizador

Camada de aplicação

25

Simple Mail Transfer Protocol (SMTP)
Porta bem-conhecido: 25 Camada de transporte: TCP Servidor de correio
• •

Atua como cliente quando envia mensagens Atua como servidor quando recebe mensagens Comandos Mensagem (Cabeçalhos + corpo) Respostas
Camada de aplicação 26

Cliente
• •

Servidor

SMTP: exemplo
S: C: S: C: S: C: S: C: S: C: C: S: C: S: 220 destino.pt HELO origem.pt 250 Hello origem.pt, pleased to meet you MAIL FROM: <fernando@origem.pt> 250 fernando@origem.pt... Sender ok RCPT TO: <luis@destino.pt> 250 luis@destino.pt ... Recipient ok DATA 354 Enter mail, end with "." on a line by itself Deus quer, o homem sonha, a obra nasce . 250 Message accepted for delivery QUIT 221 destino.pt closing connection

Camada de aplicação

27

Anatomia das mensagens de email
Mensagens codificadas em ASCII de 7-bits (enviados em grupos de 8 bits) Cabeçalhos
• • • •

Cabeçalho

cr lf

Received: From: To: Subject:

Cabeçalho cr lf

cr lf

Corpo da mensagem termina com cr+lf.cr+lf Conteúdo do corpo não pode incluir sequência de caracteres cr+lf.cr+lf

Corpo cr lf

.

cr lf
Camada de aplicação 28

Multipurpose Internet Mail Extensions (MIME)
Cabeçalhos para transmitir mensagens de vários tipos, não apenas texto ASCII Codificação do corpo da mensagem em ASCII de 6 ou 7 bits ( “.” é sempre excluído)
Versão MIME Método de codificação do corpo Tipo de dados
From: fernado@origem.pt To: luis@destino.pt Subject: Imagem MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Type: image/jpeg base64 encoded data ..... ......................... ......base64 encoded data
Camada de aplicação 29

Dados codificados

Tipo Multipart
From: fernando@origem.pt To: luis@destino.pt Subject: Imagem MIME-Version: 1.0 Content-Type: multipart/mixed; boundary=98766789 --98766789 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain Caro Luis, Junto segue a imagem de que te falei. --98766789 Content-Transfer-Encoding: base64 Content-Type: image/jpeg base64 encoded data ..... ......................... ......base64 encoded data

Camada de aplicação

30

Post Office Protocol – v3
SMTP
Agente de utilizador Servidor Servidor

SMTP

POP3

Agente de utilizador

POP3
• •

Recuperação de mensagens do servidor do destino Autenticação

Camada de aplicação

31

Delimitação de mensagens na camada de aplicação
Terminação da sessão de transporte
• •

Uma sessão por mensagem FTP, HTTP 1.0 Várias mensagens por sessão de transporte HTTP 1.1 Várias mensagens por sessão de transporte Análise de cada byte recebido Em geral, corpo necessita de codificação SMTP (cr+lf.cr+lf)

Indicação do número de bytes enviados
• •

Sequência de caracteres de terminação
• • • •

Camada de aplicação

32

Domain Name System (DNS)
Serviço de diretório

Tradução entre o nome de uma máquina e seu endereço IP Base de dados distribuída, implementada numa estrutura hierárquica de servidores de nomes Protocolo da camada de aplicação envolvendo estações e servidores de nomes

DNS

Camada de aplicação

33

Hierarquia DNS
Serv. raíz Serv. domínio de topo
edu gov com mil uk pt

mit

umass

cisco

google

utl

com

physics

ee

cs

Serv. intermédio (cs)

ist

fmv

deec

dei

Serv. idóneo (physics)
Camada de aplicação 34

Servidores de nomes
Servidor de DNS local (local DNS server) Servidor de DNS raiz (root DNS server) Servidor de DNS de domínio-de-topo (top-level domain DNS server, TLD DNS server) Servidor de DNS intermédio (intermiediate DNS server) Servidor de DNS autorativo (authoritative name server)

Camada de aplicação

35

DNS: exemplo
Root DNS server h.root-servers.net

2 3 4
local DNS server alfa.ist.utl.pt TLD DNS server dns.edu

5 6 1 8 7

authoritative DNS server dns.umass.edu

tejo.ist.utl.pt

dijkstra.cs.umass.edu

Camada de aplicação

36

Servidores de nomes raiz
a NSI Herndon, VA c PSInet Herndon, VA d U Maryland College Park, MD g DISA Vienna, VA h ARL Aberdeen, MD
j NSI (TBD) Herndon, VA

k RIPE London i NORDUnet Stockholm m WIDE Tokyo

e NASA Mt View, CA f Internet Software C. Palo Alto,
CA

b USC-ISI Marina del Rey, CA l ICANN Marina del Rey, CA

13 servidores de nomes raíz, no total
Camada de aplicação 37

Registos DNS
Registos (Resource Records, RR) da forma (name, value, type, TTL) Type=A
• •

Type=CNAME
• •

name - nome de estação value – endereço IP da estação

name – nome alternativo value – nome canónico

Type=MX
• name –nome alternativo • value – servidor de mail

Type=NS
• name – domínio • value – nome de

servidor DNS idóneo

Camada de aplicação

38

Mensagens do protocolo DNS
Mensagens de interrogação e resposta, ambas com o mesmo formato

Camada de aplicação

39

Sockets
Aplicação

processo socket TCP ou UDP

processo socket TCP ou UDP

Aplicação

Sistema operativo

internet

Sistema operativo

API de sockets
• •

Interface entre a camada de aplicação e a camada de transporte Interface através da qual um processo aplicacional envia e recebe mensagens para/de outros processos aplicacionais Stream – TCP Datagram - UDP
Camada de aplicação 40

Tipos de sockets
• •

Interacção cliente/servidor: TCP
socket() Cliente socket() connect() accept() write() read() write() read() close()
Fecho da sessão TCP Bloqueado à espera que seja estabelecida sessão TCP Estabelecimento da sessão TCP

Servidor

bind() listen()

read() close()
Camada de aplicação 41

Servidores concorrentes
connect() listenfd connect() listenfd connfd accept()

connect()

listenfd connfd

connect()

listenfd

fork()

listenfd connfd

close() close()

connfd

Camada de aplicação

42

Interação cliente/servidor: UDP
Cliente socket() bind() sendto() recvfrom() sendto() recvfrom() close() socket() Servidor

Camada de aplicação

43

Sockets TCP vs. sockets UDP
Porta local, porta remota, endereço IP local read() e write() Porta local sendto() e recvfrom() Porta remota e endereço IP remoto passados à aplicação Preserva fronteira entre mensagens Cada mensagem lida com recvfrom() corresponde a um e um só sendto()

Fluxo de bytes Bytes lidos com read() podem corresponder a vários write(); bytes escritos com write() podem ter de ser lidos com vários read() Nenhum byte é perdido

Uma mensagem pode ser perdida
Camada de aplicação 44