La couche Application - Laboratoire d`Informatique de Paris 6

Transcription

La couche Application - Laboratoire d`Informatique de Paris 6
Master Miage
2007-2008
Réseau
La couche Application
Emmanuel Hyon
2007-2008
Applications et protocoles de couche
application
Application (réseau): processus
répartis qui communiquent



Tournent dans les hosts dans
“l’espace utilisateur”
Échangent des messages pour
réaliser la fonction de l’application
Ex : email, ftp, Web
application
transport
network
data link
physical
Protocoles : couche Application



Un “morceau” d’une application
Définit les messages échangés par les
appli. et les actions à réaliser
Utilise les services de communication
fournis par les protocoles de couche
inférieure (TCP, UDP)
application
transport
network
data link
physical
application
transport
network
data link
physical
2
Emmanuel Hyon
2007-2008
Applications réseau : terminologie
Processus: programme qui
s’exécute sur un host
 Dans le même host, deux
processus communiquent en
utilisant les mécanismes
IPC (définis par le système
d’exploitation)
InterProcess
Communication
 Deux processus tournant
dans des hosts différents
communiquent via un
protocole de couche
application
 Agent
3
utilisateur (user
agent): processus
s’interfaçant avec
l’utilisateur “en haut” et le
réseau “en bas”
 Implante le protocole de
couche application
 Web: navigateur
 E-mail: utilitaire de mail
(Mozilla, Outlook, …)
 Flux audio/video: media
player
Emmanuel Hyon
4
2007-2008
Le paradigme Client-serveur
Une appli réseau a deux
morceaux: client et serveur
Client:



Initie le contact avec le serveur
(“parle en 1er”)
Demande un service
Web: client implanté dans le
navigateur; e-mail: dans
l’utilitaire de mail
Serveur:


application
transport
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
request
reply
application
transport
network
data link
physical
Emmanuel Hyon
5
2007-2008
Le paradigme pair à pair (pi2pi)
 Un
terminal est pair car
il peut être à la fois
client et à la fois
serveur (tt le monde est
sur un pied d'égalité).

Ex. Download de fichier
tout en laissant dispo le
téléchargement sur son
terminal.

Pour échange de fichiers

Pour calculs (xtreme web)
 Impose

protocole commun
d'échange des infos

gestion des participants.
 Ex.

1999 Napster (info
centralisé)

2000 Gnutella (décentralisé)

2002 bit torrent
(fractionnement fichiers)
Emmanuel Hyon
2007-2008
6
De quel service de transport
une application a-t-elle besoin ?
Perte de données
 Certaines appli (ex, audio)
tolèrent des pertes
 D’autres (ex transfert
fichiers) nécessitent un
transfert fiable à 100%
Délai
 Certaines appli (ex,
téléphonie Internet, jeux
interactifs) nécessitent des
délais faibles pour être
efficaces
Bande passante
 Certaines appli (ex,
multimedia) nécessitent
un montant minimum de
BP pour être efficace
 D’autres (“appli
élastiques”) fonctionnent
quelque soit la BP dont
elles disposent (email,
Web, transfert de
fichiers)
Emmanuel Hyon
2007-2008
7
Besoins en services de transport des
applications courantes
Data loss
Bandwidth
Time Sensitive
file transfer
e-mail
Web documents
real-time audio/video
no loss
no loss
loss-tolerant
loss-tolerant
no
no
no
yes, 100’s msec
stored audio/video
interactive games
financial apps
loss-tolerant
loss-tolerant
no loss
elastic
elastic
elastic
audio: 5Kb-1Mb
video:10Kb-5Mb
same as above
few Kbps up
elastic
Application
yes, few secs
yes, 100’s msec
yes and no
Emmanuel Hyon
8
2007-2008
Les services
des protocoles de transport Internet
Service TCP:





Service UDP:
Orientée-connexion: connexion entre  Transfert de données non
le client et le serveur
fiables entre processus
Transport fiable entre processus
émetteur et récepteur
émetteur et récepteur
 Ne fournit pas :
Contrôle de flux : l’émetteur
établissement de connexion,
n’engorge pas le récepteur
fiabilité, contrôle de flux,
Contrôle de congestion : étranglement contrôle de congestion,
garanties de délai et de
de l’émetteur quand le réseau est
bande passante
surchargé
Ne fournit pas : garantie de délai,
garantie d’un minimum de bande
Pourquoi y a-t-il un UDP?
passante
Emmanuel Hyon
9
2007-2008
Protocoles de couche application
API: Application Programming
Interface
 Définit l’interface entre
l’application et les couches
transport
 Ex : socket (prise)


API Internet
Deux processus communiquent en
envoyant des données sur la
socket et en lisant les données
de la socket
Comment un processus
identifie-t-il l’autre
processus avec lequel il
veut communiquer ?


adresse IP de l’host sur
lequel tourne l’autre
processus
“numéro de port” - permet
à l’host récepteur de
déterminer à quel
processus local le message
doit être délivré
… plus de détails plus tard
Emmanuel Hyon
10
2007-2008
Le Web: le protocole http
http: HyperText Transfer
Protocol




Protocole de couche application de
l’application WWW
Modèle client/serveur
 client: navigateur qui demande,
reçoit et affiche des objets
Web (fichier html, image
JPEG, GIF, applet java, …). Le
navigateur est aussi le user
agent
 serveur: serveur Web qui
envoie les objets en réponse
aux requêtes
http1.0: RFC 1945
http1.1: RFC 2616
htt
PC avec
IE
pr
htt
equ
pr
esp
est
ons
e
st
e
equ
Serveur
nse
o
p
exécutant un
es
r
serveur Web
tp
ht
Apache
pr
t
t
h
Mac avec
Netscape Navigator
Emmanuel Hyon
11
2007-2008
Le protocole http : plus de détails
http: service de transport TCP




Le client initie une connexion TCP
(crée une socket) vers le serveur,
en utilisant le n° de port 80
Le serveur accepte les connexions
TCP du client
Les messages http (APDU) sont
échangés entre le navigateur (client
http) et le serveur Web (serveur
http)
La connexion TCP est fermée
http est “stateless”

Le serveur ne maintient
aucune information sur
les requêtes des clients
aparté
Les protocoles qui maintiennent
un état sont complexes !
 Historique (état) à maintenir
 Si le serveur/client tombe,
leurs états respectifs
peuvent être incohérents, et
doivent être réconciliés
Emmanuel Hyon
2007-2008
12
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
1a. Le client http initie la connexion
TCP to serveur http (processus) sur la
machine www.someSchool.edu. Le
port 80 est le numéro par défaut de
ce serveur http (ce processus).
images jpeg )
1b. Le serveur http de la machine
www.someSchool.edu est en
attente sur la connexion TCP au
port 80. Il accepte la
connexion, et notifie le client
2. Le client http envoie un
request message http (contenant
l’URL) sur la socket TCP
3. Le serveur http reçoit le
message, forme le response
message contenant l’objet
demandé
(someDepartment/home.index),
émet le message sur la socket
temps
Emmanuel Hyon
13
2007-2008
Suite de l’exemple http
4. Le serveur http ferme la
5. Le client http reçoit le msg de
connexion TCP
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
14
2007-2008
Connexions non-persistantes, persistantes
Non-persistante (close)
Persistante (keep alive)



