Vous êtes sur la page 1sur 119

Master Miage

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

Rappel (Modèle DOD)


 Architecture en couche
 J’utilise les services de la couche inférieure
 Je délivre des services à la couche supérieure
 Je dialogue avec des homologues distant selon un
protocole donné.
 Couche Application
 Quels services sont délivrés ?
 Quels services sont utilisés ?
 Quels sont les protocoles ?
Emmanuel Hyon 4
2006-2007

Applications réseau : terminologie


Processus: programme
qui s’exécute sur un
host  Agent utilisateur (user
 Dans le même host,
agent): processus
s’interfaçant avec
deux processus l’utilisateur “en haut”
communiquent en et le réseau “en bas”
utilisant les  Implante le protocole
mécanismes IPC de couche application
(définis par le système
 Web: navigateur
d’exploitation)
InterProcess  E-mail: utilitaire de
Communication mail (Mozilla,
 Deux processus Outlook, …)
tournant dans des  Flux audio/video:
hosts différents media player
communiquent via un
protocole de couche
application
Emmanuel Hyon 5
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

De quel service de transport


une application a-t-elle besoin ?
Perte de données Bande passante
 Certaines appli (ex,  Certaines appli (ex,
audio) tolèrent des multimedia)
pertes nécessitent un
montant minimum de
 D’autres (ex transfert BP pour être efficace
fichiers) nécessitent un  D’autres (“appli
transfert fiable à 100% élastiques”)
Délai fonctionnent quelque
soit la BP dont elles
 Certaines appli (ex, disposent (email,
téléphonie Internet, Web, transfert de
jeux interactifs) fichiers)
nécessitent des délais
faibles pour être
efficaces
Emmanuel Hyon 7
2006-2007

Besoins en services de transport des


applications courantes
Application Data loss Bandwidth Time
Sensitive
file transfer no loss elastic
e-mail no loss elastic no
Web documents loss-tolerant elastic no
real-time audio/video loss-tolerant audio: 5Kb-1Mb no
video:10Kb- yes, 100’s msec
stored audio/video loss-tolerant 5Mb
interactive games loss-tolerant same as above yes, few secs
financial apps no loss few Kbps up yes, 100’s msec
elastic yes and no
Emmanuel Hyon 8
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

Applications, protocoles d’application et


protocoles de transport Internet
Application Underlying
Application layer protocol transport protocol

e-mail smtp [RFC 821] TCP


remote terminal access telnet [RFC 854] TCP
Web http [RFC 2068] TCP
file transfer ftp [RFC 959] TCP
streaming multimedia proprietary TCP or UDP
(e.g. RealNetworks)
remote file server NSF TCP or UDP
Internet telephony proprietary typically UDP
(e.g., Vocaltec)
Emmanuel Hyon 10
2006-2007

Protocoles de couche application


API: Application Comment un
Programming Interface processus identifie-t-
 Définit l’interface entre il l’autre processus
l’application et les avec lequel il veut
couches transport communiquer ?
 Ex : socket (prise)  adresse IP de l’host
 API Internet sur lequel tourne
l’autre processus
 Deux processus
communiquent en envoyant
 “numéro de port” -
des données sur la socket permet à l’host
et en lisant les données de récepteur de
la socket déterminer à quel
processus local le
message doit être
délivré

… plus de détails plus tard


Emmanuel Hyon 11
2006-2007

Socket

Schéma illustratif

« porte » entre le protocole d’appli et TCP (ou UDP


Emmanuel Hyon 12
2006-2007

Le Web: le protocole http


http: HyperText Transfer
Protocol
htt
 Protocole de couche pr
equ
application de l’application PC avec htt est
WWW pr
IE esp
on
 Modèle client/serveur se
 client: navigateur qui
demande, reçoit et affiche es
t
des objets Web (fichier u
r eq se Serveur
html, image JPEG, GIF, tp on
ht p exécutant un
applet java, …). Le r es
p serveur Web
navigateur est aussi le htt
Apache
user agent
 serveur: serveur Web qui
Mac avec
envoie les objets en Netscape Navigator
réponse aux requêtes
 http1.0: RFC 1945
 http1.1: RFC 2616
Emmanuel Hyon 13
2006-2007

Le protocole http : plus de détails


http: service de transport http est
TCP “stateless”
 Le client initie une connexion  Le serveur ne
TCP (crée une socket) vers le maintient aucune
serveur, en utilisant le n° de information sur les
port 80 requêtes des clients
 Le serveur accepte les
aparté
connexions TCP du client Les protocoles qui
 Les messages http (APDU) sont maintiennent un état
échangés entre le navigateur sont complexes !
(client http) et le serveur Web  Historique (état) à
(serveur http) maintenir
 La connexion TCP est fermée  Si le serveur/client
tombe, leurs états
respectifs peuvent être
incohérents, et doivent
être réconciliés
Emmanuel Hyon 14
2006-2007

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

Suite de l’exemple http

4. Le serveur http ferme la


connexion TCP
5. Le client http reçoit le msg de
réponse contenant le fichier
html, affiche le html. En parsant
le fichier html, il trouve les 10
références d’objets JPEG (liens)

temps 6. Les étapes 1 à 5 sont


répétées pour chaque objet
JPEG

Connexion non persistante

Combien de connexions TCP sont-elles nécessaires ?


Emmanuel Hyon 16
2006-2007
Connexions non-persistantes,
persistantes
Non-persistante (close) Persistante (keep alive)
 http/1.0: le server
serveurparse
parsela  Par défaut pour http/1.1
requête,
la requête,
répond,
répond,
ferme
fermela  Sur la même connexion TCP :
connexion
la connexionTCPTCP le serveur parse la requête,
 Combien de RTTs pour répond, parse la nvlle
aller chercher l’objet requête,…
requis
 2 ?  Il fermera la connexion après
La connexion TCP son inutilisation durant un
 La requête/transfert
certain temps (configurable)
d’objet  Avec pipeline : Le client
envoie une requête dès qu’il
 La plupart des rencontre une référence
 navigateurs
La ouvrent des
plupart des
navigateurs
connexions parallèles
ouvrent des  Sans pipeline : possible, pas
multiples parallèles
connexions le mode par défaut de 1.1. Le
multiples client envoie une requête
après avoir reçu la réponse
de la requête précédente
Combien de RTT pour la
page web précédente ?
Emmanuel Hyon 17
2006-2007

Format des messages http : request


 Deux types de messages http : request, response
 Le message http de request :
 ASCII (format lisible)
Méthode
(HEAD, POST,
request line GET) URL requise Version du protocole
3 champs
GET /somedir/page.html HTTP/1.1
Host: www.someschool.edu
Connection:close Non persistante
Header lines User-agent: Mozilla/4.0
Netscape
Accept-language:fr
Carriage return,
line feed
indicates end (extra carriage return, line feed)
of message
Emmanuel Hyon 18
2006-2007

Le format général du message http


request

Pas utilisé par GET et HEAD


Utilisé par POST (pour des données de
formulaire, ex: google)
Emmanuel Hyon 19

En-tête HTTP (1.1)


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

En-tête HTTP 1.1


2006-2007

Options des Requêtes


 Host Site Web concerné par la requête (serveur
hébergeant plusieurs sites à même adresse IP).
Obligatoire HTTP 1.1
 Referer URI du document avec lien sur la ressource
demandée.
 User-Agent Logiciel utilisé pour se connecter.
 Connection Précise si la connexion est persistante
(Keep Alive) ou non (close)
 Accept types MIME acceptés par le client (/txt/html
par exemple).
 Accept-Charset encodages de caractères acceptés.
 Accept-Language langues acceptées.
Emmanuel Hyon 21
2006-2007

Format des messages http : response

Version du protocole Status code status phrase


status line
(3 champs) HTTP/1.1 200 OK
Date: Thu, 06 Aug 1998 12:00:15 GMT
Server: Apache/1.3.0 (Unix)
Accept-Ranges: bytes
header Content-Language: fr
lines Content-Length: 6821
Content-Type: text/html
ETag: "ab010-2adf-3d202062”
Last-Modified: Mon, 22 Jun 1998 ……
Data
(ex : Fichier html
demandé) data data data data data ...
Emmanuel Hyon 22
2006-2007

Status codes des réponses http

2ème champ de la ligne status


Qq Exemples
200 OK
 Requête réussie, l’objet demandé est dans le
message
301 Moved Permanently
 L’objet demandé a été déplacé, sa nouvelle
localisation figure dans ce message (Location:)
400 Bad Request
 Message de requête non compris par le serveur
404 Not Found
 Doument demandé non trouvé sur le serveur
505 HTTP Version Not Supported
Emmanuel Hyon 23

En-tête HTTP (1.1)


2006-2007

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

En-tête réponses HTTP (1.1)


Options

 Date Moment auquel le message est généré.


 Server Modèle du serveur HTTP qui répond à la
requête.
 Content-Length Taille en octets de la
ressource.
 Content-Type type MIME de la ressource.
 Expires date après laquellle la ressource
devrait être considérée obsolète
 Last-Modified Date de dernière modification
de la ressource.
Emmanuel Hyon 25
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

Cookies : gardien d’état


2006-2007

 Le serveur génère un n° client serveur


d’identification, qu’il
mémorise et qu’il usual http request msg
utilise pour : usual http response +
 L’authentification Set-cookie: #
 Le stockage des
préférences de
l’utilisateur usual http request msg
cookie: # cookie-
 Le serveur envoie le specific
“cookie” au client dans usual http response msg
un message response action
Set-cookie: 1678453
 Le client présente le usual http request msg
cookie dans ses cookie-
cookie: #
requêtes futures specific
cookie: 1678453 usual http response msg action
Emmanuel Hyon 27
2006-2007

GET conditionnel : cache côté client

 But : Ne pas envoyer client serveur


l’objet si le client a une
version à jour dans son http request msg
cache If-modified-since:
<date>
objet
 Client: spécifie la date de non
la version cachée dans la modifié
requête http http response
If-modified-since: <date> HTTP/1.0
304 Not Modified
 Serveur : la réponse ne
contient pas d’objet si la
version cachée est à jour http request msg
: If-modified-since:
HTTP/1.0 304 Not Modified <date> objet
modifié
http response
HTTP/1.1 200 OK
<data>
Emmanuel Hyon 28
2006-2007

Cache Web (serveur proxy)


But : satisfaire la reqûete client sans invoquer le
serveur d’origine
 L’utilisateur utilise un origin
navigateur : le Web server
accède au cache web
 Le client envoie toutes htt Proxy
pr e st
les requêtes http au equ server u
htt est req
cache web client pr
esp htt
p
p o nse
 L’objet est dans le ons p res
e htt
cache: le cache t
l’envoie u es
p r eq n se
 Sinon le cache ht t po
demande l’objet au r es
p
serveur d’origine, puis htt
l’envoie au client
client
origin
server
Emmanuel Hyon 29
2006-2007

Pourquoi les caches Web ?

Hypothèse : le cache est origin


“proche” du client (par servers
ex., dans le même
public
réseau) Internet
 Réduction des temps de
réponse (la réponse
vient plus vite
puisqu’elle vient de 1.5 Mbps
access link
moins loin)
 Réduction du trafic sur institutional
network
le réseau 10 Mbps LAN
 Pas de génération de
trafic pour aller chercher
la réponse sur un site
éloigné institutional
cache
Quelle différence de temps
Emmanuel Hyon 30
2006-2007
Exercices I
HEAD http://www.inria.fr/index.fr.html HTTP/1.1
 Quel est l’effet de cette commande (sous linux) ?
 Quel est le type et la version du serveur HTTP distant ?
Quel type de connexion supporte-t-il ?
 Connectez vous avec un telnet à l'inria (sur le port 80) et
tapez la requête HTTP équivalent à cette commande.
 Modifiez la requête pour avoir l'ensemble des données de
la page
 Télécharger une image contenue dans cette page
 Modifiez le champs Accept-langage:en.Le texte est-il en
anglais ? (et en remplaçant fr par en dans URI)
 Identifiez vous le cookie ?
Emmanuel Hyon 31

Exercices II
2006-2007

 Même chose avec Nanterre ?


telnet www.u-paris10.fr 80
Get ? HTTP/1.1
Host: www.u-paris10.fr
Connection:close
 Essayez de vous connecter en replaçant www.u-paris10.fr
par ksup.u-paris10.fr dans le telnet
 Essayez de vous connecter en remplaçant également dans
le host
Emmanuel Hyon 32
2006-2007
Exercices III
L'URL d'un site est :
http://www.blabla.fr/unfichier.html
 Quel est le terminal (host) ?
 Quel est le chemin du fichier ?
Donner la version de votre requete HTTP (contenu GET
et Host)
 Vérifier avec
http://guilde.jeunes-chercheurs.org/Guilde/index.html
Et si vous essayiez d'aller à (avec votre navifateur)
http://postes.smai.emath.fr/2002/index.php
 Avec telnet
Quel va devoir être votre réponse ?
Emmanuel Hyon 33

Les « sessions » WEB


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

Les « sessions » WEB


2006-2007

 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

 Redirections des pages d'erreurs


 URL rewritting
 “Réécriture” des Index des répertoires
 Restriction d'accès pour un répertoire et son
arborescence
 2 fichiers
 Gestion des authentification : .htaccess
 Gestion des mots de passe : .htpasswd
 Syntaxe du .htaccess (pour authentification)
 En tête
 Authentification par login
 Authentification par @IP ou par domaine
Emmanuel Hyon 37
2006-2007
.htaccess
(Restriction d'accès par nom)
 En tête :
AuthType Basic
- Authentification de type basique les mots de passe
circulent en clair sur le réseau (encodés en base64)
AuthUserFile /chemin/absolu/sur/serveur/.htpasswd
- N.B. Le nom .htpasswd peut être changé
AuthName ''Le message mis pour l'utilisateur''
 Activation service (autorisation nécessaire pour methode
get et post)
<LIMIT GET POST> 
require valid­user
</LIMIT>
 Fichier mots de passe (clair ou crypté MD5)
login:nom
Emmanuel Hyon 38
2006-2007
.htaccess
(Restriction d'accès par domaine)
 Interdiction (autorisation) totale

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

order deny allow Traite d'abord refus puis autorisations


 L'appliquer aux méthodes GET & POST (avec balise
limit)
 Appliquer à un fichier
balise <file nom> encapsulant config. des restrictions
 Modification des accès pour sous répertoire
Emmanuel Hyon 39
2006-2007

FTP: File Transfer Protocol

FTP file transfer


user FTP FTP
interface client server
utilisateu
r Système Système de
sur host de fichiers fichiers distant
local
 Transfère des fichiers d’un/vers un hôte distant
 Modèle client/serveur
 client: côté qui initie le transfert (de/vers le
distant)
 serveur: hôte distant
 ftp: RFC 959
 serveur ftp : port 21
Emmanuel Hyon 40
2006-2007

ftp: connexions séparées pour le contrôle


et les data
 Le client ftp contacte le serveur
ftp sur le port 21, en spécifiant
TCP comme protocole de
transport
TCP control connection
 Deux connexions TCP parallèles port 21
sont ouvertes :
 Contrôle : échange des
commandes et réponses TCP data connection
entre le client et le serveur FTP port 20 FTP
“contrôle hors bande” client server
 Données : fichier de
données du/vers le serveur
 Le serveur ftp maintient un
“état”: le répertoire courant,
l’authentification lors de la
connexion
Emmanuel Hyon 41
2006-2007
Commandes ftp
Les commandes ftp sont envoyées comme du
texte ASCII sur le canal de contrôle
 Que font les commandes suivantes ?
 open, user, pwd, cd, lcd, get, recv, mget, put,
send, mput, status
 Un peu d'aide :
 Sur miage03, lancer le client ftp
miage03$ftp
 help : liste des commandes
ftp>? nom-commande
 Ouvrir une connexion avec ftp.lip6.fr en login
anonyme : rapatrier le rapport LIP6 le plus
récent (/lip6/reports/………….)
 Ftp sécurisé (sftp) le lip6 accepte-t-il le ftp
sécurisé ?
 Quelles commandes sont disponible avec le sftp
Emmanuel Hyon 42
2006-2007

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

 Appelé parfois “mail reader”


 Composer, éditer, lire les
SMTP
mail user
messages server agent
 Ex de user agent GUI : Eudora,
Outlook, Netscape Messenger user
 Ex de user agent non GUI : agent
elm, mail, pine user
 Les messages sortants et agent
entrants sont stockés sur le
serveur
Emmanuel Hyon 43
2006-2007

Les serveurs de mail


Trois éléments user
 Les mailbox qui contiennent agent
les messages entrants (encore mail
non lus) des utilisateurs user
server
agent
 La file des messages sortants
(qui doivent être expédiés) SMTP mail
 Le protocole SMTP entre server user
serveurs de mail pour envoyer SMTP agent
les messages
 Modèle client/serveur
SMTP
 Sur le serveur de mail S, le mail user
client SMTP s’occupe de server agent
l’expédition du mail
 Sur le même serveur de user
mail S, le serveur SMTP agent
s’occupe de la réception du user
mail agent
Emmanuel Hyon 44
2006-2007

Courrier électronique : smtp [RFC 821]


 Utilise tcp pour transférer de façon fiable un message d’un
client vers un serveur, port 25
 Transfert direct : du serveur émetteur vers le serveur
récepteur
 Trois phases de transfert
 Ouverture
 Transfert de messages
 Fermeture
 Interaction de forme commande/réponse
 Commandes : texte ASCII
 HELO, MAIL, FROM, RCPT TO, DATA, QUIT
 Réponses : status code et phrase
 Les messages doivent être en ASCII 7-bits
Emmanuel Hyon 45
2006-2007

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

Analyse des interactions smtp

S: 220 miage03.miage.u-paris10.fr ESMTP Sendmail ... Ouverture


C: HELO miage03.miage.u-paris10.fr (handshaki
S: 250 ... Hello miage03…, pleased to meet you ng)
C: MAIL FROM: <ehyon@miage03.miage.u-paris10.fr>
S: 250 ehyon@miage03.miage.u-paris10.fr... Sender ok
C: RCPT TO: <user1@miage05.miage.u-paris10.fr>
S: 250 user1@miage03.miage.u-paris10.fr... Recipient ok

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

S: 250 Message accepted for delivery fermeture


C: QUIT
S: 221 miage03.miage.u-paris10.fr closing connection
Emmanuel Hyon 47
2006-2007

Comparaison smtp - http


 Échange d’informations
 Connexions persistantes
 Interactions de type commande/réponse et status
codes en ASCII
smtp http
 Mode push  Mode pull
 l’utilisateur envoie de  l’utilisateur retire de
l’information et la l’information et la
connexion TCP est ouverte connexion TCP est ouverte
par l’émetteur de par le récepteur de
l’information l’information
 Messages (entête &
corps) en ASCII 7-bits
 Qq strings non permises
dans les msg (CRLF.CRLF)
Emmanuel Hyon 48
2006-2007

Format des messages [RFC 822]


RFC 821: standard smtp
RFC 822: standard du format
des messages texte Entête
Ligne de
blanc
 Format des lignes d’entête
construites par le user agent
 To:
 From: Corps
 Subject:
différent des commandes
. smtp!
! pas le même TO, FROM

 Format du corps du message


 Caractères ASCII
É, è, â, ç et
autres ?
Emmanuel Hyon 49
2006-2007

Les extensions multimédia


 MIME: Multimedia Mail Extension, RFC 2045, 2056
 Règles d’encodage des données non-ASCII 7 bits
 Des lignes supplémentaires dans l’entête du
message déclarent le contenu de type MIME

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

base64 encoded data .....


Nature du
.........................
contenu ......base64 encoded data
Données codées
Emmanuel Hyon 50
2006-2007

Les types MIME


Content-Type: type/subtype; parameters
Texte Vidéo
 Exemples de sous-types :  Exemples de sous-types :
plain, html mpeg, quicktime

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

Exemple de type Multipart


From: alice@crepes.fr
To: bob@hamburger.edu type
Subject: Picture of yummy crepe.
MIME-Version: 1.0
sous-type
Content-Type: multipart/mixed; boundary=98766789 délimiteur
--98766789
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain
1er objet : texte
Dear Bob,
Please find a picture of a crepe.
--98766789
Content-Transfer-Encoding: base64
Content-Type: image/jpeg

base64 encoded data ..... 2ème objet : image


.........................
......base64 encoded data
--98766789--
Emmanuel Hyon 52
2006-2007

Protocoles d’accès mail


SMTP SMTP POP3 ou user
user
agent IMAP agent
Retrait
uniquem
Serveur SMTP Serveur SMTP
émetteur récepteur ent,
chargem
 SMTP: livraison/stockage au serveur récepteur
ent en
 Protocole d’accès mail : pour le retrait du mail
SMTP
 POP: Post Office Protocol [RFC 1939]
Autorisation (agent<->serveur) et retrait
 IMAP: Internet Mail Access Protocol [RFC 1730]
Plus de caractéristiques (plus complexe)
Manipulation de messages stockés sur le
serveur.
Emmanuel Hyon 53
2006-2007

POP3 (RFC 1939)


 Connexion TCP user agent - S: +OK POP3 server ready
serveur sur le port 110 C: user alice
Phase d’autorisation S: +OK
C: pass hungry
 Commandes du client : S: +OK user successfully logged on
 user: déclare le nom
 pass: password C: list
S: 1 498
 Réponses du serveur
S: 2 912
 +OK
S: .
 -ERR C: retr 1
Phase de transaction, S: <message 1 contents>
client: S: .
 list: liste les n° de C: dele 1
messages C: retr 2
 retr: recherche de S: <message 1 contents>
message par n° S: .
C: dele 2
 dele: delete
C: quit
 quit S: +OK POP3 server signing off
Emmanuel Hyon 54
2006-2007

HTTP et SMTP
HTTP SMTP HTTP user
user
agent
agent

Serveur SMTP Serveur SMTP


émetteur récepteur
 HTTP: Hotmail , Yahoo! Mail, etc Retrait &
 L’utilisateur peut organiser sa
charg
hiérarchie de classeurs sur le serveur
ent e
em
(~ IMAP) n
HTTP
Emmanuel Hyon 55
2006-2007
L'en-tête
(à analyser)
From - Wed Dec 07 15:07:55 2005
X-UIDL: 1094468282.5273
X-Mozilla-Status: 0003
X-Mozilla-Status2: 00000000
Return-Path: < @yahoo.fr>
Received: from hermes.u-paris10.fr ([unix socket]) by hermes.u-paris10.fr (Cyrus
v2.2.10) with LMTPA;
Wed, 07 Dec 2005 15:06:17 +0100 X-Sieve: CMU Sieve 2.2
Received: from localhost (hermes [127.0.0.1]) by hermes.u-paris10.fr (Postfix) with
ESMTP id 547C0283DD for <emmanuel.hyon@u-paris10.fr>;
Wed, 7 Dec 2005 15:06:16 +0100 (CET)
Received: from web26915.mail.ukl.yahoo.com (web26915.mail.ukl.yahoo.com
[217.146.177.82]) by hermes.u-paris10.fr (Postfix) with SMTP id 1BB6628456
for <emmanuel.hyon@u-paris10.fr>;
Wed, 7 Dec 2005 15:05:47 +0100 (CET)
Received: from [195.101.108.232] by web26915.mail.ukl.yahoo.com via HTTP; Wed,
07 Dec 2005 14:59:06 CET
Emmanuel Hyon 56
2006-2007
Exemple d’interaction SMTP
 Sur miage03, envoyer un mail sur miage03 en
mode verbose
miage03%mail -v user1@miage03.miage.u-paris10.fr
Après le “subject” taper sur “Entree”
puis saisir message à la fin du message Ctrl D
Consultation /var/mail/user1
 Ce qui s’affiche suite à la saisie de votre
message est l’échange entre le client SMTP et
le serveur SMTP (théoriquement)
 Refaire la manipulation avec
telnet miage03.miage.u­paris10.fr 25
1) Classiquement
2) Changeant return path
3) Réécrire l'en tête.
Emmanuel Hyon 57
2006-2007

Configuration Mailer agent


Ouvrir Thunderbird
 Faites Fichier -> Nouveau -> Compte
 Créez le avec des valeurs bidon
 Que signifient dans paramètres de comptes les
champs :
 Nom
 Adresse electronique
 Nom (serveur sortant)
 Nom (serveur entrant)
 Quels va être le serveur SMTP à remplir
Emmanuel Hyon 58
2006-2007

DNS: Domain Name System


Humains: bcp Domain Name System
d’identifications:  Une BD distributée
 N° sécu, nom, passeport, CI implantée en une hiérarchie
Hosts & routeurs Internet : de plusieurs serveurs de
noms
 Adresse IP (32 bit) - utilisée  Un protocole d’application
pour adresser les
datagrammes qui utilise UDP sur le port
53: host, routeurs, serveurs
 “nom”, (hostname) ex, de nom communiquent pour
miage03.miage.u-paris10.fr la résolution de noms (=
- utilisé par les humains traduction adresse/nom et
nom/adresse)
 À noter: fonction
intrinsèque à Internet
Annuaire Internet : (core Internet),
Correspondance adresse implantée en protocole
d’application
IP et nom ?  Complexité au bord
réseau (network’s
“edge”)
Emmanuel Hyon 59
2006-2007

Les serveurs DNS (serveurs de noms)


Aucun serveur ne
Pourquoi le DNS n’est-il possède tous les
pas centralisé ? mappings nom-@IP
 Un seul point de panne
Serveur de noms local
 Maintenance  Chaque ISP, compagnie a
 Volume du trafic un serveur de noms local
(default)
 Accès distant à une BD  Un host interroge tjs en 1er
centralisée le serveur de noms local
Serveur de noms autorité
 Chaque host a son @IP et
nom enregistrés sur un tel
Ne résiste pas à serveur
l’échelle!  Gnlt : serveur de noms
local
 Fait la traduction
nom/@ pour cet host
Serveur de noms racine
Emmanuel Hyon 60
2006-2007

Serveur racine (Root name servers)


 Contacté par le serveur de noms local qui ne
peut pas faire une résolution
 Contacte le serveur de noms d’autorité s’il ne
sait pas faire la résolution
 Le serveur d’autorité est censé avoir l’information
exacte puisqu’un host est tjs enregistré auprès
d’un tel serveur
 Récupère la réponse et la transmet au
serveur local
 Questions : http://www.root­servers.org/
 Combien y a-t-il de root servers ?
 Où sont-ils ?
Emmanuel Hyon 61
2006-2007

Serveur racine (Root name servers)

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

b USC-ISI Marina del Rey, CA


