04 Sockets

November 26, 2022 | Author: Anonymous | Category: N/A
Share Embed Donate


Short Description

Download 04 Sockets...

Description

 

Client/Server Socket

 

  Qu'est-ce qu'un serveur ? •

«

 »

é

leécute r  seau, un logiciel »serveur   offre un • le « serveur  »  est la machine surservice laquellesur s'ex le logiciel serveur, • le serveur doit être sur un site avec accès permanent et s'exécuter en permanence. Un site peut offrir plusieurs services.

Client/Serveur

 Le serveur acc accept eptee des des r equêtes equêtes , les traite  sultat au au demandeur. et envoie le r é sultat  • Un

service est fourni sur un Port de communicat communication ion identifié par un numéro.

• Certains

ex :

numéros de Port (internationalemen (internationalementt définis) identifient le service quelque soit le site - le se serv rvic icee F FTP TP est offe offert rt sur les les p por orts ts numéros 21 (contr ôle) et 20 (données), - le se service rvice TELNE TELNET T (émulation terminal) sur le port 23, - le service SMTP (mail) sur le p port ort 25, - etc.

• Pour

accéder à un service, il faut l'adresse du site et le numéro du port.

Qu'est-ce qu'un client ?

 

  Qu'est-ce qu'un client ?

• un «

logiciel client   » utilise le service offert par un serveur,

Client/Serveur •

le « client   » est la ma machine chine sur laquelle s   ’exécute le logiciel client,

• Le

client est raccordé par une liaison temporaire.

 Le client envoie des requêtes et re reççoit des r é ponses  ponses..

Quelle architecture client/serveur ?

client

serveur

 

 

 

 Architecture client/serveur ? description du fonctionnement coopératif  entre le serveur et le client.

Un serveur peut être utilisé par utilisé par plusieurs plusieurs clients, ceux-ci pouvant être développés sur différen différents ts systèmes systèmes : Unix, Mac ou PC par ex.

Mais obligation de respecter le protocole entre les deux processus communican communicants. ts.

Pile de protocoles TCP/IP tr èèss souvent utilisée utilisée (Internet par ex.)

L ’Appli Applicati cation on Program Interfa Interface ce (API) utilisé utilisée est l'A l'API PI Soc Socket ketss. (dans notre cas)

API = un ensem ensemble ble de primitives pour pour l'accè l'accès à la pile de protocoles TCP/IP.

 Notion de Sockets (et principales principales primitives)

 

 

 Notion de Sockets Sockets ( prises de raccordement)

d  Processus ’   Application  Socket 

Ce n   ’est ni une norme de communication ni une couche de protocole

C ’est

Transfert des données

une interface entre

le programme d'application et les protocoles de communication

mécanisme de communication bidirectionnel interprocessus (dans un environnement distribué)

Socket

API (ensemble de primitives de programmation) et Extrémités de la communication {A {Add dd IP, IP, numér o Port}  

 

   Principe de programmation

Un soc socke kett s'u s'util tilise ise co comme mme un fi fich chier  ier  : 1. Création Création//Définition/Ouver ture ture

 Processus d ’   Application

2. Communication 3. Fermeture/Libé Fermeture/Libération.

 Socket 

Transfert des données

• Cr éation/D ation/Dééfinition/Ouverture - r éservation des ressources pour l ’interface de communication - cr éation d ’un descripteur du socket (similaire descripteur de fichier) seulement une extrémité de connexion

• Communication - utilis utilisation ation d des es pr primitiv imitives es read  read (r  (r éception), write (émission) … (idem fichier) - plusi plusieurs eurs variante variantess de primitive primitive d ’é ’émission mission et de r éception • Fermeture/Lib ermeture/Libéération - utilis utilisation ation de la pri primitiv mitivee close (fermeture de la communication)

 

   Algorithmes

Demande le droit d'utiliser l'identificateur de port r éservé 21

Programme serveur pour un seul client (illustr é pour FTP)

 Non Autorisé

Initialisation du serveur  Fin échec

Attente connexion

Oui Attente CLIENT sur le port 21

Ar rivée rivée CLIENT sur le port 21

Service rendu au client

Fin connexion (pour ce client)

Servir CLIENT

 

   Algorithmes Demande le droit d'utiliser l'identificateur de port r éserv servéé 21

Concept de serv Concept serveur eur multimulti-clien clients ts (programmation concurre concurrente) nte)

 Non Autorisé

(illustr é pour FTP) Fin éche échecc Connexion d ’un client Ci, le serveur génère un processus fils (duplication du prog. serveur)  pour r é pondre à la demande du client Ci. Ainsi, le programme serveur  peut-il attendre un autre client.

Attente CLIENT sur le port 21

Ar rivée rivée CLIENT sur le port 21

Oui

 Nbre client > N

refus connexion connexion refusée refusée pour  pour cause de saturation du serveur  (nombre max max de clien clients ts atte atteint int )

création  Non d'un processus serveur fils p  Nbre client++

 

  Concept de serveur Concept serveur multimulti-clien clients ts (programmation concurrente)

 Algorithmes

serveur fils i

Prog. serveur dupliqué ( fork())  fork() ) à  à  chaque connexion d ’un client Ci .

serveur fils j servir client i

serveur fils k  servir client j

serveur fils p

Ar rêt rêt connexion

servir client k 

Ar rêt rêt connexion servir client p

Ar rêt rêt connexion

indication au processus père processus père Ar rêt rêt connexion de la fin de la connexion indication au processus père processus père de la fin de la connexion

indication au processus père processus père destruction du processus de la fin de la connexion serveur fils i destruction du processus indication au processus père processus père serveur fils j de la fin de la connexiondestruction du processus serveur fils k  destruction du processus serveur fils p

 

Introduction aux Sockets 

IPC : Inter Process Communication 



Bibliothèque 



UNIX

#include

La communication par socket utilise un descripteur pour désigner la connexion sur laquelle on envoie/reçoit les données 10

 

Communication locales

11

 

Communication locales 

 



Dans le domaine UNIX Communication locale à une machine Les identificateurs sone des nomes de fichiers Utilise une modalité de communication non connecté 

Le destinataire reçoit le message petit à petit 

Taille du message indéterminée

12

 

Communication locales 

L’ouverture d’un socket se fait en 2 étapes : d’un socket et de son descripteur Création 





Spécifier le type de communication 





Fonction socket () Fonction bind ()

Un server écoute Un client envoie 13

 

Socket data structure 

Structure générique

14

 

Socket data structure 

Famille AF_UNIX 



Plus grand que la structure générique Il faut spécifier la taille

15

 

Fonction socket () 

int 









socket (int af, int type, int protocol)

af: AF_UNIX, AF_INET Type: pe: SOC SOCK_S K_STREA TREAM M, SOCK SOCK_ _DGRA DGRAM, M, SOCK OCK_STR _STREA EAM M Protocol: 0 (car af et type suffit)

Retourne le descripteur   Aucun transfert pour le moment

16

 

Fonction bind ()





 Assignation d’une adresse/numéro de port locaux à un socket int bind(int sockfd, struct sockaddr *mon_adr, int lg_adr)

17

 

Fonctions sendto () recvfrom () 

Transmission/reception des données



Flags = 0

18  

Communication en mode connecté

19  

Socket data structure 

Structure générique

20  

Socket data structure 

Famille AF_INET 

IPv4 AF_INET sockets:

struct sockaddr_in { short

sin_family;

unsigned short sin_port; struct in_addr

// 2 bytes

sin_addr;

char sin_zero[8]; }; struct in_addr { unsigned long s_addr; };

// 4 bytes

21  

Fonction socket () 

int 









socket (int af, int type, int protocol)

af: AF_UNIX, AF_INET Type: SOCK_STREAM, SOC SOCK_DGRAM, SO SOCK_RAW Protocol: Proto col: 0 (car (car af et type type suffit) suffit)

Retour Ret ourne ne le des descri cripte pteur  ur   Aucun transfert pour le moment

22  

Fonction bind ()



 Assignation d’une adresse/numéro de port locaux à un socket

int

bind( int sockfd, struct sockaddr *mon_adr, int lg_adr)



Serveur: enregistre son adresse publique 



IP + port

Client: pas besoin en général

23  

exemple

24  

htonl (); htons (); unsigned long int htonl (unsigned long int hostlong);

unsigned short int htons (unsigned short int hostshort); 



La fonction htonl htonl() () convertit un entier long hostlong depuis l'ordre des octets octets de l'hôte vers celui du rése réseau. au. La fonction htons htons() () convertit un entier court (short) hostshort depuis l'ordre des octets de l'hôte vers celui du réseau.

25  

 Adresse IP 

INADDR_ANY le socket est associé à



n’importe machine quelle adresse IP de la La fonction inet_addr () spécifie une adress IP

26  

Port 

Le socket peut être reliée à un port libre quelconque en utilisant le numéro 0

27  

Port 

 Vérifier la port utilise par le serveur:

getsockname(hServerSocket, (struct sockaddr *) &Address,

(socklen_t *)&nAddressSize); printf("opened socket as fd (%d) on port (%d) for stream i/o\n",hServerSocket, ntohs(Address.sin_port) ); printf("Server\n\  sin_family = %d\n\  sin_addr sin_ad dr.s_addr .s_addr = %d\n\  sin_port = %d\n" , Address.sin_family , Address.sin_addr.s_addr , ntohs(Address.sin_port) );

28  

Listen () 

int listen(int s, int backlog); 



Le serveur est prêt à recevoir des demandes d’ouvertures des connexions Le paramètre backlog définit une longueur maximale pour la file des connexions en attente. Si une nouvelle connexion arrive alors que la file est pleine, le client reçoit une erreur

29  

Accept () 

int accept(int sock, struct sockaddr *adresse, socklent_t *longueur);



La fonction accept extrait la première connexion de la file des connexions en attente, crée une nouvelle socket avec essentiellement les mêmes propriétés que sock et alloue un nouveau descripteur de fichier pour cette socket (retourné par la fonction).



Fonction bloquante

30  

Connect () 



int connect(int socket, const struct sockaddr *address, socklen_t address_len);

Débuter une connexion sur une socket

31  

Fonctions read () write () 

Réception des données



int read(int sockfd, char *buf, int count); 



read lit jusqu'à count octets depuis le descripteur de socket dans le buffer pointé par buf. read renvoie -1 s'il échoue, sinon read renvoie le nombre d'octets lus

32  

Fonctions read () write ()  

Transmission des données données int write(int sockfd, char *buf, int count); 



write écrit jusqu'à count octets dans le fichier associé au descripteur sockfd depuis le buffer pointé par buf  write renvoie le nombre d'octets écrits (0 signifiant aucune écriture), ou -1 s'il échoue.

33  

Close () 

int close(int sockfd); 



close ferme le descripteur sockfd, close renvoie 0 s'il réussit, ou -1 en cas d'échec

34  

   Primitives de programmation programmation (API)  SERVEUR d  Processus ’   Application

 Socket 

 Berkeley Sockets Sockets (UNIX) - socket() cr ée le le sock socket et (e (ext xtr  r émit mitéé de connexion) en dé définissant : - doma domaine ine (ex (ex:: Internet). Internet)... ..  AF_INET  (adressage IP) - type (ser (service vice utili utilissé)… SOCK_STREAM  SOCK_STREAM (mode (mode connecté connecté) - pro protoc tocol ole.. e....  IPPROTO_TCP (TCP/IP)

 Processus d ’   Application  Socket 

193.49.108.49 21

 Processus d ’   Application

 Socket 

21 193.49.108.49

CLIENT   Processus d ’   Application

 Socket 

 Processus

 pas nécessaire

- bind bind() () associe le descripteur cr ée par  socket()  socket() à l'adresse et au port du serveur 

d ’   Application  Socket 

193.49.108.87

 Rem : c ’  c ’ est est un socket  découte  découte , i.e. non associé associé  précisément   précisément 

- listen() s pé  pécifie cifie le nombre de demandes de connexions max acceptées accept ées (mises  (mises en attente si le serveur est occupé)  Rem: pour pouvoir traiter trait er plusieurs con connexions nexions ( n >1 ), un processus fils doit n>1 doi t êtr e cr éééé après chaque accept() permettant de traiter cette communication, tandis que le processus père processus père traite les demandes de connexion (listen()).

…/...

 

   SERVEUR

 Processus d ’   Application

 Primitivess de programmation (API)  Primitive Communication établie (deux extrémités extrémités de  de connexion couplées) couplées) … échanges échanges de données données possibles.  possibles.

write() ou send().

read() ou recv()

Transfert é

é

des donn es

 Processus d ’   Application

 Socket 

 Socket 

Transfert

CLIENT 

read() ou recv()

write() ou send().

{193.49.108.49, 21}

des donn es

{193.49.108.87, 2065

Rupture de la communication (connexion (conn exionss relative relativess aux sockets sont fermées)  Processus d ’   Application

- Cl Clos ose( e()) -

 Processus

d ’   Application

• La fermeture fermeture d'un sock socket et n'im n'impli plique que pas la perte perte des donn donnéées restant à acheminer. • Le systè système tient compte des diff érents processus processus uti utilisant lisant llee socket et le transport des donné données en attente est assur é avant la fermeture r éelle. • La terminaison d ’un processus (normalement ou non) ferme d’ d’autorit autoritéé les sockets.

 

Debug 

Commande netstat  Affiche toutes les sockets sockets réseaux ouvertes Permett de vérifier les connexion Perme





ouvertes

38  

Debug 

Commande telnet 

telnet 



Ouvre une connexion TCP vers le Permet de recevoir/transmettre chaine de caractère Fin chaine de caractère av avec ec 1310 

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF