Programmation de la communication via les sockets -...

41
Programmation de la communication via les sockets Thierry Desprats, Emmanuel Lavinal (Pré[email protected]) M1 MIAGE – UE « Réseaux » v. 01/2017

Transcript of Programmation de la communication via les sockets -...

Programmation de la communication via les sockets

Thierry Desprats, Emmanuel Lavinal (Pré[email protected])

M1 MIAGE – UE « Réseaux » v. 01/2017

Hôte B

Introduction ¡  Socket :

représente l’extrémité d’un canal de communication par lequel un processus d’application peut émettre ou recevoir des données.

2

Processus

Hôte A

Internet

interactions

SOCKET

Processus

SOCKET

Introduction

3

API socket API socket

UDP TCP UDP TCP

port

adresse IP xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx

Protocole applicatif

Liaison Physique

Liaison Physique

Internet

interactions

IP IP

Protocoles applicatifs

¡  Les processus distants communiquent entre eux par l’envoi et la réception de messages dans des sockets. ¡  Comment ces messages sont-ils structurés ? Quand sont-ils envoyés ? … è rôle du protocole de la couche application

¡ Un protocole applicatif (application-layer protocol) définit : ¡  Les types de messages échangés ¡  La syntaxe des différents types de messages (~ les « champs » du msg) ¡  La sémantique des champs du message (i.e. leur signification) ¡  Les règles pour déterminer quand un processus envoie ou reçoit tel type de

message

¡  Exemples de protocoles applicatifs standards (IETF) : ¡  HTTP, SMTP, FTP, SIP, RTP…

4

Exemple : aperçu de HTTP ¡ HTTP (HyperText Transfer Protocol) ¡  Protocole applicatif utilisé par le web… ¡  Modèle Client / Serveur ¡  S’appuie sur un service de transport

fiable TCP (port serveur « well- known » : 80)

¡  Sans état (stateless)

¡  Requête : opérations GET, HEAD, POST, PUT,…

¡  Réponse : code de retour, corps du message éventuel (données)

¡  Encodage : texte ASCII + ressources dans structures MIME (text/html, image/gif, image/jpeg,…)

5

PC client

Server

Phone client

Exemple : aperçu de HTTP ¡  Format des messages HTTP ¡  Exemple Requête :

6

request line (GET, POST, HEAD commands)

header lines

carriage return, line feed at start of line indicates end of header lines

GET /index.html HTTP/1.1\r\n Host: www-net.cs.umass.edu\r\n User-Agent: Firefox/3.6.10\r\n Accept: text/html,application/xhtml+xml\r\n Accept-Language: en-us,en;q=0.5\r\n Accept-Encoding: gzip,deflate\r\n Accept-Charset: ISO-8859-1,utf-8;q=0.7\r\n Keep-Alive: 115\r\n Connection: keep-alive\r\n \r\n

carriage return character line-feed character

Exemple : aperçu de HTTP ¡  Format des messages HTTP ¡  Exemple Réponse :

7

status line (protocol status code status phrase)

header lines

data, e.g., requested HTML file

HTTP/1.1 200 OK\r\n Date: Sun, 26 Sep 2010 20:09:20 GMT\r\n Server: Apache/2.0.52 (CentOS)\r\n Last-Modified: Tue, 30 Oct 2007 17:00:02

GMT\r\n ETag: "17dc6-a5c-bf716880"\r\n Accept-Ranges: bytes\r\n Content-Length: 2652\r\n Keep-Alive: timeout=10, max=100\r\n Connection: Keep-Alive\r\n Content-Type: text/html;

charset=ISO-8859-1\r\n \r\n data data data data data ...

Plan ¡  Caractéristiques générales

¡  Définitions et historique ¡  Types de sockets ¡  Abstraction pour le programmeur

¡  Sockets en mode datagramme ¡  Principe ¡  Création et caractérisation ¡  Transfert de données ¡  Récapitulatif

¡  Sockets en mode connecté ¡  Principe ¡  Ouverture passive et ouverture active ¡  Acceptation ¡  Transfert de données ¡  Fermeture ¡  Récapitulatif

¡  Gestion des options

10

Caractéristiques générales (1/4)

¡  Socket : représente l’extrémité d’un canal de communication par lequel un processus d’application peut émettre ou recevoir des données. = = > Abstraction des services de communication

¡  Interface de Programmation : ensemble de primitives pour : ¡  attribuer aux processus un rôle (par ex. client ou serveur) ¡  manipuler des informations de communication

permettre les mises en relation ¡  échanger des messages protocolaires applicatifs en rendant transparents

les services de com. de plus bas niveau (transport, réseau, liaison…) supporter l’interaction applicative

¡  contrôler et paramétrer les sockets

11

Caractéristiques générales (2/4) ¡ Historique ¡  Initialement ¡  UNIX Berkeley ¡  Langage C ¡  IPC et Pile TCP/UDP-IP

¡  Autres protocoles : AppleTalk, Novell IPX,… ¡  Autres systèmes d’exploitation : MS-Windows,… ¡  Autres langages : Java, Python, PhP, …

12

==> concept universel

Caractéristiques générales (3/4)

¡ Différents types de sockets : (variables selon les technologies) ¡ Communications locales :

¡  IPC UNIX (domaine AF_UNIX)

¡ Communications distantes ¡  point à point

¡  Mode stream (ou connecté) : ¡  établir et utiliser une connexion TCP pour un transfert fiable ¡  Exemples de services : ftp, http, smtp, telnet, BGP…

¡  Mode datagramme (ou non connecté) : ¡  Datagrammes indépendants ¡  Non fiable, plus rapide ¡  Exemples de services : snmp, tftp, dhcp, dns, RIP…

¡  Mode raw (interface de bas niveau) ¡  Accès aux couches basses (ex : ICMP)

¡  multipoint ¡  Socket Multicast

13

Caractéristiques générales (4/4) ¡ Abstraction pour le programmeur :

Assimiler un flux de données échangé avec un processus distant via le réseau à un flux d’E/S comme un autre ! ¡  Vision réseau : association d’application = Quintuplet :

¡  Adresse IP et port locaux ¡  Adresse IP et port distants ¡  Protocole de Transport (UDP ou TCP)

¡  Vision Système : ¡  Équivalent à un fichier (FIFO) avec descripteur

14

Descripteur de socket

...

@sse IP locale :

Port local : Protocole : Domaine :

UDP TCP

IP xxx.xxx.xxx.xxx

xxx.xxx.xxx.xxx

invocation primitives

FIFO STREAM

AF_INET

réalisation primitives

Sockets mode datagramme

¡  Principe ¡ Datagrammes individuels transférés

¡  de façon non fiable, du « mieux » possible ¡  pas de connexion entre émetteur(s) et récepteur ¡  contrôle parfois possible de couplage

==> service UDP utilisé ¡ Une seule phase à programmer : ¡  transfert de données

¡  envoi et réception possibles (requêtes et réponses selon le protocole applicatif) ¡  détermination de l’expéditeur par le récepteur;

L’expéditeur peut ensuite devenir destinataire. ¡  éventuellement contrôle de la fiabilité et du dialogue

¡  Au préalable, création et caractérisation des sockets ¡  Libération de port après usage

15

Sockets mode datagramme

¡ Création et caractérisation : ¡ Conception : ¡  Créer une socket localement ¡  La caractériser si réception de données prévue

¡  Numéro de port prédéfini côté « serveur »

¡  Programmation en C/Unix : ¡  Primitive socket // création en mode DGRAM

¡  [ Primitive bind ] // assignation port et @sse IP locaux

¡  Programmation en JAVA ¡  Classe DatagramSocket ¡  Trois constructeurs possibles

¡  sans paramètre : port anonyme local ¡  avec no_port local // épier des messages entrants sur ce port ¡  et @sse IP_locale

