2006-2007
Réseau
La couche Application
Emmanuel Hyon 2
2006-2007
Applications et protocoles de couche
application
Application (réseau):
processus répartis qui application
communiquent transport
network
data link
Tournent dans les hosts dans physical
“l’espace utilisateur”
Échangent des messages
pour réaliser la fonction de
l’application
Ex : email, ftp, Web
Protocoles : couche Application
Un “morceau” d’une application application
application
transport
Définit les messages échangés transport
network
network
data link
par les appli. et les actions à data link physical
physical
réaliser
Utilise les services de
communication fournis par les
protocoles de couche inférieure
(TCP, UDP)
Emmanuel Hyon 3
2006-2007
Le paradigme Client-serveur
Une appli réseau a deux application
morceaux: client et transport
network
serveur data link
physical
Client:
request
Initie le contact avec le
serveur (“parle en 1er”)
Demande un service
Web: client implanté dans le
navigateur; e-mail: dans reply
l’utilitaire de mail
application
transport
Serveur: network
data link
physical
Fournir les services demandés aux
clients
Ex : le serveur Web envoie la page
Web demandée, le serveur de mail
délivre le courrier
Emmanuel Hyon 6
2006-2007
Les services
des protocoles de transport Internet
Service TCP: Service UDP:
Orientée-connexion: connexion Transfert de données
entre le client et le serveur non fiables entre
Transport fiable entre processus émetteur et
processus émetteur et récepteur
récepteur Ne fournit pas :
Contrôle de flux : l’émetteur établissement de
n’engorge pas le récepteur connexion, fiabilité,
Contrôle de congestion : contrôle de flux,
étranglement de l’émetteur contrôle de congestion,
quand le réseau est surchargé garanties de délai et de
bande passante
Ne fournit pas : garantie de
délai, garantie d’un minimum
de bande passante Pourquoi y a-t-il un UDP?
Emmanuel Hyon 9
2006-2007
Socket
Schéma illustratif
Un exemple http
Soit un utilisateur qui saisit l’URL (contient du texte,
www.someSchool.edu/someDepartment/home.index
et des références à 10
images jpeg )
1a. Le client http initie la
connexion TCP to serveur http
(processus) sur la machine 1b. Le serveur http de la
www.someSchool.edu. Le port 80 machine
est le numéro par défaut de ce www.someSchool.edu est en
serveur http (ce processus). attente sur la connexion TCP
au port 80. Il accepte la
connexion, et notifie le
2. Le client http envoie un client
request message http
(contenant l’URL) sur la 3. Le serveur http reçoit le
socket TCP message, forme le response
message contenant l’objet
demandé
(someDepartment/home.ind
ex), émet le message sur la
socket
temps
Emmanuel Hyon 15
2006-2007
requêtes
Méthodes
GET Pour demander une ressource est sans effet sur la
ressource.
HEAD Ne demande que des informations sur la ressource,
sans demander la ressource.
POST Utilisée lorsqu'une requête modifie la ressource.
OPTIONS Permet d'obtenir les options de communication
d'une ressource ou du serveur en général.
CONNECT Permet d'utiliser un proxy comme un tunnel de
communication.
TRACE Demande au serveur de retourner ce qu'il a reçu.
But test et diagnostic sur la connexion.
Emmanuel Hyon 20
Statuts
Le chiffre des centaines représente une classe
de réponses.
1xx Information
2xx Succès
3xx Redirection
4xx Erreur du client
5xx Erreur du serveur
Autres exemples
503 Service Unavailable
403 Forbidden
304 Not Modified
Emmanuel Hyon 24
2006-2007
Interaction utilisateur-serveur :
authentification
Authentification : contrôle
d’accès au contenu du client serveur
serveur
Autorisation : généralt
usual http request msg
nom, mot de passe 401: authorization req.
Sans état : le client doit WWW authenticate:
présenter son autorisation
à chaque requête
authorization: ligne usual http request msg
d’entête à chaque + Authorization:
requête <cred>
usual http response msg
Si pas authorization: le
serveur refuse l’accès,
et utilise le message de usual http request msg
status code 401 + Authorization:
WWW authenticate: <cred>
usual http response msg time
Emmanuel Hyon 26
Exercices II
2006-2007
Définition Session :
Connexion d'une durée indéfinie (bornée) entre un
utilisateur et un correspondant (généralement un
serveur). Elle nécessite l'échange de messages
entre les deux parties
Principe d'une session :
Permet de conserver des informations sur un
internaute tout au long de sa visite sur un site.
Pour lui donner l'impression d'une seule
connexion.
Contraintes d'une session
Identifier l'utilisateur alors que http est «stateless»
Associer à l'utilisateur certaines valeurs
Associer à l'utilisateur espace mémoire (2nd temps)
Emmanuel Hyon 34
Identification de la connexion
Dans les cookies.
Dans l'URL (présente sous la forme session=xxx).
Dans l'URL (forme variable précise gérée par
utilisateur).
Sauvegarde des infos
Dans la base de données du site (ou fichier) pour
associer des informations à cette session. Info
rémanentes.
Dans l'espace mémoire associé à la session.
Passage des valeurs
Par les URI (?valeur)
La session (valables tout le temps)
Emmanuel Hyon 35
2006-2007
Authentification
Gérée par le serveur
htaccess avec serveur Apache
Mot de passe, Adresse IP
Contrôle l'accès à la page elle-même
Aucun fichier html renvoyé si mauvaise
identification
Gérée par la session
Fichier html renvoyé
Contrôle d'accès à partir d'une page web
Gestion par l'application
Emmanuel Hyon 36
Htaccess
2006-2007
deny from all (allow from all)
Interdiction @ IP (Autorisation plage @ IP)
deny from 192.168.1.2 (allow from 192.168.2)
Interdiction (autorisation) domaine
deny from microsoft.com (allow from .fr)
Ordre sur les traitements
outgoing
Courrier électronique message queue
user mailbox
Trois composants majeurs user
: agent
user agents mail
user
server
Serveurs de mail agent
SMTP : Simple Mail Transfer SMTP mail
Protocol
server user
User Agent SMTP agent
Simulation du fonctionnement du
user agent
Le user agent est sur miage03. Il interagit avec
le serveur SMTP sur miage05 en écoute sur le
port 25
Fonctionnement :
Le user agent ouvre une connexion TCP avec le
serveur SMTP sur le port 25. Pour simuler cette
opération :
miage03%telnet 192.168.5.9 25
Miage03%telnet miage05.miage.u-paris10.fr 25
Le user agent utilise les commandes SMTP : HELO,
MAIL FROM, RCPT TO < >, DATA, QUIT
Emmanuel Hyon 46
2006-2007
C: DATA
S: 354 Enter mail, end with "." on a line by itself
C: Je simule un user agent qui dialogue avec le MTA
C: . transfert
From: alice@crepes.fr
Version MIME To: bob@hamburger.edu
méthode utilisée Subject: Picture of yummy crepe.
pour coder les données MIME-Version: 1.0
base64, quoted-printable Content-Transfer-Encoding: base64
encoding, …) Content-Type: image/jpeg
Image Application
Exemples de sous-types : Autres données qui doivent
jpeg, gif être traitées par un user
agent avant d’être “lisibles”
Audio Exemples de sous-types :
msword, octet-stream
Exemples de sous-types :
basic (8-bit mu-law encoded),
32kadpcm (32 kbps coding) Multipart
Différents types de contenus
Délimiteurs pour les
différencier
Emmanuel Hyon 51
2006-2007
HTTP et SMTP
HTTP SMTP HTTP user
user
agent
agent
a NSI Herndon, VA
c PSInet Herndon, VA k RIPE London
d U Maryland College Park, MD
g DISA Vienna, VA i NORDUnet Stockholm
h ARL Aberdeen, MD
j NSI (TBD) Herndon, VA
m WIDE Tokyo
e NASA Mt View, CA
f Internet Software C. Palo Alto, CA
13 serveurs root
Emmanuel Hyon 62
2006-2007
Un exemple simple
serveur root
L’host miage03.miage.u-
paris10.fr veut l’@ IP de
www.wia.org
1. Il contacte son serveur DNS 2 4
local 5 3
2. Le serveur DNS local contacte
le serveur root, si nécessaire
3. Le serveur root contacte le
serveur d’autorité, si
nécessaire serveur DNS local serveur d’autorité
1 6
host www.wia.org
miage03.miage.u-paris10.fr
Emmanuel Hyon 63
2006-2007
www.wia.org
Emmanuel Hyon 64
2006-2007
Cache DNS
Optimiser les applications
Les applications (ftp, smtp, http) utilisent le DNS
pour la résolution de noms
Ex : mail to : toto@yahoo.com ou http://webdev.u-
paris10.fr
Le temps de réponse de l’appli est augmenté du
temps de résolution (interrogations successives de
serveurs)
Quand un serveur connaît une résolution
(après avoir interrogé les autres serveurs), il la
stocke dans un cache (mémoire locale)
Une entrée du cache est supprimée après
timeout ttl
Lors d’une demande de résolution, le serveur
DNS commence par regarder son cache
Emmanuel Hyon 66
2006-2007
Enregistrements DNS
Le nom recherché et le
type de question
posée sur ce nom
nformation complémentaire
Emmanuel Hyon 69
2006-2007
Exercices
Le fichier /etc/resolv.conf
Quel est le rôle de ce fichier ?
Le fichier /etc/hosts ?
Les commandes nslookup, host et dig
En ligne (sous Linux ou DOS) ou sur le web
nslookup
http://www.webreference.com/cgi-bin/nslookup.cgi
http://www.dnsstuff.com
dig
http://www.netliner.com/noc.html
Principes
:
Transformer un texte clair en un texte illisible
seulement compréhensible après cryptage
décryptage par expéditeur et récepteur
Opération de transformation s'appelle le cryptage
et le texte illisible le texte codé ou chiffré.
Buts :
Confidentialité
Authentification
Intégrité
Contrôle d'accès
Emmanuel Hyon 80
2006-2007
Les Clefs
Algorithme de chiffrement prend en entrée
une clef
Ex: L'algo de César remplace une lettre dans message
en clair par une autre lettre situé k lettres plus loin et
k est la clef.
Clef Symétrique
Les clefs de l'expediteur et du destinataire sont les
mêmes
Problème pour l'échange de clefs
Clefs assymétriques
Les clefs sont différentes (ex classique cadena et
la clef)
Clef publique/Clef privée
Emmanuel Hyon 81
Principes
Emmanuel Hyon 85
Les commandes
Les commandes
Les sockets :
l’API de la couche transport
Emmanuel Hyon 89
2006-2007
Socket
Architecture d'une socket
Les ports
2006-2007
Notion de « port »
Rappel architecture en couches
network network
Socket et port
Machine cliente Machine serveur
Ém
iss
ion applic
C
socket Ém
iss
/ ré
ce
ation
ion pti
S/ on
réc S
applic ep
tio
socket
nC
ation
Ex de n° de ports :
FTP : 21 HHTP : 80 SMTP : 25
DNS : 53 POP3 : 110 IMAP : ??
Emmanuel Hyon 95
2006-2007
Progammation java
Package java.net, contient deux classes
http://java.sun.com/j2se/1.3/docs/api/java/net/package-
summary.html
La classe DatagramPacket : manipulation des
PDU
Les objets de la classe encapsulent
Un buffer, une taille, une @ IP, un n° de port UDP
Quatre constructeurs disponibles
Méthodes : getAdress(), getPort(), getData(), …
setAdress(), setPort(), setData(), …
La classe DatagramSocket : création de socket
et émission/réception des PDU
Constructeur => Création de la socket
Méthode send() => Émission de PDU
Méthode receive() => Réception de PDU
Emmanuel Hyon 96
2006-2007
inFromUser
in p u t 6 - Afficher les résultats
2 - Créer une socket s tr e a m
PProcessus
ro c e s s
3 - Initialiser la PDUClient
5 - Recevoir la PDU
4 - Envoyer la
PDU
receivePacket
sendPacket
U D P U D P
packet packet
c l i e n tS o c k e t
socket client UDP
U D P
socket
port
to n e tw o r k f r o m n e tw o r k
Emmanuel Hyon 98
2006-2007
Exemple : le client Java (UDP)
...
class MonUDPClient {
public static void main(String args[]) throws Exception {
// 1 - Creation du buffer de lecture clavier
BufferedReader inFromUser = new BufferedReader
(new InputStreamReader(System.in));
// 2 - Creation de la socket, n° de port par defaut
DatagramSocket clientSocket = new DatagramSocket();
System.out.println("socket cliente attachee au port "
+ clientSocket.getLocalPort());
// 3 - Recuperation de l'@IP du serveur
InetAddress IPAddress =InetAddress.getByName("miage03.miage.u-paris10.fr");
// 3bis - preparation de l'echange
byte[] sendData = new byte[1024];
byte[] receiveData = new byte[1024];
String sentence = inFromUser.readLine();
sendData = sentence.getBytes();
int length = sendData.length();
// 3ter - Initialisation de la (UDP)PDU a emettre
DatagramPacket sendPacket = new DatagramPacket
(sendData, sendData.length, IPAddress, 9876);
// 4 - Emission de la (UDP)PDU
clientSocket.send(sendPacket);
Emmanuel Hyon 99
2006-2007
// Fermeture de la socket
clientSocket.close();
}
}
Emmanuel Hyon 100
class MonUDPServer {
public static void main(String args[]) throws Exception {
// creation d'une socket sur le port 9876. Le serveur attend sur ce
port
DatagramSocket serverSocket = new DatagramSocket(9876);
byte[] receiveData = new byte[1024];
byte[] sendData = new byte[1024];
while(true){
// Traitement de la reception
// creation d'un buffer de (UDP)PDU arrivant sur la socket
DatagramPacket receivePacket =
new DatagramPacket(receiveData, receiveData.length);
// reception d'un (UDP)PDU sur la socket
serverSocket.receive(receivePacket);
// rangement du champ de donnees de l'(UDP)PDU dans une string
String sentence = new String(receivePacket.getData());
// recuperation de l'@ IP de l'emetteur
InetAddress IPAddress = receivePacket.getAddress();
// recuperation du n∞ de port de l'emetteur
int port = receivePacket.getPort();
// traitement du champ de donnees
String capitalizedSentence = sentence.toUpperCase();
Emmanuel Hyon 101
2006-2007
// Traitement de l'emission
}
}
}
Emmanuel Hyon 102
2006-2007
Exécution
L’utilisateur saisit sur le client :
java echoUDPClient miage03.miage.uparis10.fr
«ceci est le texte original saisi sur le client»
Le résultat affiché sur le client est :
socket cliente attachee au port 32793
46 octets emis vers le serveur
miage03.miage.u-paris10.fr/192.168.5.3
FROM SERVER /192.168.5.3:9876
46 octets recus
ECHO = ceci est le texte original saisi sur le client
•Le serveur affiche :
Socket serveur en écoute sur le port
Segment UDP FROM @:port
# octets reçus
texte:
Emmanuel Hyon 104
2006-2007
Exécution de l’application
Placer le code sur client votre machine locale
Placer le code serveur sur miage03
Pour chacun d’eux, compiler
Lancer l’exécution du serveur (sur la machine
miage)
Exécuter le client
(on pourrait lancer le client d’abord, mais il
ne se passera rien, i.e. il sera bloqué en
attente tant que le serveur ne sera pas lancé)
Attention les ports du serveur doivent être
uniques à chaque binôme
Emmanuel Hyon 105
2006-2007
Programmation Java
write reply to
connectionSocket read reply from
clientSocket
close
connectionSocket close
clientSocket
Emmanuel Hyon 109
2006-2007
inFromUser
in p u t
envoie au serveur via la s tr e a m
socket (stream Client
outToServer) P ro c e s s Input stream:
Le serveur lit le flux process sequence of bytes
provenant de la socket output stream: into process
Il convertit les données en sequence of bytes
les mettant en majuscule out of process
et les renvoit au client
inFromServer
outToServer
o u tp u t in p u t
Le client lit et affiche les s tr e a m s tr e a m
to n e tw o r k fr o m n e tw o r k
Emmanuel Hyon 110
2006-2007
import java.io.*;
import java.net.*;
class TCPClient {
BufferedReader inFromUser =
Lecture du clavier new BufferedReader(new InputStreamReader(System.in));
Création de la
socket client & Socket clientSocket =
demande de new Socket(”miage18.miage.u-paris10.fr", 6789);
connexion
Création du flux DataOutputStream outToServer =
en sortie attaché new DataOutputStream(clientSocket.getOutputStream());
à la socket
Emmanuel Hyon 111
2006-2007
sentence = inFromUser.readLine();
Emission des données
au serveur outToServer.writeBytes(sentence + '\n');
clientSocket.close();
}
}
Emmanuel Hyon 112
2006-2007
class TCPServer {
Création du flux
en sortie attaché à DataOutputStream outToClient =
la socket new DataOutputStream(connectionSocket.getOutputStream());
Lecture des données clientSentence = inFromClient.readLine();
arrivant du client
capitalizedSentence = clientSentence.toUpperCase() + '\n';