l ICANN Marina del Rey, 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

Exemple DNS plus réaliste


serveur root (B)
Le serveur root
 Ne connaît pas les
serveurs d’autorité de
tous les hosts ! 2 6
 Connaît un serveur 7 3
intermédiaire : qui
contacter pour trouver
le serveur d’autorité
Requêtes
“récursives” serveur DNS local (A)serveur intermédiaire (C)
 Le serveur DNS A 4 5
envoie une demande 1 8
au serveur DNS B qui
la prend en charge, et
interroge C, qui à son serveur d’autorité (D)
tour prend la requête
en charge etc. La host
réponse reviendra à A miage03.miage.u-paris.fr

www.wia.org
Emmanuel Hyon 64
2006-2007

Requêtes itératives vs requêtes


récursives
Reqête récursive serveur root (B)
 C’est le serveur
contacté qui fait la
résolution, pas le 2 Requête
serveur demandeur 3 itérative
 Quid de la charge ? 4
Requête itérative 7
 Le serveur contacté
(B) renvoie le nom serveur intermédiaire (C)
du prochain serveur serveur DNS local (A)
à contacter (C), et 5 6
c’est le serveur 1 8
demandeur (A) qui
s’en charge (donc A serveur d’autorité (D)
contacte C)
On peut mixer les host
2 miage03.miage.u-paris.fr
 Cf schéma www.wia.org
Emmanuel Hyon 65
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

DNS: BD distribuée stockant des “resource records”


(RR)
format d’un RR : (name, value, type,ttl)
Durée de
vie dans le
 Type=A  Type=CNAME serveur
 name est le hostname  name est l’alias pour le nom
 value est l’@ IP “canonique” (réel)
www.wia.org est en réalité
 Type=NS exchange.wia.org
 name est le domaine (ex  value est le nom canonique
u-paris10.fr)
 value est l’@ IP serveur
d’autorité pour ce
domaine  Type=MX
 value est le nom d’un
serveur de mail dont
l’alias est name
Emmanuel Hyon 67
2006-2007

Les messages du protocole DNS


(DNS-PDU)
Protocole DNS : messages de requête et
réponse, dans le même format de message
Entête de message
Identification : n° sur 16 bits
pour la requête, la réponse
utilise le même n°
Drapeaux (flags)
 1 bit : req. (0) ou rép. (1)
 1 bit : si récursion voulue
 1 bit : si récursion
disponible
 1 bit : si réponse vient de
serveur d’autorité
Autres champs d’entête : nb
d’occurrences des 4 types
de champs “data”
Emmanuel Hyon 68
2006-2007

Les messages du protocole DNS


(DNS-PDU)

Le nom recherché et le
type de question
posée sur ce nom

Les RRs fournis en


réponse aux questions

Les RRs provenant de


serveurs d’autorité

nformation complémentaire
Emmanuel Hyon 69
2006-2007

L’espace des noms


 Nom : miage03.miage.u-paris10.fr
 se lit de droite à gauche : fr puis u-paris10 puis
miage puis miage03
 Hiérarchie de domaines
 fr est le nom de domaine
 u-paris10 est le nom de sous-domaine du domaine
fr
 Un domaine est partitionné en sous-domaines,
eux-mêmes partitionnés en sous-domaines etc
 700 domaines « top-level » en 2 groupes :
générique et pays
 Les visualiser : http://www.iana.org/domain-
names.htm
Emmanuel Hyon 70
2006-2007

L’arborescence des noms


Domaine
spécifique pour Racine non nommée
obtenir des noms
à partir d ’@
Domaine ar c e g
in m n or a .. ..
s de top p o d o fr
t il et g e u-
niveau a m u v
n p
Domaines de o ar
2ème niveau a is
m
o 1
ia
tu 0
g
c e
host2.tuc.noao.edu 0
h 3
os miage03.miage.u-paris10.fr
t2
Domaines génériques Domaines
géographique
Emmanuel Hyon 71
2006-2007

La gestion des noms de domaines


 Qui gère les noms de domaine ?
 Qui décide des noms de domaine ?
 Où enregistrer un nom de domaine ?
 Affectation d’un nom de domaine top-level
et 2ème niveau par l’ICANN qui délègue, par
ex, pour .fr, à l’AFNIC
 http://www.afnic.asso.fr

 Les noms de domaines (autres que top-level)


sont sous la responsabilité du site
demandeur
Emmanuel Hyon 72
2006-2007

Relation domaine - serveur DNS


 Chaque élément de l’arborescence (domaine,
sous-domaine, …, host) a un RR associé
 L’arborescence des noms est divisée en zones
 1 serveur d’autorité par zone (serveur primaire)
 Par sécurité, redondance des serveurs DNS, donc
plusieurs serveurs pour une zone (serveurs
secondaires)
 Un serveur secondaire d’une zone peut se trouver
dans une autre zone
 Toute machine avec accès Internet n’est pas
forcément enregistrée dans le DNS
 Ex : miage03
 Conséquence : nom inconnu du monde extérieur