16

Sockets mode datagramme

¡  Illustration : création et caractérisation

17

socket

bind

socket

bind id_s_cli id_s_serv

...

@sse IP :

# de Port :

Protocole :

Domaine :

131.21.124.5

DGRAM AF_INET

3500

{131.58.25.10, 32512, -,-,DGRAM}

3500 32512

{131.21.124.5, 3500, -,-,DGRAM}

UDP

IP IP

UDP

131.21.124.5 131.58.25.10

Sockets mode datagramme

¡  Transfert de données (des deux côtés) : ¡  Conception :

¡  EMISSION : Envoyer X octets vers une socket distante dont on précise les caractéristiques

¡  RECEPTION : Recevoir X octets provenant d’une socket distante dont on récupère les caractéristiques pour en déterminer l’origine = = > fonction bloquante

¡  Programmation en C/Unix ¡  Emission : primitives sendto ¡  Réception : primitives recvfrom

¡  Programmation en JAVA ¡  Classe DatagramSocket // socket pour recevoir ou émettre des datagram packets

¡  Emission : méthode send ¡  Réception : méthode receive

¡  Classe DatagramPacket // paquet UDP émis ou reçu ¡  Constructeurs pour l’envoi ¡  Constructeurs pour la réception

18

Compléments mode datagramme en Java

¡ Classe DatagramPacket pour manipuler des paquets UDP ¡  Principal constructeur pour émission de paquets :

DatagramPacket(byte[] buf, int length, InetAddress address, int port)

¡  Principal constructeur pour réception de paquets : DatagramPacket(byte[] buf, int length)

¡ Méthodes utiles : getData(), getLength() getAddress(),…

¡  Exemple ¡  Code client : byte[] req = myStringRequest.getBytes(); DatagramPacket packetOut =

new DatagramPacket(req, req.length, InetAddress.getByName(remoteServer), remotePort);

19

Compléments mode datagramme en Java

¡ Classe DatagramSocket : représente une socket pour émettre et recevoir des DatagramPacket ¡  Constructeur associant la socket locale sur un port quelconque disponible

DatagramSocket()

¡  Constructeur associant la socket locale sur un port spécifique DatagramSocket(int port)

¡  Constructeur associant la socket locale sur port et adresse spécifiques DatagramSocket(int port, InetAddress laddr)

¡ Méthodes utiles : send(), receive(), close(),…

¡  Exemple ¡  Code client DatagramSocket dsock = new DatagramSocket(); dsock.send(packetOut);

20

Mode datagramme – récapitulatif vision Java

DatagramSocket () DatagramSocket (port)

DatagramPacket (...)DatagramPacket(..)

sock.receive()

SERVEURCLIENT

: appel pouvant êtrebloquant: appel non bloquant

sock.send()

sock.receive()sock.send ()

DatagramPacket (...)

DatagramPacket(..)

21

Mode datagramme – récapitulatif vision UNIX / C

22

sendto

id_s_cli id_s_serv

@sse IP dist :

# de Port dist :

Protocole :

Domaine :

DGRAM

AF_INET

3500

{131.58.25.10, 32512, 131.21.124.5, 3500, DGRAM}

3500 32512

{131.21.124.5, 3500, 131.58.25.10, 32512, DGRAM}

UDP

IP

UDP

IP 131.58.25.10 131.21.124.5

recvfrom

mess

32512 3500 mess

32512 3500 mess

mess

@sse IP dist.

# de Port dist.

Protocole :

Domaine : AF_INET

32512 DGRAM

131.21.124.5 131.58.25.10

131.58.25.10 131.21.124.5

Mode datagramme – récapitulatif vision UNIX / C

23

sendto

id_s_cli id_s_serv

close

recvfrom

socket

bind socket

sendto

recvfrom transfert requête

transfert réponse

Travaux pratiques ! ¡ Développement d’un service (simplifié) d’authentification entre un client

