Couche application- Programmation application 1

Transcription

Couche application- Programmation application 1
Couche et
programmation
application
ENPC
Couche applicationProgrammation application
1
ˆ
ˆ
ˆ
ˆ
ˆ
ˆ
1 Principes des protocoles de la couche application
 clients et serveurs
 besoin pour les applications
2 Programmation socket
 avec TCP
 avec UDP
3 Web and HTTP
4 FTP
5 Courrier électronique
 SMTP, POP3, IMAP
6 DNS
ENPC
Couche applicationProgrammation application
2
Vocabulaire
Processus: programme
s’exécutant sur un site
(hôte).
ˆ Sur le même site, deux
processus communiquent en
utilisant la communication
inter-processus (défini par
le système d’exploitation).
ˆ Sur des sites différents les
processus communiquent via
un protocole de la couche
application
ENPC
Agent utilisateur (UA):
interface entre l’utilisateur
“au-dessus” et le réseau
“en dessous”.
ˆ Implémente l’interface
utilisateur et le protocole
de la couche application



E-mail: lecteur de courrier
application Web:
navigateur
flot audio/vidéo: media
player
Couche applicationProgrammation application
3
Applications et protocoles de la couche
application
Application: processus
communicants et répartis



ex:, e-mail, Web, partage de
fichier P2P, SMS
Exécutés sur des systèmes
finaux (hôtes, sites)
Echange de messages pour
implémenter l’application
application
transport
réseau
liaison
physique
Protocole de la couche application


ENPC
Définit les échanges de
messages et les actions
exécutées
Utilise les services de
communication fournis par les
protocoles de la couche
inférieure (TCP, UDP)
application
transport
réseau
liaison
physique
application
transport
réseau
liaison
physique
Couche applicationProgrammation application
4
Un protocole de la couche
application définit:
ˆ Types de messages
échangés: requêtes &
réponses
ˆ Syntaxe de chaque type de
messages : champs et
délimitations des champs
ˆ Sémantique des champs
ˆ Règles définissant quand et
comment les processus
envoient des messages et
répondent.
ENPC
Protocoles de domaine
public:
ˆ Définit dans les RFCs
ˆ Assurent
l’interopérabilité
ˆ Ex: HTTP, SMTP
Protocoles propriétaires:
ˆ Ex: KaZaA
Couche applicationProgrammation application
5
Paradigme client-serveur
Une application réseau typique
comprend deux entités: client
et serveur
Client(s):
application
transport
réseau
liaison
physique
contacte le serveur (initie la
demande)
ˆ Demande de service au serveur,
ˆ Web: client implementé dans le
navigateur (browser);
requête
ˆ
Serveur:
ˆ Fournit le service demandé par le
client
ˆ Ex: le serveur Web envoie une page
Web
ENPC
réponse
application
transport
réseau
liaison
physique
Couche applicationProgrammation application
6
Communication des processus
ˆ Les processus
envoient/reçoivent des
messages par socket
ˆ socket analogue à une porte


ˆ
Le processus émetteur dépose
son message à sa ‘porte’
Le processus émetteur
suppose que l’infrastructure
de transport de l’autre coté
de la ‘porte’ transportera son
message jusqu’à la ‘porte’ du
processeur récepteur.
Hôte ou
serveur
Hôte ou
serveur
Controllé par l’appli
processus
processus
socket
socket
TCP avec
buffers,
variables
Internet
TCP avec
buffers,
variables
controllé
par l’OS
API: (1) choix du protocole de transport; (2) permet
de fixer quelques paramètres(voir plus loin).
ENPC
Couche applicationProgrammation application
7
Identification des processus:
ˆ Pour qu’un processus puisse
recevoir un message, il doit
être identifié
ˆ Chaque hôte a une unique
adresse IP sur 32-bit
ˆ Q: est ce que l’adresse IP
de l’hôte sur lequel le
processus s’exécute est
suffisant pour identifier le
processus?
ˆ R: Non, plusieurs processus
peuvent s’exécuter sur le
même hôte
ENPC
L’identificateur inclut
l’adresse IP et le
numéro de port associé
au processus sur l’hôte.
ˆ Exemples de numéro
de port:
ˆ


Serveur HTTP: 80
Serveur Mail: 25
Couche applicationProgrammation application
8
Programmation avec des
sockets
API Socket
ˆ Introduit dans BSD4.1
UNIX en 1981
ˆ Créée, utilisée et fermée
explicitement par
l’utilisateur
ˆ Paradigme client/serveur
ˆ 2 types de service transport
via l’API socket :
 Datagramme non fiable
 Flot d’octets fiable
ENPC
socket
Locale à l’hôte
Crée par l’application
Interface controllée par
le système d’exploitation
(“porte” ) par laquelle un
processus de l’application
peut à la fois envoyer et
recevoir des messages
des autres processus de
l’application.
Couche applicationProgrammation application
9
Programmation socket avec TCP
Socket: une porte entre le processus application et
le protocole de transport bout-à-bout (end-end)
(UCP ou TCP)
Service TCP: transfert fiable de bytes d’un
processus à un autre
controllé par
le développeur
de l’application
Controllé par
le système
d’exploitation
socket
TCP avec
buffers,
variables
hôte ou
serveur
ENPC
processus
processus
internet
socket
TCP avec
buffers,
variables
controllé par
le développeur
de l’application
Controllé par
le système
d’exploitation
hôte ou
serveur
Couche applicationProgrammation application
10
Programmation socket avec TCP
Le client doit contacter le
serveur
ˆ Le processus serveur doit
être lancer en premier
ˆ Le processus serveur doit
avoir créer une
socket(porte) pour
accueillir les clients
Le client contacte le serveur:
ˆ En créant une socket TCP
locale
ˆ En utilisant l’adresse IP et
le numéro de port du
processus serveur
ˆ Quand le client crée la
socket: le client TCP
une connexion avec
ENPCétablit
le serveur TCP
ˆ
Quand il est contacté par le
client, le serveur crée une
nouvelle socket (et en général
une thread) pour que le
processus serveur puisse
communiquer avec le client
 permet au serveur de
communiquer avec plusieurs
clients
 les numéros de port
permettent d’identifier les
clients
Du point de vue de l’appli
TCP fournit un transfert de
Byte fiable, fifo
(“pipe”)
entre le client et le serveur
Couche applicationProgrammation application
11
Flot (stream)
ˆ Un flot est une suite de
caractère en entrée ou
sortie d’un processus.
ˆ Un flot d’entrée est
attaché à une source
d’entrée du processus telle
le clavier ou une socket.
ˆ Un flot de sortie est
attaché a une source de
sortie telle l’écran ou une
socket.
ENPC
Couche applicationProgrammation application
12
Exemple simplifié d’application
client-serveur:
ENPC
inFromUser
écran
Processus
Process
client
output
stream
inFromServer
input
stream
outToServer
1) Le client lit une ligne sur l’entrée
standard, et l’envoie au serveur
via la socket
2) Le serveur lit la ligne depuis la
socket
3) Le serveur convertit les
majuscules et minuscules et
renvoie le ligne au client
4) Le client lit la ligne modifiée
depuis la socket et l’affiche à
l’écran
clavier
input
stream
client
TCP
clientSocket
socket
Vers le
réseau
TCP
socket
Depuis le
réseau
Couche applicationProgrammation application
13
Interaction client/serveur TCP-C
Serveur
Client
(sur hostid)
Dans sadr l’adresse (+port)
ss=socket(AF_INET,SOCK_STREAM,0)
bind(ss,sadr,sl)
cs=socket(d,t,p)
TCP
Attente de requêtes
Init. connexion
de connexion
listen(ss,nbpend)
sc=accept(ss,&cadd,&caddl)
read(cs,&t,lt)
write(cs,&t,lt)
close(cs)
ENPC
connect(cs,sadr,sl)
scanf(“%s”,&t)
write(cs,&t,lt)
read(cs,&t,lt)
printf(“%s\n”,t)
close(cs)
Couche applicationProgrammation application
14
Exemple simplifié d’application
client-serveur:
ENPC
inFromUser
écran
Processus
Process
client
output
stream
inFromServer
input
stream
outToServer
1) Le client lit une ligne sur l’entrée
standard (inFromUser stream) ,
et l’envoie au serveur via la
socket (outToServer stream)
2) Le serveur lit la ligne depuis la
socket
3) Le serveur convertit les
majuscules et minuscules et
renvoie le ligne au client
4) Le client lit la ligne modifiée
depuis la socket (inFromServer
stream) et l’affiche à l’écran
clavier
input
stream
client
TCP
clientSocket
socket
Vers le
réseau
TCP
socket
Depuis le
réseau
Couche applicationProgrammation application
15
Interaction client/serveur TCP-JAVA
Serveur
Client
(sur hostid)
Crée la socket,
port=6789, pour les
requêtes:
welcomeSocket =
ServerSocket()
Attente de requêtes
Init.
de connexion
connectionSocket =
welcomeSocket.accept()
Lecture depuis
connectionSocket
réponse
connectionSocket
fermeture
connectionSocket
ENPC
TCP
connexion
Crée la socket, demande adressée à
hostid, port=6789
clientSocket =
Socket()
Envoie de requête sur
clientSocket
Lit la réponse depuis
clientSocket
fermeture
clientSocket
Couche applicationProgrammation application
16
Exemple: Java client (TCP)
import java.io.*;
import java.net.*;
class TCPClient {
public static void main(String argv[]) throws Exception
{
String sentence;
String modifiedSentence;
Création du flot
d’entrée
Création
socket client,
Connexion au serveur
Création
du flot de sortie
attaché à la socket
ENPC
BufferedReader inFromUser =
new BufferedReader(new InputStreamReader(System.in));
Socket clientSocket = new Socket("hostname", 6789);
DataOutputStream outToServer =
new DataOutputStream(clientSocket.getOutputStream());
Couche applicationProgrammation application
17
Exemple: Java client (TCP), cont.
Création du flot
d’entrée
Attaché à la socket
BufferedReader inFromServer =
new BufferedReader(new
InputStreamReader(clientSocket.getInputStream()));
Lire la ligne
au clavier
sentence = inFromUser.readLine();
Envoyer la ligne
au serveur
outToServer.writeBytes(sentence + '\n');
Lire la ligne
reçue du serveur
Afficher la ligne
modifiedSentence = inFromServer.readLine();
System.out.println("FROM SERVER: " + modifiedSentence);
clientSocket.close();
}
ENPC
}
Couche applicationProgrammation application
18
Exemple: serveur Java (TCP)
import java.io.*;
import java.net.*;
class TCPServer {
Création de la
socket d’acceuil sur
le port 6789
Attente sur
la socket
d’une requête client
Création d’un flot
d’entrée attaché
à la socket
ENPC
public static void main(String argv[]) throws Exception
{
String clientSentence;
String capitalizedSentence;
ServerSocket welcomeSocket = new ServerSocket(6789);
while(true) {
Socket connectionSocket = welcomeSocket.accept();
BufferedReader inFromClient =
new BufferedReader(new
InputStreamReader(connectionSocket.getInputStream()));
Couche applicationProgrammation application
19
Exemple: serveur Java(TCP), cont.
Creation d’un flot
de sortie attaché
à la socket
DataOutputStream outToClient =
new DataOutputStream(connectionSocket.getOutputStream());
Lit la ligne
sur la socket
clientSentence = inFromClient.readLine();
capitalizedSentence = clientSentence.toUpperCase() + '\n';
Ecrit la ligne sur
la socket
outToClient.writeBytes(capitalizedSentence);
}
}
}
ENPC
Fin de la boucle while,
attente d’une npuvelle requête
d’ autre client
Couche applicationProgrammation application
20
Programmation socket avec UDP
UDP: pas de “connexion” entre
client et serveur
ˆ Sans “poignée de main”
(handshaking)
ˆ L’émetteur envoie
explicitement chaque
paquet à une adresse IP et
un numéro du port donnés
ˆ Le serveur extrait
l’adresse Ip et le port de
émetteur du paquet reçu
Point de vue appli
UDP fournit un transfert
non fiable de groupes
de bytes (“datagrammes”)
entre client et serveur
UDP: les données transmises
peuvent être perdues ou
réordonnées
ENPC
Couche applicationProgrammation application
21
Client/serveur socket interaction: UDPC
Serveur
(sur hostid)
ss =socket(d,t,p) ;
bind(ss,sadr,sl)
Lit les requêtes sur
recvfrom(ss,&ts,ls,f,&cadr,&cl)
Ecrit la réponse sur
sendto(ss,ts,ls,f,cadr,cl)
Client
cs=socket(d,t,p);
bind(cs,cadr,cl)
Envoie la requête
sendto(cs,tc,lc,f,sadr,sl)
Lit la réponse
recvfrom(cs,&tc,l,f,&sadr,&sl)
fermeture
close(cs)
ENPC
close(ss)
Couche applicationProgrammation application
22
Client/serveur socket interaction: UDP
Serveur
(sur hostid)
crée socket,
port=6789, pour les
requêtes:
serverSocket =
DatagramSocket()
Lit les requêtes sur
serverSocket
Ecrit la réponse sur
serverSocket
À l’adresse (IP+port) donnée par le
client specifying
Client
Crée socket,
clientSocket =
DatagramSocket()
Crée l’adresse (hostid, port=x),
Envoie la requête en utilisant
clientSocket
Lit la réponse sur
clientSocket
fermeture
clientSocket
ENPC
Couche applicationProgrammation application
23
Exemple: client (UDP)
UDP
paquet
receivePacket
Processus
Process
client
sendPacket
input
stream
écran
inFromUser
clavier
UDP
paquet
client
UDP
clientSocket
socket
Vers le
réseau
ENPC
UDP
socket
Venant du
réseau
Couche applicationProgrammation application
24
Exemple: client Java (UDP)
import java.io.*;
import java.net.*;
Création du
flot d’entrée
Creation de
la socket
Translation
nom à adresse IP
en utilisant DNS
class UDPClient {
public static void main(String args[]) throws Exception
{
BufferedReader inFromUser =
new BufferedReader(new InputStreamReader(System.in));
DatagramSocket clientSocket = new DatagramSocket();
InetAddress IPAddress = InetAddress.getByName("hostname");
byte[] sendData = new byte[1024];
byte[] receiveData = new byte[1024];
String sentence = inFromUser.readLine();
ENPC
sendData = sentence.getBytes();
Couche applicationProgrammation application
25
Exemple: Java client (UDP), suite
Crée un datagramme
avec les données à
envoyer, leur taille,
l’adresse IP et port,
Envoie le
datagramme
au serveur
DatagramPacket sendPacket =
new DatagramPacket(sendData, sendData.length, IPAddress, 9876);
clientSocket.send(sendPacket);
DatagramPacket receivePacket =
new DatagramPacket(receiveData, receiveData.length);
Lit le datagramme
Envoyé par le serveur clientSocket.receive(receivePacket);
String modifiedSentence =
new String(receivePacket.getData());
System.out.println("FROM SERVER:" + modifiedSentence);
clientSocket.close();
}
}
ENPC
Couche applicationProgrammation application
26
Exemple: serveur Java (UDP)
import java.io.*;
import java.net.*;
Création de la socket
datagramme sur le
port 9876
class UDPServer {
public static void main(String args[]) throws Exception
{
DatagramSocket serverSocket = new DatagramSocket(9876);
byte[] receiveData = new byte[1024];
byte[] sendData = new byte[1024];
Création d’une zone
pour recevoir
les datagrammes
Reception d’un
datagramme
ENPC
while(true)
{
DatagramPacket receivePacket =
new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket);
Couche applicationProgrammation application
27
Exemple: serveur Java(UDP), suite
String sentence = new String(receivePacket.getData());
Adresse IP
numéro port de
l’emetteur
InetAddress IPAddress = receivePacket.getAddress();
int port = receivePacket.getPort();
String capitalizedSentence = sentence.toUpperCase();
sendData = capitalizedSentence.getBytes();
Création du
datagramme à
envoyer au client
DatagramPacket sendPacket =
new DatagramPacket(sendData, sendData.length, IPAddress,
port);
Ecriture du
datagramme
sur la socket
serverSocket.send(sendPacket);
}
}
}
ENPC
Fin de la boucle, retour
au test et attente
du datagramme suivant
Couche applicationProgrammation application
28
Client/serveur classique
ENPC
Couche applicationProgrammation application
29
Programmation socket: références
En C
ˆ J.M. Rifflet: Communication sous Unix
En Java
ˆ Programmation réseau avec Java, Elliote Rusty Harold
chez O’Reilly
ˆ “All About Sockets” & “Socket Programming in Java: a
tutorial,” (Sun tutorial),
http://www.javaworld.com/javaworld/jw-12-1996/jw-12sockets.html
ENPC
Couche applicationProgrammation application
30
Web et HTTP
Un peu de vocabulaire
ˆ Une page Web est l’union de plusieurs objets
ˆ Un objet peut être un fichier HTML, une image
JPEG, une applet Java, un fichier audio,…
ˆ Une page Web consiste en un fichier HTML de
base qui inclut plusieurs références d’objets
ˆ Chaque objet est référencé par une URL
ˆ Exemple URL:
www.javaworld.com/javaworld/jw-12-1996/jw-12-sockets.html
host name
ENPC
path name
Couche applicationProgrammation application
31
HTTP résumé
HTTP: HyperText Transfer
Protocol
Protocole de la couche
application utilisé par le Web
ˆ Modèle client/serveur
 client: navigateur
(browser) qui demande,
reçoit et “affiche” des
objets Web
 serveur: le serveur Web
envoient des objets en
réponse aux requêtes
ˆ HTTP 1.0: RFC 1945
ˆ HTTP 1.1: RFC 2068
ˆ
ENPC
PC avec
Explorer
HT
TP
r eq
uêt
HT
e
TP
rép
ons
e
te
ê
u
eq
r
Machine serveur
nse
TP
o
T
p
H
ré avec serveur Web
P
T
Apache
HT
Mac avec
Navigator
Couche applicationProgrammation application
32
HTTP résumé (suite)
Utilise TCP:
ˆ Le client initie une connexion
TCP (création d’une socket)
vers le serveur, port 80
ˆ Le serveur accepte la
connexion TCP connexion du
client
ˆ Les messages HTTP
(messages de protocole de la
couche application) échangés
entre le navigateur (client
HTTP) et le serveur Web
(serveur HTTP)
ˆ Fermeture de la connexion
TCP
ENPC
HTTP est “sans-état”
ˆ Le serveur ne conserve
aucune information sur
les anciennes requêtes
des clients
Rmq
Les protocoles qui conservent
un état sont complexes.
ˆ L’histoire passée (l’état)
doit être maintenue
ˆ En cas de panne du client
ou du serveur leurs vues de
l’état peuvent être
inconsistentes et doivent
être rendus cohérents
Couche applicationProgrammation application
33
Connexions HTTP
HTTP Non persistent
ˆ Au plus un objet est
envoyé par connexion
TCP
ˆ HTTP/1.0 est non
persistent
ENPC
HTTP Persistent
ˆ Plusieurs objets
peuvent être envoyées
par la même connexion
TCP entre client et
serveur
ˆ HTTP/1.1 est
persistent par défaut
Couche applicationProgrammation application
34
HTTP Non persistent
Supposons que l’utilisateur demande l’URL
www.javaworld.com/javaworld
(contenant du texte,
et 10 references à
des images jpeg )
1a. Le client HTTP initie la
connexion TCP vers le serveur
HTTP (processus) à
www.javaworld.com sur le port
80
2. Le client HTTP envoie un
message de requête HTTP
(contenant l’URL) sur la socket
TCP. Le message indique que
le client désire l’objet
www.javaworld.com/javawo
rld
temps
ENPC
1b. Le serveur HTTP du site
www.javaworld.com attend une
connexion TCP sur le port 80.
“accepte” la connexion,
prévient le client
3. Le serveur HTTP reçoit la
requête et forme le message
réponse contenant l’objet
demandé et envoie le message
sur la socket.
Couche applicationProgrammation application
35
Non persistent HTTP (suite)
5. Le client HTTP reçoit la
temps
4. Le serveur HTTP ferme la
connexion TCP.
réponse contenant le fichier
html. Il l’affiche. En
décomposant le fichier html, il
trouve 10 références d’objets
6. Répete les pas 1-5 pour
chacun des 10 objets jpeg
ENPC
Couche applicationProgrammation application
36
Temps de réponse
RTT(Round time trip): temps
d’un aller-retour d’un petit
paquet entre le client et le
serveur
Temps de réponse:
ˆ 1 RTT pour initier la
connexion TCP
ˆ 1 RTT pour la requête HTTP
et pour les premiers octets
de la réponse
ˆ Temps de transmission de
l’objet et fermeture de la
connexion: transm
total = 2RTT+transm
ENPC
initiation
connexion TCP
RTT
requête
Temps de
transmission
RTT
Reception
temps
temps
Couche applicationProgrammation application
37
Persistent HTTP
Pbs avec HTTP non persistent :
ˆ nécessite 2 RTTs par objet
ˆ OS travaille et affecte des
ressources à chaque
connexion TCP
ˆ Mais les navigateurs gardent
souvent une connexion TCP
parallèle pour demander les
objets référencés
HTTP Persistent
ˆ Le serveur garde la
connexion ouverte après
l’envoie de la réponse
ˆ Les messages HTTP entre
les mêmes client/serveur
sont envoyés par cette
connexion
ENPC
sans pipelining:
ˆ Le client fait une nouvelle
requête après l’arrivée de
la réponse à la requête
précédente
ˆ 1 RTT pour chaque objet
référencé
avec pipelining:
ˆ Par défaut dans HTTP/1.1
ˆ Le client envoie des
requêtes dés qu’il
rencontre une référence
ˆ Proche de 1 RTT pour tous
les objets référencés
Couche applicationProgrammation application
38
Message de requête HTTP
2 types de messages HTTP : requête, réponse
ˆ Message de requête:
ˆ

ASCII (format lisible)
ligne de requête
(méthodes GET, POST,
HEAD )
GET /uncata/page.html HTTP/1.1
Host: www.unsite.fr
User-agent: Mozilla/4.0
Lignes d’en-tête Connection: close
Accept-language:fr
CR LF indiquent la
fin du message
ENPC
(CR LF supplémentaires)
Couche applicationProgrammation application
39
Message de requête HTTP: format
général
Méthode sp
En-tête
En-tête
cr lf
URL sp version cr lf Ligne de
requête
.. value cr lf
Lignes
d’en-tête
.. value cr lf
corps
ENPC
Couche applicationProgrammation application
40
Requêtes avec
entrée(formulaire)
méthode POST:
ˆ Une page Web peut
inclure des entrées
dans un formulaire
ˆ Les entrées sont
envoyées au serveur
dans le corps du
message
Avec l’URL:
ˆ Utilise la méthode GET
ˆ Les entrées sont
envoyées dans la ligne
de requête avec l’url:
www.unsite.fr/annaire?Durand&Paul
ENPC
Couche applicationProgrammation application
41
Types de méthodes
HTTP/1.0
ˆ GET
ˆ POST
ˆ HEAD

Similaire à GET mais ne
transfère pas
l’objet(debug)
HTTP/1.1
ˆ GET, POST, HEAD
ˆ PUT

ˆ
DELETE

ENPC
Charge le fichier (du
corps du message) à
l’URL spécifiée
Efface les fichiers
spécifiés par l’URL
Couche applicationProgrammation application
42
Message de réponse HTTP
Ligne d’état
(code d’état du
protocole)
Lignes d’en-tête
données, ex:
fichier html
demandé
ENPC
HTTP/1.1 200 OK
Connection close
Date: Thu, 06 Aug 2002 12:00:15 GMT
Server: Apache/1.3.0 (Unix)
Last-Modified: Mon, 22 Jun 2002 …...
Content-Length: 6821
Content-Type: text/html
data data data data data ...
Couche applicationProgrammation application
43
Code d’état des réponses HTTP
Dans la première ligne du message de réponse
(serveur->client). Qqs ex:
200 OK

Requête réussie, l’objet demandé est dans le reste du
message
301 Moved Permanently