http/1.0: le serveur
parselala
server parse
requête, répond, ferme la
connexion TCP
Combien de RTTs pour aller
chercher l’objet requis ?



2
La connexion TCP
 La requête/transfert
d’objet
La plupart des navigateurs
ouvrent des connexions
parallèles multiples


Combien de RTT pour la page
web précédente ?


Par défaut pour http/1.1
Sur la même connexion TCP : le
serveur parse la requête, répond,
parse la nvlle requête,…
Il fermera la connexion après son
inutilisation durant un certain
temps (configurable)
Avec pipeline : Le client envoie une
requête dès qu’il rencontre une
référence
Sans pipeline : possible, pas le
mode par défaut de 1.1. Le client
envoie une requête après avoir
reçu la réponse de la requête
précédente
Emmanuel Hyon
15
2007-2008
Format des messages http : request
types de messages http : request, response
 Le message http de request :
 Deux

ASCII (format lisible)
request line
3 champs
Méthode
(HEAD, POST,
GET)
Header lines
Carriage return,
line feed
indicates end
of message
URL requise
Version du protocole
GET /somedir/page.html HTTP/1.1
Host: www.someschool.edu
Non
Connection:close
User-agent: Mozilla/4.0
Accept-language:fr
(extra carriage return, line feed)
persistante
Netscape
Emmanuel Hyon
2007-2008
En-tête HTTP (1.1)
16
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
En-tête HTTP 1.1
2007-2008
17
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
18
2007-2008
Format des messages http : response
status line
(3 champs)
Version du protocole
header
lines
Data
(ex : Fichier html
demandé)
Status code
status phrase
HTTP/1.1
200
OK
Date: Thu, 06 Aug 1998 12:00:15 GMT
Server: Apache/1.3.0 (Unix)
Accept-Ranges: bytes
Content-Language: fr
Content-Length: 6821
Content-Type: text/html
ETag: "ab010-2adf-3d202062”
Last-Modified: Mon, 22 Jun 1998 ……
data data data data data ...
Emmanuel Hyon
2007-2008
 Le
En-tête HTTP (1.1):
Statuts
19
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
 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