Emmanuel Hyon 73

Plusieurs “sites” sur la même machine


2006-2007

 Rappel Serveur www associe URL à données sur disque


 Technique de base nom après le domaine
-http://mapage.noos.fr/laurentpierre
-http://www-sysdef.lip6.fr/~Ehyon/cours.html
 Les «virtual host» : création de plusieurs hôtes
virtuels pour la même adresse IP (Géré par le
serveur).
 Possibilité plusieurs domaines
 Ex : -www.moi.fr, -www.toi.fr
 Et les alias DNS alors ?

 Possibilités sous domaines


 Ex : cjc.jeunes-chercheurs.org
 guilde.jeunes-chercheur.org

 L'URL Rewritting (pour les pages dynamiques)


Transcription URL complexe page.php?var1=3&var2=5 en
page35.html
Emmanuel Hyon 74
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

Que font ces commandes ?


Emmanuel Hyon 75
2006-2007
Exercices II
 Quel sont les noms des serveurs canoniques
de :
 Google ?
 www.u-paris10.fr ?
 Hotmail ?
 mail.voila.fr ?
 lemonde.fr ?
 Combien y a-t-il de serveurs pour google.com,
hotmail.com et yahoo.com ?
 Y'a-t-il une différence avec google.fr,
hotmail.fr yahoo.fr ?
 Comment répartissent-ils leurs charge ?
 Des offres promotionnelles de FAI proposent
aux usagers d'obtenir leur propre nom de
domaine. Comment font-ils
Emmanuel Hyon 76
2006-2007

Auto-évaluation (vrai ou faux)


 Si un message de requête HTTP utilise
l’entête Accept-language:fr et que le serveur
a uniquement une version anglaise de l’objet,
alors il envoie le message d’erreur 404
Document Not Found
 Un serveur peut utiliser les cookies pour
déterminer l’adresse postal d’un utilisateur
sans son consentement
 Le Web envoie des objets multiples dans une
page Web dans un message MIME multipart
 Avec un client POP3, les classeurs mail de
l’utilisateur sont conservés sur le serveur de
mail
Emmanuel Hyon 77
2006-2007

Auto-évaluation (vrai ou faux)


 Un client mail peut envoyer des messages e-
mail sur HTTP plutôt que SMTP
 Si un client POP3 n’envoie pas la commande
dele, les copies des messages que le client a
chargés reste sur le serveur de mail
 Avec SMTP, il est possible d’envoyer de
multiples messages e-mail sur la même
connexion TCP
 Les recherches dans le DNS impliquent
souvent une combinaison de requêtes
récursives et itératives
 Une université ne peut pas choisir le même
nom de serveur pour le serveur web et le
serveur de messagerie.
Emmanuel Hyon 78
2006-2007

Auto-évaluation (vrai ou faux)


 Avec des connexions non-persistantes entre un
navigateur et un serveur Web, il est possible
d’acheminer deux requêtes HTTP distinctes dans un
seul segment TCP (une seule PDU)
 L’entête Date: dans un message de réponse HTTP
indique la date de dernière modification de l’objet
 A un seul site correspond un seul serveur
 Le dns ne sert à rien si on veut équilibrer les charges
sur internet.
 Lors du 11 septembre 2001 les personnes qui se
connectaient à un proxy bénéficiaient de plus
d’informations que ceux qui se connectaient
directement aux sites d’information.
Emmanuel Hyon 79
2006-2007

But et principes du cryptage

 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

Le mail sécurisé (PGP)


2006-2007

 Utilisépour crypter les mails (Pretty Good


Privacy)
 Principe :
 un destinataire diffuse sa clef publique
 L'expéditeur utilise la clef publique du destinataire
pour crypter le message.
 Lors de la réception le destinataire décrypte le
message avec sa clef privée
 Utilisation
 Plug-in gérant le cryptage des mails (enigmail avec
thunderbird) si nécessaire.
 OpenPGP ou gnuPGP (dispo windows WinPT)
 Précautions : clefs publiques inaliénables
Emmanuel Hyon 82
2006-2007
SSH (Secure Shell)
(l'accès à distance sécurisé)
 Principes :
 Les données du client au serveur sont chiffrées. On
a donc un accès distant sécurisé.
 Authentification mutuelle
 Fonctionnement
 Mise en place du canal sécurisé
 Connection du client qui doit se logger en
s'authentifiant auprès du serveur.
 Etablissement de la connexion
 Serveur envoie sa clef publique au client
 Client envoie une clef symétrique (de session)
cryptée avec la clef publique du serveur
Emmanuel Hyon 83
2006-2007
SSH (Secure Shell)
(l'accès à distance sécurisé)
 Accès au serveur :
 Authentification classique par identifiant et mot de
passe.
 Authentification par challenge :
 Nécessité d'avoir déposé sa clef publique auprès serveur
 Envoi
d'un challenge crypté à l'aide clef publique du
serveur
 Accès si client résout le challenge
 Commandes (accès)
 ssh user@machine.domaine.fr
 ssh machine.domaine.fr:80 ­l user
 Autres services
 scp (transfert de fichiers)
Emmanuel Hyon 84

Tunnels SSH (1)


2006-2007

Principes
Emmanuel Hyon 85

Tunnels SSH (2)


2006-2007

Les commandes

 Commande Tunnel simple


ssh ­L 3028:serveur.domain.fr:25 ­f ­n login@serveur.domain.fr
 ­L option pour les tunnels
 3028 port local
 port distant sur la machine distante
 -f et -N pour éviter les affichages

 Dire au user agent du mail que


 le serveur smtp est localhost
 le port est 3028
Emmanuel Hyon 86

Tunnels SSH (3)


2006-2007

Les commandes

 Commande Tunnel avec relai


ssh ­L 3110:mail.domain.fr:110 ­f ­N login@acces.domain.fr
 acces la machine à laquelle on se connecte et qui
fait le relai
 mail la machine cible

 Dire au user agent du mail que


 le serveur pop est localhost
 le port est 3110
Emmanuel Hyon 87
2006-2007

Tunnels SSH (4)


Emmanuel Hyon 88
2006-2007

Les sockets :
l’API de la couche transport
Emmanuel Hyon 89
2006-2007

Socket
Architecture d'une socket

ocket « porte » entre le protocole d’appli et TCP (ou UDP


Emmanuel Hyon 90

Les ports
2006-2007

 Afficher le fichier /etc/services


 Quel est le rôle de ce fichier

 Trouver les ports des applications suivantes


 Kazaa
 Mysql
 Webcache
 Imap
 pops

 Quand puis-je utiliser ces ports sans


problèmes
 Pourquoi le traceroute ne marche pas à
Nanterre.
Emmanuel Hyon 91
2006-2007

Programmer avec les “Sockets”


But : construire une application client/serveur qui
communiquent en utilisant les sockets

API Socket socket


 Introduit dans UNIX BSD4.1,
1981 Une interface (une “porte”)
 Socket : explicitement créée, contrôlée par l’OS, créée et
utilisée et détruite par les possédée par une
applications application, locale à un host
 Paradigme client/serveur à travers laquelle un
processus applicatif peut
 Deux types de services de à la fois envoyer et recevoir
transport service via l’API des messages vers/de un
socket : autre processus (distant ou
 Datagramme non fiable local).
(UDP)
 Orienté flux d’octets, fiable
(TCP)
Emmanuel Hyon 92
2006-2007

Programmation Socket avec UDP


UDP : pas de “connexion” entre
le client et le serveur
 Pas d’établissement de
connexion
 L’émetteur envoie
Vue de l’application
explicitement l’@ IP et le port
de destination UDP fournit un transfert non fiable
 Le serveur doit extraire l’@ IP de groupes d’octets (“datagrammes”)
et le port de l’émetteur dans entre un client et un serveur
le datagramme reçu
UDP : les données transmises
peuvent être reçues dans le
désordre, ou perdues
Emmanuel Hyon 93
2006-2007

Notion de « port »
 Rappel architecture en couches

Application : FTP, HTTP, proprio application

Transport : UDP, TCP transport

network network

 Port : ~BAL dans laquelle un processus


applicatif dépose ses données à expédier et
récupère ses données reçues
 Chaque processus a un n° de port : identité
logique
Emmanuel Hyon 94
2006-2007

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

Interaction socket client/serveur : UDP


Serveur (tourne sur hostid) Client
créer socket sur
port=x, pour les créer socket,
clientSocket =
requêtes entrantes : DatagramSocket()
serverSocket =
DatagramSocket()
créer et envoyer
à l’adresse (hostid, port=x),
la requête en utilisant
lire requête de clientSocket
serverSocket

écrire réponse sur


serverSocket Lire la réponse sur
en spécifiant l’@ host client clientSocket
et le n° de port client
fermer
clientSocket
Emmanuel Hyon 97
2006-2007

Exemple : un client Java (UDP)


k e y b o a rd m o n i to r

1 - Lire des caractères saisis au


clavier

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

Exemple : le client Java (UDP)

// 5 - Creation d'un buffer de (UDP)PDU arrivant sur la socket


DatagramPacket receivePacket = new DatagramPacket
(receiveData, receiveData.length);

// 5bis - Reception de la (UDP)PDU


clientSocket.receive(receivePacket);

// 6 - Affichage des donnees recues


String modifiedSentence = new String (receivePacket.getData());
System.out.println("FROM SERVER: " + modifiedSentence);

// Fermeture de la socket
clientSocket.close();
}
}
Emmanuel Hyon 100

Exemple : le serveur Java (UDP)


2006-2007

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

Exemple : le serveur Java (UDP)

// Traitement de l'emission

// initialisation du champ de donnees de l'(UDP) PDU a emettre


sendData = capitalizedSentence.getBytes();

// initalisation de l'(UDP)PDU en reponse, donc a l'@IP et n°port


DatagramPacket sendPacket = new DatagramPacket(sendData,
sendData.length, IPAddress, port);

// emission de l'(UDP)PDU en reponse


serverSocket.send(sendPacket);

}
}
}
Emmanuel Hyon 102
2006-2007

Votre programme echoUDP


 L’utilisateur (sur client) lance une
commande :
java echoUDPClient miageXX.domain.fr «TexteSaisi»
 Rôle du client :
Se connecter au serveur indiqué en param
Envoyer au serveur «TexteSaisi»
Attendre la réponse et Afficher la réponse reçue
 Rôle du serveur :
Attendre une requête
Renvoyer «TexteSaisi» arrivé dans une requête
Indication : les paramètres de la PDU envoyée par
le serveur sont ceux qu’il reçoit
=> utilisation des méthodes getXXX et setXXX
Emmanuel Hyon 103
2006-2007

Exécution
 L’utilisateur saisit sur le client :
java echoUDPClient miage03.miage.u­paris10.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 Socket avec TCP


Le client doit contacter le  Quand le client crée une
serveur socket le client TCP établit
 Le serveur est lancé une connexion avec le
 Il a créé une socket et serveur TCP
est en attente  Sur requête du client, le
serveur TCP crée une nvlle
Le client contacte le socket pour que le processus
serveur par : serveur communique avec le
 La création d’une socket client
TCP locale  Permet à un serveur de
 La spécification d’une @ parler à de multiples
IP et du n° de port du clients
processus serveur Vue« en même temps »
de l’application
TCP fournit un transfert d’octets
fiable et ordonné (“tube”) entre
un client et un serveur
Emmanuel Hyon 106
2006-2007

Différences avec UDP


 Mode connecté vs mode non connecté
 Établissement de connexion 
 Le serveur doit être prêt à accueillir des demandes de
connexion
 Quand une demande arrive, il crée une socket pour le
client
 Flux de données attaché à la socket 
 Pas besoin de donner l’@ et le n° de port à chaque envoi
Emmanuel Hyon 107
2006-2007

Programmation Java

 Package java.net, contient deux classes


http://java.sun.com/j2se/1.3/docs/api/java/net/package-summary.html
 Classe serverSocket utilisée par le serveur
 Constructeur = création d’un serveur d’accueil
 Méthode accept() pour créer une socket serveur
sur demande du client
 Classe Socket (~DatagramSocket) utilisée par
le client et le serveur pour la manipulation du
flux
 Constructeur = demande de connexion par le
client et création de la socket client
 Méthodes getOuputStream() et getInputStream()
utilisées par le client et le serveur pour échanger
des données
Emmanuel Hyon 108
2006-2007

Interaction socket client/serveur : TCP


Server (tourne sur hostid) Client
create socket,
port=x, for
incoming request:
welcomeSocket =
ServerSocket()

TCP create socket,


wait for incoming
connection request connection setup connect to hostid, port=x
connectionSocket = clientSocket =
welcomeSocket.accept() Socket()