L’adresse de l’objet a changé, la nouvelle
adresse(Location:) est dans la suite du message
400 Bad Request

La requête n’a pas été comprise par le serveur
404 Not Found

Le document demandé n’a pas été trouvé sur le serveur
505 HTTP Version Not Supported
ENPC
Couche applicationProgrammation application
44
Communiquer avec le serveur HTTP (sans
navigateur) HTTP coté client “manuel”
1.
Telnet sur un site Web:
telnet verif.liafa.jussieu.fr 80
Ouvre une connexion TCP sur le port 80
(port HTTP par defaut)
Tous ce qui est tappé est envoyé sur ce port
2. Envoyer une requête HTTP de méthode GET:
GET /~cd/index.html HTTP/1.0
Cette ligne (+CR LF double)
est une requête
HTTP
3. Regarder la réponse du serveur…
ENPC
Couche applicationProgrammation application
45
[cd@liafa0p dess]$ telnet verif 80
Trying 132.227.81.70...
Connected to verif.
Escape character is '^]'.
GEt /~cd
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>
<TITLE>301 Moved Permanently</TITLE>
</HEAD><BODY>
<H1>Moved Permanently</H1>
The document has moved <A
HREF="http://verif.liafa.jussieu.fr/~cd/">here</A>.<P>
<HR>
<ADDRESS>Apache/1.3.26 Server at <A HREF="mailto:[email protected]">verif.liafa.jussieu.fr</A> Port
80</ADDRESS>
</BODY></HTML>
Connection closed by foreign host.
ENPC
Couche applicationProgrammation application
46
Interaction client-serveur: autorisation
Autorisation : contrôle d’accès
au serveur
ˆ Autorisation par des
“crédits”. Souvent nom , mot
de passe
ˆ Sans état: le client présente
ses crédits dans chaque
requête
 autorisation: ligne d’en-tête
de chaque requête
 Si pas d’autorisation: le
serveur refuse l’accès et
envoie
WWW authenticate:
dans l’en-tête de la
réponse
ENPC
client
serveur
mesg requête http
usuel
401: req. autorisation
WWW authenticate:
Msg requête http +
Autorisation: <cred>
Msg réponse http
usuem
Msg requête http +
Autorisation: <cred>
Msg réponse http usuel
time
Couche applicationProgrammation application
47
Cookies: mémoriser “ l’état”
De nombreux sites Web
utilisent la notion de
cookies
4 composantes:
1) Ligne en-tête cookie dans
le msg de réponse
2) Ligne en-tête cookie dans
le message de requête
HTTP
3) Fichier cookie conservé
sur le site de l’utilisateur
et utilisé par le navigateur
de l’utilisateur
4) Base de données sur le
site Web
ENPC
Exemple:


Si on accède toujours à
Internet depuis le
même PC
Quand on visite un site
pour la première. Quand
la première requête
HTTP arrive sur le site,
le site crée un unique
ID et crée une entrée
dans la base de données
pour cet ID
Couche applicationProgrammation application
48
Cookies: mémoriser “l’état” (suite)
client
Fichier cookie
ebay: 8734
serveur
requête http usuel
Le serveur créede ntré
ed
d
o
l’ID 1678 pour nn ans
réponse http usuel +
ée la
s
Set-cookie: 1678
ba
l’utilisateur
s
E
e
Fichier Cookie
amazon: 1678
ebay: 8734
requête http usuel+
cookie: 1678
réponse http
Action spécifique
s
ac cé
au cookie
Fichier Cookie
amazon: 1678
ebay: 8734
ENPC
ac
cé
s
Une semaine aprés
Requête http usuel
cookie: 1678
Réponse http
Action spécifique
au cookie
Couche applicationProgrammation application
49
Cookies (suite)
Ce que les cookies
apportent:
ˆ autorisation
ˆ Cartes de fidélité
ˆ recommandations
ˆ Session spécifique
pour les utilisateurs
ENPC
aparté
Cookies et vie privée:
ˆ Les cookies
permettent aux sites
d’apprendre beaucoup
sur l’utilisateur
ˆ Parfois lié a un e-mail
et un nom
ˆ Les moteurs de
recherche utilisent les
cookies de nombreux
sites pour en
apprendre encore plus
ˆ Infos pour les
publicitaires
Couche application50
Programmation application
GET conditionnel: cache client
ˆ But: ne pas envoyer un objet
si le client a déjà une version
à jour de l’objet dans ses
caches
ˆ client: spécifie la date de la
copie en cache dans la
requête HTTP
If-modified-since:
<date>
ˆ serveur: la réponse ne
contient aucun objet si la
copie en cache est à jour:
HTTP/1.0 304 Not
Modified
serveur
client
Requête HTTP
If-modified-since:
<date>
Réponse HTTP
object
non
modifié
HTTP/1.0
304 Not Modified
Requête HTTP
If-modified-since:
<date>
Réponse HTTP
objet
modifié
HTTP/1.0 200 OK
<data>
ENPC
Couche applicationProgrammation application
51
Cache Web ( serveur proxy)
But: satisfaire les requêtes des client sans mettre en jeu
le serveur original
ˆ
L’utilisateur
paramètre son
navigateur: accès au
Web via un cache


ENPC
objet en cache:le
proxy retourne
l’objet
Sinon le cache
réclame l’objet au
serveur original et
retourne l’objet au
client
Serveur
original
Proxy
HT
TP
ête
u
q
req server
e
uêt
Pr
T
se
client HTTP
n
T
e
o
H
rép
rép
P
ons
T
e
HT
te
ê
u
eq
r
nse
TP
o
T
p
H
ré
P
T
HT
client
Serveur
original
Couche applicationProgrammation application
52
More about Web caching
Le “cache” agit a la
fois comme client et
comme serveur
ˆ Le cache peut faire
des vérifications de
dates en utilisant Ifmodified-since de
l’en-tête HTTP.
ˆ De manière classique
un cache est installée
par les ISP
ˆ
ENPC
Pourquoi?
ˆ Réduit le temps de réponse
des requêtes clients
ˆ Réduit le trafic sur les
liens
ˆ les caches permettent
d’accéder rapidement a des
pages d’un serveur web lent
Couche applicationProgrammation application
53
FTP: file transfer protocol
utilisateur
Transfert de fichiers
FTP
FTP
FTP
Interface client
serveur
utilisateur
SGF local
SGF distant
ˆ Transfert de fichiers vers/depuis un hôte distant
ˆ Modèles client/serveur