20
2007-2008
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
21
2007-2008
Interaction utilisateur-serveur : authentification
Authentification : contrôle d’accès
serveur
client
au contenu du serveur
 Autorisation : généralt nom,
usual http request msg
mot de passe
401: authorization req.
 Sans état : le client doit
WWW authenticate:
présenter son autorisation à
chaque requête
 authorization: ligne d’entête à
usual http request msg
chaque requête
+ Authorization: <cred>
 Si pas authorization: le
serveur refuse l’accès, et
usual http response msg
utilise le message de status
code 401
WWW authenticate:
usual http request msg
+ Authorization: <cred>
usual http response msg
time
Emmanuel Hyon
2007-2008


Cookies : gardien d’état
Le serveur génère un n°
d’identification, qu’il
mémorise et qu’il utilise
pour :
 L’authentification
 Le stockage des
préférences de
l’utilisateur
Le serveur envoie le
“cookie” au client dans un
message response
Set-cookie: 1678453

22
Le client présente le cookie
dans ses requêtes futures
cookie: 1678453
client
serveur
usual http request msg
usual http response +
Set-cookie: #
usual http request msg
cookie: #
usual http response msg
usual http request msg
cookie: #
usual http response msg
cookiespecific
action
cookiespecific
action
Emmanuel Hyon
23
2007-2008
GET conditionnel : cache côté client


But : Ne pas envoyer l’objet client
si le client a une version à
jour dans son cache
Client: spécifie la date de la
version cachée dans la requête
http
If-modified-since: <date>

Serveur : la réponse ne
contient pas d’objet si la
version cachée est à jour :
HTTP/1.0 304 Not Modified
serveur
http request msg
If-modified-since:
<date>
http response
objet
non
modifié
HTTP/1.0
304 Not Modified
http request msg
If-modified-since:
<date>
http response
HTTP/1.1 200 OK
<data>
objet
modifié
Emmanuel Hyon
24
2007-2008
Cache Web (serveur proxy)
But : satisfaire la reqûete client sans invoquer le serveur
d’origine


L’utilisateur utilise un
navigateur : le Web accède
au cache web
Le client envoie toutes les
requêtes http au cache web


L’objet est dans le cache:
le cache l’envoie
Sinon le cache demande
l’objet au serveur
d’origine, puis l’envoie au
client
origin
server
htt
p
client
htt
req
pr
esp
ues
ons
t
e
Proxy
server
est
u
q
re
se
p
n
t
o
p
ht
es
r
tp
ht
client
st
e
u
req
p
nse
o
htt
p
res
p
htt
origin
server
Emmanuel Hyon
2007-2008
25
Pourquoi les caches Web ?
Hypothèse : le cache est
“proche” du client (par ex.,
dans le même réseau)
 Réduction des temps de
réponse (la réponse vient
plus vite puisqu’elle vient de
moins loin)
 Réduction du trafic sur le
réseau

Pas de génération de trafic
pour aller chercher la réponse
sur un site éloigné
Quelle différence de temps
origin
servers
public
Internet
1.5 Mbps
access link
institutional
network
10 Mbps LAN
institutional
cache
Emmanuel Hyon
2007-2008
Exercices I
26
HEAD http://www.inria.fr/index.fr.html

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)
Emmanuel Hyon
2007-2008

Exercices II
27
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 remplaçant www.u-paris10.fr par
ksup.u-paris10.fr dans le telnet

Essayez de vous connecter en remplaçant également dans le host

Identifiez vous le cookie ?
Emmanuel Hyon
2007-2008
Exercices III
28
L'URL 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 navigateur)
http://postes.smai.emath.fr/2002/index.php
 Avec telnet
Quel va devoir être votre réponse ?
Authorization: BASIC d2VibWFzdGVyOnpycW1d2VibWFzdGVyOnpycW1 qui est encodage (en base 64) de login:mdp
Emmanuel Hyon
Les « sessions » WEB
2007-2008
 Définition
Session :
29
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
Les « sessions » WEB
2007-2008
 Identification
30
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
Authentification
2007-2008
(au niveau application)
 Gérée par le serveur (au niveau http)

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 (au niveau html)

Fichier html renvoyé

Contrôle d'accès à partir d'une page web

Gestion par l'application
31
Emmanuel Hyon
Htaccess
2007-2008
 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