« Checker » et un serveur « Authentication Service », sur un transport non connecté UDP

24

UPS – Toulouse III FSI – Dpt Informatique

T. Desprats / E. Lavinal / C.Teyssié / P. Torguet - 1 - Master MIAGE- UE « Réseaux »

TP Programmation API JAVA Sockets TCP/IP

On se propose de développer, de façon incrémentale, un service simplifié d’authentification basé sur des associations « login/password ». La figure ci-dessous illustre l’objectif fonctionnel à atteindre.

Le service d’authentification (AS) gère localement de façon persistante une liste de paires « login/password ». Deux types de processus distants peuvent lui demander la réalisation d’opérations sur cette liste. Ils occupent un rôle de client de ce service. Pour une paire « login/password » fournie en entrée par l’utilisateur, un processus client Checker (C) permet d’en vérifier la validité auprès du serveur AS distant. Le second type de processus client, désigné par Manager (M) s’adresse à un utilisateur administrateur. En plus de la fonctionnalité de vérification de validité, il permet de demander à l’AS l’ajout ou la suppression d’une paire ainsi que la modification du password associé à un login au sein d’une paire.

Pour cela, on adopte les spécifications protocolaires (sémantiques et syntaxiques) suivantes :

Messages d’un client (C ou M) vers le serveur AS Numéro sur figure

Type(s) Client concerné(s)

Requête de vérification d’une paire CHK Login Password 1 C et M

Requête d’ajout d’une paire ADD Login Password 2 M

Requête de suppression d’une paire DEL Login Password 3 M

Requête de modification d’une paire MOD Login NewPassword

4 M

Messages du serveur AS vers un client (C ou M)

Réponse à vérification GOOD ou BAD 5 ou 6 C et M

Compte rendu positif d’opération (ADD, DEL ou MAJ) DONE 7 M

Compte rendu négatif ERROR Raison 8 M

Exemples : CHK desprats hjl7-67tru MOD lavinal 23krest?l97 DEL..teyssie rcz!ou3008 ADD torguet çrg89pom:15 ERROR name_unknown

Exemple C à AS : CHK desprats hji78!4r AS à C : BAD

Travaux pratiques ! ¡ Développement d’un service (simplifié) d’authentification entre un client

« Checker » et un serveur « Authentication Service », sur un transport non connecté UDP

¡ Deux programmes : ¡  Client : CheckUDP.java¡  Serveur : AuthServerUDP.java

(ce dernier s’appuiera sur la classe ListeAuth.java fournie)

25

Sockets mode connecté (principe)

¡  Principe ¡  Flot bidirectionnel d’octets transférés

¡  de façon fiable (ni perte, ni duplication) et ordonnée ¡  entre deux locuteurs préalablement « connectés »

==> service TCP utilisé ¡  Trois phases nécessaires à programmer : ¡  établissement de connexion

¡  Un initiateur (e.g. l’entité « client » : ouverture active) ¡  Un répondant (e.g. l’entité « serveur » : ouverture passive)

¡  transfert de données ¡  Requêtes, [réponses] (selon le protocole applicatif)

¡  libération de connexion ¡  Bi partie

¡  Au préalable, création et caractérisation des sockets

26

Sockets mode connecté (établissement connexion)

¡ Ouverture passive (côté « répondant ») : ¡  Conception :

¡  Dédier une socket destinée à intercepter des demandes d’établissement de connexion = = > socket générique d’écoute

¡  Caractériser cette socket en terme de communication : ¡  au moins un numéro de port (associé au service) ¡  éventuellement une adresse IP (interface cible)

¡  Lui permettre de scruter et stocker les demandes de connexions entrantes avant acceptation ¡  paramétrer la taille de la FIFO des demandes de connexion

¡  Programmation en C/Unix : ¡  Primitive socket // création en mode STREAM

¡  Primitive bind // assignation numéro de port et adresse IP ¡  Primitive listen // taille maximale FIFO

