04 Sockets
November 26, 2022 | Author: Anonymous | Category: N/A
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