client: site qui initie le transfert (soit vers ou depuis le
site distant)
 serveur: site distant
ˆ ftp: RFC 959
ˆ serveur ftp: port 21 (port 20)
ENPC
Couche applicationProgrammation application
54
FTP: 2 connexions séparées: contrôle et
données
ˆ Le client FTP contacte le
serveur FTP sur le port 21 et
spécifie le protocole de
transport
ˆ Le client obtient
l’autorisation sur la connexion
de contrôle
ˆ Le client navigue sur les
répertoires distants en
envoyant des commandes via
la connexion de contrôle
ˆ Quand le serveur reçoit une
commande de transfert de
fichier, il ouvre une connexion
de “données” TCP vers le
client
ENPC
xx
TCP connexion contrôle
21
yy TCP connexion données 20
FTP
client
FTP
serveur
ˆ Le port client pour cette
connexion a été indiqué par le
client via la commande PORT
ˆ Autre fonctionnement: Mode
Passif. La connexion de
données est ouverte a
l’initiative du client. Le port
que le client doit ouvrir est
indiqué dans la réponse de la
commande PASV
Couche application55
Programmation application
FTP: 2 connexions séparées: contrôle et
données
TCP connexion contrôle
ˆ Après le transfert du fichier,
le serveur ferme la connexion
de données.
ˆ Le serveur (ou le client
suivant le mode) ouvrira une
nouvelle connexion de
données TCP pour transférer
un autre fichier
ˆ Connexion de contrôle
séparée Æ “hors-bande”
ˆ Le serveur FTP conserve
l’“état”: répertoire courant,
identification
ENPC
FTP
client
TCP connexion données
FTP
serveur
Couche applicationProgrammation application
56
FTP commandes et réponses
Ex de commandes:
Envoyés comme texte ASCII
sur la connexion contrôle
ˆ USER nomutil
ˆ PASS motdepass
ˆ LIST renvoie la liste des
fichier du repertoire
(distant) courant
ˆ RETR fichier (get)
rapporte le fichier
ˆ STOR fichier
transfert
(put) transfert le fichier
sur le site distant
ENPC
Ex de réponses
Code de retour et phrases (id
HTTP)
ˆ 331 Username OK,
password required
ˆ 125 data connection
already open;
transfer starting
ˆ 425 Can’t open data
connection
ˆ 452 Error writing
file
Couche applicationProgrammation application
57
Ex
[cd@liafa0p cd]$ ftp verif
Connected to verif (132.227.81.70).
220220- Bienvenue sur le serveur FTP de l'équipe de vérification
220220220 FTP server ready.
Name (verif:cd):
331 Password required for cd.
Password:
530 Login incorrect.
Login failed.
ftp> debug
Debugging on (debug=1).
ENPC
Couche applicationProgrammation application
58
ftp> user cd
---> USER cd
331 Password required for cd.
Password:
---> PASS XXXX
230 User cd logged in.
ftp> ls
ftp: setsockopt (ignored): Permission denied
---> PASV
227 Entering Passive Mode (132,227,81,70,128,117)
---> LIST
150 Opening ASCII mode data connection for /bin/ls.
total 138621
-rwx------ 1 verif 4801 Oct 21 18:27 .ICEauthority
-rwx------ 1 verif 450 Feb 27 20:18 .TTauthority
-rw------- 1 verif 2848 Oct 21 18:27 .Xauthority
-rwx------ 1 verif 1422 Feb 27 2003 .Xdefaults
….
ENPC
Couche applicationProgrammation application
59
ftp> get essai1
local: essai1 remote: essai1
ftp: setsockopt (ignored): Permission denied
---> PASV
227 Entering Passive Mode (132,227,81,70,106,154)
---> RETR essai1
150 Opening ASCII mode data connection for essai1 (7 bytes).
226 Transfer complete.
7 bytes received in 0.0454 secs (0.15 Kbytes/sec)
ftp> ftp> quit
---> QUIT
221-You have transferred 7 bytes in 1 files.
221-Total traffic for this session was 13186 bytes in 2
transfers.
221-Thank you for using the FTP service on
verif.liafa.jussieu.fr.
221 Goodbye.
ENPC
Couche applicationProgrammation application
60
Courrier électronique
Trois composantes
principales:
agent utilisateurs (UA)
ˆ serveurs de courrier
ˆ Protocole de transfert:
SMTP
ˆ
UA
ˆ = lecteur de courrier“mail
reader”
ˆ Permet de composer, lire …
les messages du courrier.
ˆ ex., Eudora, Outlook, elm,
Netscape Messenger
ˆ Les messages entrants et
ENPCsortant sont conservés sur
le serveur
File des
messages sortant
UA
Boite à
lettre de l’utilisateur
Serveur
courrier
UA
SMTP
SMTP
serveur
courrier
Serveur
courrier
UA
SMTP
UA
UA
UA
Couche applicationProgrammation application
61
Courrier électronique: serveurs de
courrier
UA
serveur de courrier
ˆ La boite à lettre (mailbox)
contient les messages a
destination de l’utilisateur
ˆ File de messages pour les
messages sortant(à envoyer)
ˆ Protocole SMTP entre les
serveurs de courrier pour
envoyer/recevoir les
messages:
 client: le serveur de
courrier qui envoie
 “serveur”: le serveur de
courrier qui reçoit les
messages
ENPC
Serveur
courrier
UA
SMTP
SMTP
serveur
courrier
Serveur
courrier
UA
SMTP
UA
UA
UA
Couche applicationProgrammation application
62
Courrier électronique: SMTP [RFC
2821]
ˆ utilise TCP pour un transfert fiable des message antre
ˆ
ˆ
ˆ
ˆ
client et serveur, port 25
transfert direct : su serveur émetteur au serveur
récepteur
Transfert en trois phases
 poignée de main
 Transfert des messages
 fermeture
Interaction commande/réponse
 commandes: texte ASCII
 réponse: code et phrase