¡  Programmation en JAVA : ¡  Classe ServerSocket ¡  Trois constructeurs possibles

¡  numéro_port (obligatoire) ¡  Et taille maximale FIFO ¡  Et Adresse IP

27

Sockets mode connecté (établissement connexion)

¡ Ouverture active (côté « initiateur ») : ¡  Conception :

¡  Créer une socket localement (et éventuellement la caractériser) ¡  L’utiliser pour demander l’établissement d’une connexion TCP avec un processus

distant « répondant » ¡  Spécifier ce dernier grâce aux caractéristiques de communication de sa socket

générique d’écoute : ¡  numéro de port ¡  Adresse IP

¡  Programmation en C/Unix : ¡  Primitive socket // création en mode STREAM ¡  [Primitive bind ] // assignation numéro de port et @sse IP locaux ¡  Primitive connect // désignation de la socket cible par num de port et @sse IP distants

¡  Programmation en JAVA ¡  Classe Socket ¡  Quatre constructeurs possibles

¡  @sse IP ou nom_host distant ET numéro_port distant (obligatoires) ¡  Et @sse IP ou nom_host local ET numéro_port local

28

Sockets mode connecté (établissement connexion)

¡ Acceptation d’ouverture (côté « répondant ») : ¡  Conception :

¡  Le processus doit être bloqué tant qu’aucune demande de connexion ne lui parvient sur la socket générique d’écoute : = = > fonction bloquante

¡  L’acceptation consiste à considérer positivement une demande reçue et à créer localement une socket spécifique dédiée à supporter l’échange de données sur cette connexion particulière = = > Cette socket représente l’extrémité « serveur » de la connexion TCP initiée par un « client » distant.

¡  Programmation en C/Unix : ¡  Primitive accept // retourne l’identificateur de la nouvelle socket créée

// ainsi que les caractéristiques du client distant

¡  Programmation en JAVA ¡  Méthode accept sur classe ServerSocket // retourne un objet Socket

29

Sockets mode connecté (établissement connexion)

¡  Illustration : création et caractérisation

30

socket bind

socket bind

id_s_cli id_s_serv_gen ...

@sse IP :

# de Port :

Protocole :

Domaine :

131.21.124.5

STREAM 3500

{131.58.25.10, 32512, -,-,STREAM}

3500 32512

{131.21.124.5, 3500, -,-,STREAM}

TCP

IP 131.21.124.5 131.58.25.10

TCP

IP

Sockets mode connecté (établissement connexion)

¡  Illustration : établissement de connexion

31

{131.21.124.5, 3500, 131.58.25.10, 32512, STREAM}

listen connect

id_s_cli id_s_serv_gen ...

@sse IP dest :

# de Port dest :

Protocole :

Domaine :

131.21.124.5

STREAM AF_INET

3500

{131.58.25.10, 32512, 131.21.124.5, 3500, STREAM}

3500 32512

TCP

IP

131.21.124.5 131.58.25.10

TCP

IP

32512 3500 SYN

32512 3500 SYN

131.58.25.10 131.21.124.5

accept

Sockets mode connecté (établissement connexion)

¡  Illustration : acceptation de connexion

32

accept connect

id_s_cli id_s_serv_gen

{131.58.25.10, 32512, 131.21.124.5, 3500, STREAM}

3500 32512

{131.21.124.5, 3500, -,-,STREAM}

TCP

IP

TCP

IP

32512 3500 SYN

listen

{131.21.124.5, 3500, 131.58.25.10, 32512, STREAM}

id_s_serv_spec

ACK

32512 3500 ACK

131.21.124.5 131.58.25.10

Sockets mode connecté (transfert de données)

¡  Transfert de données (des deux côtés) : ¡ Conception : ¡  EMISSION : Revient à Ecrire/Envoyer un message

(x octets) sur la connexion ¡  RECEPTION : Revient à Lire/Recevoir un message

(x octets) sur la connexion = = > fonction bloquante