send request using


read request from clientSocket
connectionSocket

write reply to
connectionSocket read reply from
clientSocket
close
connectionSocket close
clientSocket
Emmanuel Hyon 109
2006-2007

Exemple : un client Java (TCP)


k e y b o a rd m o n i to r

 Le client lit du clavier


(stream inFromUser), et

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

données modifiées lui


arrivant via la socket client TCP
c l i e n tS o c k e t
(stream inFromServer) socket TC P
socket

to n e tw o r k fr o m n e tw o r k
Emmanuel Hyon 110
2006-2007

Exemple : le client Java (TCP)

import java.io.*;
import java.net.*;
class TCPClient {

public static void main(String argv[]) throws Exception


{
String sentence;
String modifiedSentence;

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

Exemple : le client Java (TCP)

Création du flux BufferedReader inFromServer =


en entrée attaché new BufferedReader(new
à la socket InputStreamReader(clientSocket.getInputStream()));

sentence = inFromUser.readLine();
Emission des données
au serveur outToServer.writeBytes(sentence + '\n');

Lecture des données modifiedSentence = inFromServer.readLine();


arrivant du serveur
System.out.println("FROM SERVER: " + modifiedSentence);

clientSocket.close();

}
}
Emmanuel Hyon 112
2006-2007

Exemple : le serveur Java (TCP)


import java.io.*;
import java.net.*;

class TCPServer {

public static void main(String argv[]) throws Exception


{
String clientSentence;
Création de la String capitalizedSentence;
socket d’accueil
ServerSocket welcomeSocket = new ServerSocket(6789);
au port 6789
while(true) {
Attente d’une demande
de connexion sur la Socket connectionSocket = welcomeSocket.accept();
socket d’accueil
Création du flux BufferedReader inFromClient =
en entrée new BufferedReader(new
InputStreamReader(connectionSocket.getInputStream()));
attaché à la
socket
Emmanuel Hyon 113
2006-2007

Exemple : le serveur Java (TCP)

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';

Emission des données outToClient.writeBytes(capitalizedSentence);


au client }
}
}
Fin de boucle => reboucle et attend
la connexion d’un nouveau client
Emmanuel Hyon 114
2006-2007

Un mini serveur Web

 Leclient va être un navigateur web quelconque avec


comme URL :
-http://miage03.miage.u­paris10.fr:6879/mapage.htm
 Le serveur web va être implémenté à partir de
TCPserveur dans 1 nveau fichier WebServeur.
 On suppose que mapage.htm existe dans le
repertoire dans lequel est lancé webserveur.
 On ne traite que 3 cas
 soit on a la méthode « GET »
 soit on renvoie un bad request Message. (400)
 Soit on ne trouve pas le fichier
Emmanuel Hyon 115
2006-2007
Le site Web
 Taper une page html simple
 Le header vide : <head> </head>
 Le body avec juste un titre: <body> <h1> blabla </h1>
</body>
Enregistrée sous forme texte simple avec

extension .htm
 Tester si cette page s'affiche correctement en
l'ouvrant comme un fichier avec votre
navigateur.
 Taper le code (pour le parsing) du serveur
 Tester le bon envoi des données en demandant
la page au moyen d'un telnet
 Accèder à la page sur votre serveur à l'aide de
votre navigateur (si étape précedente
fonctionne)
Le code
Emmanuel Hyon 116
2006-2007

Parsing String requestMessageLine = inFromClient.readline();


StringTokenizer tokenizedLine = new
StringTokenizer(requestMessageLine);
if (tokenizedLine.nextToken().equals(’’GET’’)){
String filename = tokenizedLine.nextToken();
if (filename.startsWith(’’/’’ ) ==true) filename= filename.substring(1);
// code envoi des données avec test par try and catch si fichier existe}
else { envoi d’un bad request}
Envoi des données (cas ou le fichier existe)
outToClient.writeBytes(’’HTTP/1.0 200 Document Follows\r \n’’);
outToClient.writeBytes(’’Content-Type: text/html \r \n’’);
File fichier = new File(filename);
Trans- int numOfBytes = (int) fichier.length;
formatio FileInputStream inFile = new FileInputStream(filename);
n byte[ ] fileInBytes = new byte[numOfBytes];
du inFile.read(fileInByte);
fichier
outToClient.writeBytes(’’Content-length: ’’ + numOfBytes + ’’\r \n’’);
en
octets outToClient.writeBytes(’’\r \n’’);
et envoi outToClient.write(fileInBytes,0,numOfBytes);
Emmanuel Hyon 117
2006-2007

Socket TCP avec Thread


 On voudrait observer le traitement des
différentes données qui arrivent sur une
socket TCP.
 Pour cela reprenez l'exemple du echo.
 Ouvrez deux sockets différentes qui afficheront
des mots différents.
 L'envoi effectif du mot sur la socket sera contrôlé
par l'utilisateur.
 Ouvrez la première socket saisissez votre mot ne
l'envoyez pas.
 Ouvrez la seconde socket saisissez votre mot,
envoyez le.
 Envoyez le mot de la première socket.
 Que se passe-t-il ?
Emmanuel Hyon 118
2006-2007

Socket TCP avec Thread 2


 Comment faire pour qu'un processus traite
une seule socket dédiée (sur le serveur).
 Le main (le serveur)
public static void main(String args[])
{ try
{
ServerSocket socketaccueil = new ServerSocket(port);
// ouverture d'un socket serveur sur port
while (true)
// attente en boucle de connexion (bloquant sur .accept)
{
new SocketThread(socketaccueil.accept());
// un client se connecte, un nouveau thread client est lancé
}
}
catch (Exception e) { }
}
Emmanuel Hyon 119
2006-2007
Socket Thread (3)
Le thread et son constructeur
class SocketThread implements Runnable{
private Thread thr; // contiendra le thread du client
private Socket sock; // recevra le socket liant au client
private DataOutputStream sortie; // pour gestion du flux de sortie
private BufferedReader entree; // pour gestion du flux d'entrée
// constructeur
SocketThread(Socket s) //param s est donné dans main par ss.accept()
{ try
{
// fabrication flux IO
sortie = new DataOutputStream(sock.getOutputStream());
entree = new BufferedReader(new InputStreamReader
(sock.getInputStream()));
}
catch (IOException e){ }
thr = new Thread(this); // instanciation du thread
thr.start(); //demarrage thread, methode run(), contient commandes,
lancées
}