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