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 validuser </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.uparis10.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.rootservers.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.uparis10.fr «ceci est le texte original saisi sur le client» Le résultat affiché sur le client est : socket cliente attachee au port 32793 46 octets emis vers le serveur miage03.miage.u-paris10.fr/192.168.5.3 FROM SERVER /192.168.5.3:9876 46 octets recus ECHO = ceci est le texte original saisi sur le client •Le serveur affiche : Socket serveur en écoute sur le port Segment UDP FROM @:port # octets reçus texte: Emmanuel Hyon 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.uparis10.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 }