¡  Programmation en C/Unix : ¡  Emission : primitives send ou write ¡  Réception : primitives recv ou read

¡  Programmation en JAVA ¡  Classe Socket ¡  Emission : méthode getOutputStream ¡  Réception : méthode getInputStream

33

Sockets mode connecté (transfert de données)

¡  Illustration : transfert de données

34

send

id_s_cli id_s_serv_gen

{131.58.25.10, 32512, 131.21.124.5, 3500, STREAM}

3500 32512

{131.21.124.5, 3500, -,-,STREAM}

TCP

IP

TCP

IP

32512 3500

{131.21.124.5, 3500, 131.58.25.10, 32512, STREAM}

id_s_serv_spec

32512 3500 ACK

write

mess

recv read

mess

131.58.25.10 131.21.124.5

32512 3500 mess

mess

131.21.124.5 131.58.25.10

Sockets mode connecté (fermeture)

¡  Libération de connexion (des deux côtés) : ¡ Conception : ¡  Fermeture totale :

¡  revient à fermer l’extrémité d’une connexion : = = > émission et réception deviennent impossibles

¡  Fermeture partielle : ¡  possible selon les technologies

= = > émission ou réception devient impossible

¡  Programmation en C/Unix : ¡  primitive close

¡  Programmation en JAVA ¡  Classe Socket ¡  méthode close ¡  méthodes shudownInput et shutdownOutput

35

Sockets mode connecté (fermeture)

¡  Illustration : fermeture

36

close

id_s_cli id_s_serv_gen

{131.58.25.10, 32512, 131.21.124.5, 3500, STREAM}

3500 32512

{131.21.124.5, 3500, -,-,STREAM}

TCP

IP

TCP

IP

32512 3500 FIN

listen

{131.21.124.5, 3500, 131.58.25.10, 32512, STREAM}

id_s_serv_spec

32512 3500 ACK

131.21.124.5 131.58.25.10

Compléments mode connecté en Java

¡ Classe ServerSocket : représente une socket « serveur » ¡  Principal constructeur :

ServerSocket(int port) Creates a server socket, bound to the specified port.

¡  Constructeur avec taille max file de demandes de connexion : ServerSocket(int port, int backlog) Creates a server socket and binds it to the specified local port number, with the specified backlog. […] The maximum queue length for incoming connection indications (a request to connect) is set to the backlog parameter. If a connection indication arrives when the queue is full, the connection is refused.

¡ Méthode pour attendre et accepter connexion : accept() (retourne un objet Socket)

¡  Exemple code serveur : ¡  ServerSocket listenSock = new ServerSocket(2244, 10); Socket connectionSock = listenSock.accept();

37

Compléments mode connecté en Java

¡ Classe Socket : représente une socket en mode connecté ¡  Principal constructeur (utilisé par un « client ») :

Socket(InetAddress address, int port) Creates a stream socket and connects it to the specified port number at the specified IP address.

¡  Un objet Socket est également renvoyé par la méthode accept() de la classe ServerSocket lors de l’acception d’une connexion

¡  Emission / réception via flux d’entrée-sortie : ¡  Méthodes getInputStream()et getOutputStream()

Ces flux d’octets (InputStream/OutputStream) peuvent être ensuite concaténés à d’autres flux offrant davantage de fonctionnalités : ¡  Exemples : flux orientés « caractères » (Reader/Writer) , flux

« bufferisés » : BufferedXXX, flux Print (méthodes print, println…)

38

Compléments mode connecté en Java

¡  Exemple code client ¡  // Create client socket and connect it to server

Socket sock = new Socket("141.115.64.43", 8888); // Buffered character stream for input BufferedReader br = new BufferedReader(

new InputStreamReader(sock.getInputStream())); // Line-oriented character stream for output PrintWriter pw = new PrintWriter(sock.getOutputStream(), true); // Send request pw.println(myStringRequest); // Wait for response String response = br.readLine(); System.out.println("*** Response --> " + response); // Close socket sock.close();