32
.htaccess
Emmanuel Hyon
2007-2008
33
(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
2007-2008
.htaccess
34
(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
Nouveau fichier htaccess pour tout le sous rep.
Emmanuel Hyon
35
2007-2008
FTP: File Transfer Protocol
FTP
FTP
user
interface client
utilisateur
sur host




Système
de fichiers
local
file transfer
FTP
server
Système de
fichiers distant
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
36
2007-2008
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
Deux connexions TCP parallèles sont
ouvertes :
 Contrôle : échange des
commandes et réponses entre le
client et le serveur
FTP
“contrôle hors bande”
client
 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
TCP control connection
port 21
TCP data connection
port 20
FTP
server
Emmanuel Hyon
2007-2008
Commandes ftp
37
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
38
2007-2008
Courrier électronique
Trois composants majeurs :



user agents
Serveurs de mail
SMTP : Simple Mail Transfer
Protocol
outgoing
message queue
user mailbox
user
agent
mail
server
SMTP
User Agent
SMTP
 Appelé parfois “mail reader”
 Composer, éditer, lire les messages
 Ex de user agent GUI : Eudora,
mail
Outlook, Netscape Messenger
server
 Ex de user agent non GUI : elm,
mail, pine
 Les messages sortants et entrants
user
sont stockés sur le serveur
agent
SMTP
user
agent
user
agent
mail
server
user
agent
user
agent
Emmanuel Hyon
39
2007-2008
Les serveurs de mail
Trois éléments



Les mailbox qui contiennent les
messages entrants (encore non lus)
des utilisateurs
La file des messages sortants (qui
doivent être expédiés)
Le protocole SMTP entre serveurs
de mail pour envoyer les messages
 Modèle client/serveur
 Sur le serveur de mail S, le
client SMTP s’occupe de
l’expédition du mail
 Sur le même serveur de mail S,
le serveur SMTP s’occupe de la
réception du mail
user
agent
mail
server
SMTP
SMTP
mail
server
user
agent
SMTP
user
agent
user
agent
mail
server
user
agent
user
agent
Emmanuel Hyon
40
2007-2008
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
2007-2008
S:
C:
S:
C:
S:
C:
S:
41
Analyse des interactions smtp
220 miage03.miage.u-paris10.fr ESMTP Sendmail ...
Ouverture
HELO miage03.miage.u-paris10.fr
(handshaking)
250 ... Hello miage03…, pleased to meet you
MAIL FROM: <[email protected]>
250 [email protected]... Sender ok
RCPT TO: <[email protected]>
250 [email protected]... 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
42
2007-2008
Comparaison smtp - http
 Échange
d’informations
 Connexions persistantes
 Interactions de type commande/réponse et status codes en
ASCII
smtp
 Mode push

l’utilisateur envoie de
l’information et la connexion
TCP est ouverte par l’émetteur
de l’information
 Messages
(entête & corps)
en ASCII 7-bits
 Qq strings non permises
dans les msg (CRLF.CRLF)
 Mode

pull
http
l’utilisateur retire de
l’information et la connexion
TCP est ouverte par le
récepteur de l’information
Emmanuel Hyon
2007-2008
43
Format des messages [RFC 822]
(Dans le champs “Data”)
RFC 821: standard smtp
RFC 822: standard du format des
messages texte

Format des lignes d’entête
construites par le user agent



!

Entête
To:
From:
Subject:
différent des commandes
smtp!
pas le même TO, FROM
Ligne de
blanc
Corps
.
Format du corps du message

Caractères ASCII
É, è, â, ç et autres
?
Emmanuel Hyon
44
2007-2008
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
Version MIME
méthode utilisée
pour coder les données
(base64, quoted-printable
encoding, …)
Nature du contenu
Données codées
From: [email protected]
To: [email protected]
Subject: Picture of yummy crepe.
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Type: image/jpeg
base64 encoded data .....
.........................
......base64 encoded data
Emmanuel Hyon
45
2007-2008
Les types MIME
Content-Type: type/subtype; parameters
Texte
Vidéo


Exemples de sous-types : plain,
html
Image

Exemples de sous-types : jpeg,
gif
Audio

Exemples de sous-types : basic
(8-bit mu-law encoded), 32kadpcm
(32 kbps coding)
Exemples de sous-types : mpeg,
quicktime
Application


Autres données qui doivent être
traitées par un user agent avant
d’être “lisibles”
Exemples de sous-types : msword,
octet-stream
Multipart


Différents types de contenus
Délimiteurs pour les
différencier
Emmanuel Hyon
46
2007-2008
Exemple de type Multipart
From: [email protected]
To: [email protected]
Subject: Picture of yummy crepe.
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=98766789
--98766789
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain
Dear Bob,
Please find a picture of a crepe.
--98766789
Content-Transfer-Encoding: base64
Content-Type: image/jpeg
base64 encoded data .....
.........................
......base64 encoded data
--98766789--
type
sous-type
délimiteur
1er objet : texte
2ème objet : image
Emmanuel Hyon
47
2007-2008
Protocoles d’accès mail
user
agent
SMTP
SMTP
POP3 ou
IMAP
user
agent
Retrait
uniqueme
Serveur SMTP
Serveur SMTP
nt
récepteur
émetteur
,
 SMTP: livraison/stockage au serveur récepteurchargemen
 Protocole d’accès mail : pour le retrait du mailt en 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
48
2007-2008
POP3 (RFC 1939)

Connexion TCP user agent serveur sur le port 110
Phase d’autorisation
Commandes du client :
 user: déclare le nom
 pass: password
 Réponses du serveur
 +OK
 -ERR
Phase de transaction, client:
 list: liste les n° de messages
 retr: recherche de message
par n°
 dele: delete
 quit

S:
C:
S:
C:
S:
+OK POP3 server ready
user alice
+OK
pass hungry
+OK user successfully logged
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 POP3 server signing off
on
Emmanuel Hyon
49
2007-2008
HTTP et SMTP
user
agent
 HTTP:
HTTP
SMTP
Serveur SMTP
émetteur
Serveur SMTP
récepteur
HTTP
user
agent
Hotmail , Yahoo! Mail, etc
Retra
it &
 L’utilisateur peut organiser sa
charg
hiérarchie de classeurs sur le serveur t e emen
n HTT
(~ IMAP)
P
Emmanuel Hyon
2007-2008
L'en-tête
50
(à 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 <[email protected]>;
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 <[email protected]>;
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
2007-2008
Exemple d’interaction SMTP
51
 Sur
miage03, envoyer un mail sur miage03 en mode
verbose
miage03%mail -v [email protected]
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
52
2007-2008
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
2007-2008
DNS: Domain Name System
Humains: bcp d’identifications:

N° sécu, nom, passeport, CI
Hosts & routeurs Internet :


Adresse IP (32 bit) - utilisée pour
adresser les datagrammes
“nom”, (hostname) ex,
miage03.miage.u-paris10.fr utilisé par les humains
Annuaire Internet :
Correspondance adresse IP
et nom ?
Domain Name System


53
Une BD distributée implantée en
une hiérarchie de plusieurs
serveurs de noms
Un protocole d’application qui
utilise UDP sur le port 53: host,
routeurs, serveurs de nom
communiquent pour la résolution
de noms (= traduction
adresse/nom et nom/adresse)
 À noter: fonction intrinsèque
à Internet (core Internet),
implantée en protocole
d’application
 Complexité au bord réseau
(network’s “edge”)
Emmanuel Hyon
2007-2008
Les serveurs DNS (serveurs de noms)
Pourquoi le DNS n’est-il pas
centralisé ?
 Un seul point de panne
 Maintenance
 Volume du trafic
 Accès distant à une BD
centralisée
 Aucun
serveur ne possède
tous les mappings nom-@IP
Serveur de noms local


Chaque ISP, compagnie a un
serveur de noms local (default)
Un host interroge tjs en 1er le
serveur de noms local
Serveur de noms autorité


Ne résiste pas à l’échelle!
54

Chaque host a son @IP et nom
enregistrés sur un tel serveur
Gnlt : serveur de noms local
Fait la traduction
nom/@ pour cet host
Serveur de noms racine
Emmanuel Hyon
55
2007-2008
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
56
2007-2008
Serveur racine (Root name servers)
a NSI Herndon, VA
c PSInet Herndon, VA
d U Maryland College Park, MD
g DISA Vienna, VA
h ARL Aberdeen, MD
k RIPE London
i NORDUnet Stockholm
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
57
2007-2008
Un exemple simple
serveur root
L’host miage03.miage.uparis10.fr veut l’@ IP de
www.wia.org
2
1. Il contacte son serveur DNS local
2. Le serveur DNS local contacte le
serveur root, si nécessaire
3. Le serveur root contacte le
serveur d’autorité, si nécessaire
5
serveur DNS local
1
3
4
serveur d’autorité
6
host
miage03.miage.u-paris10.fr
www.wia.org
Emmanuel Hyon
58
2007-2008
Exemple DNS plus réaliste
serveur root (B)
Le serveur root


Ne connaît pas les
serveurs d’autorité de tous
les hosts !
Connaît un serveur
intermédiaire : qui
contacter pour trouver le
serveur d’autorité
Requêtes “récursives”

Le serveur DNS A envoie
une demande au serveur
DNS B qui la prend en
charge, et interroge C, qui
à son tour prend la
requête en charge etc. La
réponse reviendra à A
6
2
3
7
serveur DNS local (A) serveur intermédiaire (C)
1
4
8
5
serveur d’autorité (D)
host
miage03.miage.u-paris.fr
www.wia.org
Emmanuel Hyon
59
2007-2008
Requêtes itératives vs requêtes récursives
serveur root (B)
Reqête récursive


C’est le serveur
contacté qui fait la
résolution, pas le
serveur demandeur
Quid de la charge ?
2
Le serveur contacté (B)
renvoie le nom du
prochain serveur à
contacter (C), et c’est
le serveur demandeur
(A) qui s’en charge
(donc A contacte C)
On peut mixer les 2

Cf schéma
3
4
Requête itérative

Requête
itérative
7
serveur DNS local (A)
1
serveur intermédiaire (C)
5
8
6
serveur d’autorité (D)
host
miage03.miage.u-paris.fr
www.wia.org
Emmanuel Hyon
Cache DNS
2007-2008
 Optimiser

les applications
Les applications (ftp, smtp, http) utilisent le DNS pour la
résolution de noms
 Ex

60
: mail to : [email protected] 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
2007-2008
61
Enregistrements DNS
DNS: BD distribuée stockant des “resource records” (RR)
format d’un RR :
 Type=A


name est le hostname
value est l’@ IP
(name, value, type,ttl)
 Type=CNAME

 Type=NS


name est le domaine (ex uparis10.fr)
value est l’@ IP serveur
d’autorité pour ce domaine
Durée de vie
dans le
serveur
name est l’alias pour le nom
“canonique” (réel)
www.wia.org est en réalité
exchange.wia.org

value est le nom canonique
 Type=MX

value est le nom d’un serveur
de mail dont l’alias est name
Emmanuel Hyon
62
2007-2008
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
63
2007-2008
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é
Information complémentaire
Emmanuel Hyon
64
2007-2008
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
65
2007-2008
L’arborescence des noms
Domaine spécifique
pour obtenir des
noms à partir d ’@
Domaines
de top
niveau
ar
pa
Domaines de
2ème niveau
co
m
Racine non nommée
ed
u
go
v
int
mi
l
ho
st
2
or
g
ae ..
fr
..
upa
ris
10
mi
no
ao
tu
c
ne
t
host2.tuc.noao.edu
Domaines génériques
ag
e0
3
miage03.miage.u-paris10.fr
Domaines
géographiques
Emmanuel Hyon
66
2007-2008
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
67
2007-2008
Relation domaine - serveur DNS
 Chaque
élément de l’arborescence (domaine, sousdomaine, …, 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
2007-2008

Plusieurs “sites” sur la même machine
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
68
Emmanuel Hyon
2007-2008
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 ?
69
Emmanuel Hyon
2007-2008
Exercices II
 Quel sont les noms des serveurs canoniques de :





Google ?
www.u-paris10.fr ?
Hotmail ?
mail.voila.fr ?
lemonde.fr ?
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
 Combien
70
Emmanuel Hyon
71
2007-2008
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
2007-2008
 Un
Auto-évaluation (vrai ou faux)
72
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
73
2007-2008
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
2007-2008
But et principes du cryptage
 Principes
74
:
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
2007-2008
 Algorithme
Les Clefs
75
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
2007-2008
Le mail sécurisé (PGP)
76
 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
SSH (Secure Shell)
2007-2008
77
(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
SSH (Secure Shell)
2007-2008
78
(l'accès à distance sécurisé)
 Accès
au serveur :

Authentification classique par identifiant et mot de passe.

Authentification par challenge :
 Nécessité
 Envoi
 Accès
d'un challenge crypté à l'aide clef publique du serveur
si client résout le challenge
 Commandes


(accès)
ssh [email protected]
ssh machine.domaine.fr:80 ­l user
 Autres

d'avoir déposé sa clef publique auprès serveur
services
scp (transfert de fichiers)
Emmanuel Hyon
2007-2008
Tunnels SSH (1)
Principes
79
Emmanuel Hyon
Tunnels SSH (2)
2007-2008
80
Les commandes
 Commande
Tunnel simple
ssh ­L 3028:serveur.domain.fr:25 ­f ­n [email protected]




­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
Tunnels SSH (3)
2007-2008
81
Les commandes
 Commande
Tunnel avec relai
ssh ­L 3110:mail.domain.fr:110 ­f ­N [email protected]


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
2007-2008
82
Tunnels SSH (4)
Emmanuel Hyon
83
2007-2008
Les sockets :
l’API de la couche transport
Emmanuel Hyon
2007-2008
84
Socket
Architecture d'une socket
Socket « porte » entre le protocole d’appli et TCP (ou UDP)
mise à
Emmanuel Hyon
2007-2008

Les ports
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
85
Emmanuel Hyon
86
2007-2008
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
87
2007-2008
Socket et port
Machine cliente
socket
applicat
ion
Machine serveur
Ém
iss
applicat
ion
ion
C/
réc
Ém
ept
iss
ion
ion
S/
S
réc
ept
ion
C
socket
Ex de n° de ports :
FTP : 21
HHTP : 80
SMTP : 25
DNS : 53
POP3 : 110
IMAP : ??
Emmanuel Hyon
88
2007-2008
Programmer avec les “Sockets”
But : construire une application client/serveur qui
communiquent en utilisant les sockets
API Socket




Introduit dans UNIX BSD4.1, 1981
Socket : explicitement créée,
utilisée et détruite par les
applications
Paradigme client/serveur
Deux types de services de transport
service via l’API socket :
 Datagramme non fiable (UDP)
 Orienté flux d’octets, fiable
(TCP)
socket
Une interface (une “porte”)
contrôlée par l’OS, créée et
possédée par une application,
locale à un host à travers
laquelle un processus
applicatif peut
à la fois envoyer et recevoir
des messages vers/de un
autre processus (distant ou
local).
Emmanuel Hyon
89
2007-2008
Programmation Socket avec UDP
UDP : pas de “connexion” entre le
client et le serveur
 Pas d’établissement de connexion
 L’émetteur envoie explicitement
l’@ IP et le port de destination
 Le serveur doit extraire l’@ IP et
le port de l’émetteur dans le
datagramme reçu
UDP : les données transmises
peuvent être reçues dans le
désordre, ou perdues
Vue de l’application
UDP fournit un transfert non fiable
de groupes d’octets (“datagrammes”)
entre un client et un serveur
Emmanuel Hyon
90
2007-2008
Progammation java
 Package
java.net, contient deux classes
http://java.sun.com/j2se/1.3/docs/api/java/net/packagesummary.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
91
2007-2008
Interaction socket client/serveur : UDP
Serveur
(tourne sur hostid)
créer socket sur
port=x, pour les
requêtes entrantes :
serverSocket =
DatagramSocket()
lire requête de
serverSocket
écrire réponse sur
serverSocket
en spécifiant l’@ host client
et le n° de port client
Client
créer socket,
clientSocket =
DatagramSocket()
créer et envoyer
à l’adresse (hostid, port=x),
la requête en utilisant
clientSocket
Lire la réponse sur
clientSocket
fermer
clientSocket
Emmanuel Hyon
2007-2008
92
Exemple : un client Java (UDP)
k e y b o a rd
m o n ito r
in p u t
s tr e a m
2 - Créer une socket
PProcessus
ro c e s s
inFromUser
1 - Lire des caractères saisis au clavier
6 - Afficher les résultats
3 - Initialiser la PDU Client
5 - Recevoir la PDU
sendPacket
U D P
packet
receivePacket
4 - Envoyer la PDU
U D P
packet
c lie n tS o c k e t
socket
client UDP
port
to n e tw o r k
U D P
socket
fro m n e tw o rk
Emmanuel Hyon
2007-2008
Exemple : le client Java (UDP)
93
...
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
94
2007-2008
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
2007-2008
Exemple : le serveur Java (UDP)
95
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
2007-2008
96
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
EXERCICE :
Ecrire Votre programme echoUDP
2007-2008
 L’utilisateur (sur client)
ligne de commande) :
lance une commande (en
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
97
Emmanuel Hyon
2007-2008
Exécution et affichage
98
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
2007-2008
Exécution de l’application
99
 Placer
le code du client sur votre machine locale
 1° Placer le code du serveur sur votre machine (le
client se connecte à localhost)
 2° Placer le code serveur sur miage03

Pour chacun d’eux, compiler (si VM différentes)

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
Autres exercices
2007-2008
100
(option)
 Faire
en sorte qu'il y ait plus qu'une phrase
échangée avant de fermer la socket.
 Echange avec différents serveurs

demander son port à votre voisin

lui écrire et attendre sa réponse
 Echange

avec différents serveurs II
Garder les coordonnées de chacun des clients qui se sont
connecté.

Envoye chaque message à chacun des clients (???)
Emmanuel Hyon
2007-2008
Un exercice de modélisation
101
le miage chat
A
partir des programmes UDP déjà créés on voudrait
faire un chat réservé aux membres de la miage.
 Réflechir
aux fonctionnalités qu'il faudrait ajouter
pour rendre cela possible

Du côté serveur

Du côté client
Emmanuel Hyon
102
2007-2008
Programmation Socket avec TCP
Le client doit contacter le
serveur
 Le serveur est lancé
 Il a créé une socket et est
en attente
Le client contacte le serveur
par :
 La création d’une socket TCP
locale
 La spécification d’une @ IP et
du n° de port du processus
serveur


Quand le client crée une socket le
client TCP établit une connexion
avec le serveur TCP
Sur requête du client, le serveur
TCP crée une nvlle socket pour que
le processus serveur communique
avec le client
 Permet à un serveur de parler
à de multiples clients
« en même temps »
Vue de l’application
TCP fournit un transfert d’octets
fiable et ordonné (“tube”) entre un
client et un serveur
Emmanuel Hyon
103
2007-2008
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
104
2007-2008
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
105
2007-2008
Interaction socket client/serveur : TCP
Server (tourne sur hostid)
Client
create socket,
port=x, for
incoming request:
welcomeSocket =
ServerSocket()
TCP
wait for incoming
connection
connection request
connectionSocket =
welcomeSocket.accept()
read request from
connectionSocket
write reply to
connectionSocket
close
connectionSocket
setup
create socket,
connect to hostid, port=x
clientSocket =
Socket()
send request using
clientSocket
read reply from
clientSocket
close
clientSocket
Emmanuel Hyon
106
2007-2008
Exemple : un client Java (TCP)


in p u t
s tre a m
Client
P ro c e s s
process
output stream:
sequence of bytes
out of process
o u tp u t
s tre a m
m o n ito r
Input stream:
sequence of bytes
into process
inFromServer

Le client lit du clavier (stream
inFromUser), et envoie au
serveur via la socket (stream
outToServer)
Le serveur lit le flux provenant
de la socket
Il convertit les données en les
mettant en majuscule et les
renvoit au client
Le client lit et affiche les
données modifiées lui arrivant
via la socket (stream
inFromServer)
outToServer

inFromUser
k e y b o a rd
in p u t
s tre a m
client
TCP
c lie n tS o c k e t
socket
to n e tw o r k
fro m n e tw o rk
TC P
socket
Emmanuel Hyon
2007-2008
107
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;
Lecture du clavier
Création de la socket
client & demande de
connexion
Création du flux
en sortie attaché
à la socket
BufferedReader inFromUser =
new BufferedReader(new InputStreamReader(System.in));
Socket clientSocket =
new Socket(”miage18.miage.u-paris10.fr", 6789);
DataOutputStream outToServer =
new DataOutputStream(clientSocket.getOutputStream());
Emmanuel Hyon
108
2007-2008
Exemple : le client Java (TCP)
Création du flux
en entrée attaché
à la socket
BufferedReader inFromServer =
new BufferedReader(new
InputStreamReader(clientSocket.getInputStream()));
sentence = inFromUser.readLine();
Emission des données
au serveur
outToServer.writeBytes(sentence + '\n');
modifiedSentence = inFromServer.readLine();
Lecture des données
arrivant du serveur
System.out.println("FROM SERVER: " + modifiedSentence);
clientSocket.close();
}
}
Emmanuel Hyon
109
2007-2008
Exemple : le serveur Java (TCP)
import java.io.*;
import java.net.*;
class TCPServer {
Création de la
socket d’accueil
au port 6789
Attente d’une demande
de connexion sur la
socket d’accueil
Création du flux
en entrée attaché
à la socket
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()));
Emmanuel Hyon
110
2007-2008
Exemple : le serveur Java (TCP)
Création du flux
en sortie attaché à
la socket
DataOutputStream outToClient =
new DataOutputStream(connectionSocket.getOutputStream());
Lecture des données
arrivant du client
clientSentence = inFromClient.readLine();
capitalizedSentence = clientSentence.toUpperCase() + '\n';
Emission des données
au client
outToClient.writeBytes(capitalizedSentence);
}
}
}
Fin de boucle => reboucle et attend la
connexion d’un nouveau client
Emmanuel Hyon
2007-2008
Un mini serveur Web
111
 Le
client 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
2007-2008
Le site Web
112
1.Taper une page html simple
1.Le header vide : <head> </head>
2.Le body avec juste un titre: <body> <h1> blabla </h1> </body>
3.Enregistrée sous forme texte simple avec extension .htm
2.Tester si cette page s'affiche correctement en l'ouvrant
comme un fichier avec votre navigateur.
3.Taper le code (pour le parsing) du serveur
4.Tester le bon envoi des données en demandant la page au
moyen d'un telnet
5.Accèder à la page sur votre serveur à l'aide de votre
navigateur (si étape précedente fonctionne)
Emmanuel Hyon
2007-2008
Parsing
Le code
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)
Transformation
du fichier
en octets
et envoi
113
outToClient.writeBytes(’’HTTP/1.0 200 Document Follows\r\n’’);
outToClient.writeBytes(’’Content-Type: text/html \r\n’’);
File fichier = new File(filename);
int numOfBytes = (int) fichier.length;
FileInputStream inFile = new FileInputStream(filename);
byte[ ] fileInBytes = new byte[numOfBytes];
inFile.read(fileInByte);
outToClient.writeBytes(’’Content-length: ’’ + numOfBytes + ’’\r\n’’);
outToClient.writeBytes(’’\r\n’’);
outToClient.write(fileInBytes,0,numOfBytes);
Emmanuel Hyon
2007-2008
Socket TCP avec Thread
114
 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
2007-2008
Socket TCP avec Thread 2
 Comment
115
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
2007-2008
Socket Thread (3)
116
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
}

Documents pareils