Les messages doivent être écrit en ASCII 7-bit
ENPC
Couche applicationProgrammation application
63
Ex: Alice envoie un message à Bob
4) Puis il envoie le message
par la connexion TCP
5) Le serveur de courrier de
Bob place le message dans
la boite aux lettres de Bob
6) Bob appelle son UA pour
lire son courrier
1) Alice utilise UA pour écrire
son message et l’adresse
[email protected]
2) Le UA d’Alice envoie le
message à son serveur de
courrier; le message est
placé dans la file des
messages
3) Le serveur de courrier de
Alice dans son rôle de
client ouvre une connexion
TCP avec le serveur de
courrier de Bob
1
user
agent
ENPC
2
mail
server
3
mail
server
4
5
6
user
agent
Couche applicationProgrammation application
64
Ex: interaction SMTP
S:
C:
S:
C:
S:
C:
S:
C:
S:
C:
C:
C:
S:
C:
S:
ENPC
220 hamburger.edu
HELO crepes.fr
250 Hello crepes.fr, pleased to meet you
MAIL FROM: <[email protected]>
250 [email protected]... Sender ok
RCPT TO: <[email protected]>
250 [email protected] ... Recipient ok
DATA
354 Enter mail, end with "." on a line by itself
Do you like ketchup?
How about pickles?
.
250 Message accepted for delivery
QUIT
221 hamburger.edu closing connection
Couche applicationProgrammation application
65
Utilisation de SMTP sans UA:
ˆ
telnet nomserveur 25
ˆ Obtenir la réponse 220 du serveur
ˆ Les commandes HELO, MAIL FROM:, RCPT TO:,
DATA, QUIT permettent d’envoyer un courrier
électronique.
ENPC
Couche applicationProgrammation application
66
Conclusions
ˆ SMTP utilise des
connexions persistantes
ˆ SMTP demande que les
messages (en-tête et
corps) soit en ASCII 7-bit
ˆ SMTP utilise CRLF.CRLF
pour terminer le message
Comparaison avec HTTP:
ˆ HTTP: retire
ˆ SMTP: pousse
ˆ Les deux interagissent via
des commandes/réponses
en ASCII
ˆ HTTP: chaque objet est
mis dans un message de
réponse
ˆ SMTP: plusieurs objets
peuvent être envoyés dans
un même message.
ENPC
Couche applicationProgrammation application
67
Format des messages du courrier
SMTP: protocole pour
l’échange de courrier
électronique
RFC 822: norme pour le
format des messages
textes:
ˆ Lignes d’en-tête. Ex:



To:
From:
Subject:
En tête
Ligne blanche
corps
différentes des commandes
SMTP !
ˆ corps

ENPC
le “message”, seulement
des caractères ASCII
Couche applicationProgrammation application
68
Format des messages: extensions
multimédia
ˆ MIME: multimédia mail extension, RFC 2045, 2056
ˆ Lignes supplémentaires de l’en tête déclarent le type
MIME du contenu
version MIME
methode utilisé pour
Coder les données
Données multimédia
type, soustype,
Déclaration des param
Données codées
ENPC
From: [email protected]
To: [email protected]
Subject: Image
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Type: image/jpeg
base64 encoded data .....
.........................
......base64 encoded data
Couche applicationProgrammation application
69
Types MIME
Content-Type: type/soustype; paramètres
Texte
Vidéo
ˆ ex sous types: plain,
ˆ ex sous types: mpeg,
html
Image
ˆ ex sous types: jpeg, gif
Audio
ˆ Ex de sous types: basic
(8-bit), 32kadpcm (codage
32 kbps)
ENPC
quicktime
Application
ˆ Données qui doivent être
traitées par un “lecteur”
pour être “visualisées”
ˆ Ex sous types: msword,
octet-stream
Couche applicationProgrammation application
70
Multipart Type
From: [email protected]
To: [email protected]
Subject: image
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=StartOfNextPart
--StartOfNextPart
Cher Bob, Voila une photo.
--StartOfNextPart
Content-Transfer-Encoding: base64
Content-Type: image/jpeg
base64 encoded data .....
.........................
......base64 encoded data
--StartOfNextPart
Qu’en penses tu?
ENPC
Couche applicationProgrammation application
71
Protocole d’accès au mail
user
agent
SMTP
SMTP
sender’s mail
server
access
protocol
user
agent
receiver’s mail
server
SMTP: envoie/conserve sur le serveur du destinataire
ˆ Protocole d’accès au courrier: récupération du courrier conservé
sur le serveur
 POP: Post Office Protocol [RFC 1939]
• autorisation (agent <-->serveur) et téléchargement
 IMAP: Internet Mail Access Protocol [RFC 1730]
• Plus de facilité(plus complexe)
• manipulation des messages conservés sur le serveur
 HTTP: Hotmail , Yahoo! Mail, etc.
ˆ
ENPC
Couche applicationProgrammation application
72
protocole POP3
Port 110 du serveur
Phase d’autorisation
ˆ Commande client :
user: nom d’utilisateur
 pass: mot de passe
ˆ Réponse du serveurs
 +OK
 -ERR

Phase de transaction,
ˆ
ˆ
ˆ
ˆ
client:
list: énumère les messages
retr: rapporte les
messages (par numéro)
dele: détruit
quit
ENPC
S:
C:
S:
C:
S:
+OK POP3 server ready
user bob
+OK
pass hungry
+OK utilisateur logé correctement
C:
S:
S:
S:
C:
S:
S:
C:
C:
S:
S:
C:
C:
S:
list
1 498
2 912
.
retr 1
<message 1 contents>
.
dele 1
retr 2
<message 1 contents>
.
dele 2
quit
+OK serveur POP3 déconnecté
Couche applicationProgrammation application
73
POP3 et IMAP
POP3
ˆ L’exemple précédent utilise
le mode “téléchargement et
destruction” .Dans ce mode
Bob ne peut pas re-lire son
courrier
ˆ Autre mode:“télécharge et
conserve ”: copies des
messages sur différent
clients différents
ˆ POP3 est sans état entre
les différentes sessions
ENPC
IMAP
ˆ Conserve les messages sur
le serveur
ˆ Permets à l’utilisateur
d’organiser ces messages
(sur le serveur) en dossiers
(folders)
ˆ IMAP conserve l’état entre
les sessions:

Les noms des dossiers et
les relations entre l’id des
messages et les dossiers
Couche applicationProgrammation application
74
DNS: Domain Name System
Personnes: plusieurs
identificateurs:

Numéro SS, nom et
prénoms…
Sites Internet, routeurs:



ENPC
adresse (32 bit) – utilisée
comme adresse dans les
datagrammes
“nom”, ex.: liafa.jussieu.fr
utilisée par les humains
Q: relation entre adresse
IP et le nom ?
Domain Name System:
ˆ Base de données distribuée
implémentée par une
hiérarchie de plusieurs
serveurs de nom
ˆ Protocole de la couche
application hôtes, routeurs,
serveurs de nom
communiquent pour résoudre
un nom (translation
adresse/nom)
 rmq: fonction de base de
l’Internet, implémentée
comme un protocole de la
couche application
Couche applicationProgrammation application
75
DNS
Pourquoi ne pas centraliser ˆ Aucun serveur n’a toutes
les relations nom-IP
DNS?
ˆ Un unique point de panne Serveurs de nom locaux:
 Chaque ISP, entreprise a
ˆ Volume du trafic
son serveur de nom (par
ˆ Distance avec la BD
défaut)
centralisée
 Une requête DNS d’un hôte
va en premier au serveur
ˆ administration
de nom local
Ne passe pas à l’échelle !
Serveurs de nom autorisés:


ENPC
Mémorise le nom et
l’adresse IP d’un site
Peut alors faire la
translation nom/IP
Couche applicationProgrammation application
76
DNS: serveurs de noms racines
ˆ Contacté par un serveur de nom local s’il ne peut pas faire lui-
même l’association
ˆ Serveur de nom racine:
 Contacte le serveur autorisé s’il ne connaît pas la translation
 Obtient la translation
 Renvoiea la
translation au serveur de noms local
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
ENPC
13 serveurs de
noms racines dans
le monde
Couche applicationProgrammation application
77
Ex (simple) DNS
site surf.eurecom.fr
veut l’adresse IP de
gaia.cs.umass.edu
DNS racine
2
4
5
1. Contacte son serveur DNS
local, dns.eurecom.fr
DNS local
2. dns.eurecom.fr contacte
dns.eurecom.fr
le serveur de nom racine, si
nécessaire
1
6
3. Le DNS racine contacte le
DNS autorisé,
dns.umass.edu, si
Site demandeur
nécessaire
surf.eurecom.fr
ENPC
3
DNS authorisé
dns.umass.edu
gaia.cs.umass.edu
Couche applicationProgrammation application
78
Ex: DNS
DNS racine
Le DNS racine:
ˆ Peut ne pas connaître
7
le DNS autorisé
ˆ
6
2
3
Peut connaître un
DNS intermédiaire: à
contacter pour
trouver le serveur
autorisé
DNS local
dns.eurecom.fr
1
8
Site demandeur
DNS intermédiare
dns.umass.edu
4
5
DNS autorisé
dns.cs.umass.edu
surf.eurecom.fr
gaia.cs.umass.edu
ENPC
Couche applicationProgrammation application
79
Requêtes DNS itérées
Requête récursive:
DNS racine
ˆ Met la charge de la
3
résolution de nom sur
le DNS contacté
ˆ Charge lourde?
Requête itérée:
ˆ Le DNS renvoie le
nom du serveur à
contacter
ˆ “Je ne connais pas le
nom, demandez à …”
Possibilité de
combinaison
Requête
itérée
2
4
7
DNS local
dns.eurecom.fr
1
8
Site demandeur
DNS intermédiaire
dns.umass.edu
5
6
DNS autorisé
dns.cs.umass.edu
surf.eurecom.fr
gaia.cs.umass.edu
ENPC
Couche applicationProgrammation application
80
DNS: mise en cache des
enregistrements
ˆ
ENPC
Quand un DNS apprend une translation nom/IP,
il la met en cache dans sa mémoire local
 Si une requête sur les données en cache passe
par le serveur, il répond même s’il n’est pas le
serveur autorisé
 les entrées en cache disparaissent après un
certain temps
Couche applicationProgrammation application
81
Enregistrements
DNS: BD distribuée d’enregistrements (resource records RR)
Format RR : (nom,
ˆ
Type=A


ˆ
nom est le nom du site
valeur est l’adresse IP
ˆ
valeur, type, ttl)
Type=CNAME

www.ufr-info-p7.jussieu.fr
est en fait
Type=NS


conejo.ufr-infonom est un domaine (ex
p7.jussieu.fr
jussieu.fr)
 valeur est le nom réel
valeur est l’adresse IP du
ˆ Type=MX
DNS autorisé du domaine

ENPC
nom est un synomyme du nom
réel
valeur est le nom du
serveur de courrier associé à
nom
Couche applicationProgrammation application
82
Protocole DNS: messages
Protocole DNS : messages de requête et de réponse, les deux
ont le même format
En-tête du msg
identification
ˆ identification: 16 bit #
Nombre de questions
pour la requête, la
réponse à la requête
utilise le même id
ˆ drapeau:
 Requête ou réponse
 recursion souhaité
 recursion disponible
 Réponse autorisé
ENPC
drpeau
Nombre de réponses RR
12 bytes
Nombre de RRS autorisés Nombre de RR aditionnel
Questions(nombre variable)
Réponses(nombre variable)
Autorité(nombre variable de RR)
Informations aditionnelles(nombre variable de
RR)
Couche applicationProgrammation application
83
Protocole DNS: messages
Champ nom et types
pour une requête
RRs en réponse
à une requête
Enregistrement pour les
serveurs autorisés
Info supplémentaire
ENPC
identification
Nombre de questions
drapeau
Nombre de réponses RR
12 bytes
Nombre de RRS autorisés Nombre de RR aditionnel
Questions(nombre variable)
Réponses(nombre variable)
Autorité(nombre variable de RR)
Informations aditionnelles(nombre variable de
RR)
Couche applicationProgrammation application
84

Documents pareils