39

Sockets mode connecté – récapitulatif vision Java

40

SERVEUR "serv"CLIENTServerSocket(PORT)

in = new BufferedReader(new InputStreamReader(

cxion.getInputStream()))

out = new PrintWriter(new BufferedOutputStream(

cxion.getOutputStream()))

out.println(…);out.flush()in.readLine();

cxion.close()

Socket(ip,PORT)

in = new BufferedReader(...(socket.getInputStream()))

out = new PrintWriter(…(socket.getOutputStream()))

in.readLine();out.println(…);out.flush()

socket.close()

Transfertdedonnées

Nouvelle socket etéventuellement nouveau threadici...

.accept()

Sockets mode connecté – récapitulatif vision UNIX/C

41

send

id_s_cli id_s_serv_gen

id_s_serv_spec

close

recv

socket

bind socket

listen connect établissement connexion accept

send

recv

close

transfert requête

transfert réponse

déconnexion

Gestion des options

¡  Lire ou Ajuster des valeurs de paramètres ¡  Temporels

¡  Envoi immédiat (TCP_NODELAY) ¡  Valeur maximale d’attente d’arrivée d’octets lors d’une lecture ou d’une acceptation

de connexion (SO_TIMEOUT) ¡  Fonctionnels

¡  Gestion des paquets restants (non expédiés) lors d’une fermeture (SO_LINGER) ¡  Taille des buffers de réception (SO_RCVBUF) et de transmission (SO_SNDBUF) ¡  Maintien d’une connexion ouverte si silencieuse depuis une longue période de

temps (SO_KEEPALIVE)

¡ Programmation en C/Unix : ¡  primitives getsockopt et setsockopt

¡ Programmation en JAVA ¡  Classes SocketDatagram, Socket, ServerSocket

¡  Accesseurs SetXXX et GetXXX

42

Retour sur les TP… ¡ Communication client « Checker » et serveur « Authentication Service »

sur un transport TCP

43

UPS – Toulouse III FSI – Dpt Informatique

T. Desprats / E. Lavinal / C.Teyssié / P. Torguet - 1 - Master MIAGE- UE « Réseaux »

TP Programmation API JAVA Sockets TCP/IP

On se propose de développer, de façon incrémentale, un service simplifié d’authentification basé sur des associations « login/password ». La figure ci-dessous illustre l’objectif fonctionnel à atteindre.

Le service d’authentification (AS) gère localement de façon persistante une liste de paires « login/password ». Deux types de processus distants peuvent lui demander la réalisation d’opérations sur cette liste. Ils occupent un rôle de client de ce service. Pour une paire « login/password » fournie en entrée par l’utilisateur, un processus client Checker (C) permet d’en vérifier la validité auprès du serveur AS distant. Le second type de processus client, désigné par Manager (M) s’adresse à un utilisateur administrateur. En plus de la fonctionnalité de vérification de validité, il permet de demander à l’AS l’ajout ou la suppression d’une paire ainsi que la modification du password associé à un login au sein d’une paire.

Pour cela, on adopte les spécifications protocolaires (sémantiques et syntaxiques) suivantes :

Messages d’un client (C ou M) vers le serveur AS Numéro sur figure

Type(s) Client concerné(s)

Requête de vérification d’une paire CHK Login Password 1 C et M

Requête d’ajout d’une paire ADD Login Password 2 M

Requête de suppression d’une paire DEL Login Password 3 M

Requête de modification d’une paire MOD Login NewPassword

4 M

Messages du serveur AS vers un client (C ou M)

Réponse à vérification GOOD ou BAD 5 ou 6 C et M

Compte rendu positif d’opération (ADD, DEL ou MAJ) DONE 7 M

Compte rendu négatif ERROR Raison 8 M

Exemples : CHK desprats hjl7-67tru MOD lavinal 23krest?l97 DEL..teyssie rcz!ou3008 ADD torguet çrg89pom:15 ERROR name_unknown