• Aucun résultat trouvé

Réseaux : modèles, protocoles, programmation

N/A
N/A
Protected

Academic year: 2022

Partager "Réseaux : modèles, protocoles, programmation"

Copied!
14
0
0

Texte intégral

(1)

Réseaux : modèles, protocoles, programmation

Pablo Rauzy

pr @ up8·edu

pablo.rauzy.name/teaching/rmpp

UFR MITSIC / L2 informatique

Séance a

Programmation réseau (un peu plus) avancée

Pablo Rauzy (Université Paris 8) Réseaux : modèles, protocoles, programmation Séance a 1 / 13

(2)

Programmation réseau (un peu plus) avancée

Pablo Rauzy (Université Paris 8) Réseaux : modèles, protocoles, programmation Séance a 2 / 13

(3)

Programmation réseau (un peu plus) avancée

Gérer plusieurs clients simultanément

▶ Avec notre programmencat, nous avons déjà vu comment établir une connexion client-serveur et échanger des messages.

▶ Aujourd’hui nous allons voir comment un serveur peut gérer plusieurs clients simultanément.

▶ Deux problématiques :

Comment discuter avec plusieurs clients en même temps ?

Comment continuer pendant ce temps à accepter des nouveaux clients ?

Pablo Rauzy (Université Paris 8) Réseaux : modèles, protocoles, programmation Séance a 3 / 13

(4)

Gérer plusieurs clients simultanément Programmation réseau (un peu plus) avancée

Multiplexage d’entrées/sorties

▶ Dans notre programmencat, on a déjà vu comment utiliserpollpour attendre des données à la fois d’un client et sur l’entrée standard.

▶ Le même mécanisme peut être utilisé pour “écouter” sur plusieurs sockets.

Pablo Rauzy (Université Paris 8) Réseaux : modèles, protocoles, programmation Séance a 4 / 13

(5)

Gérer plusieurs clients simultanément Programmation réseau (un peu plus) avancée

Accepter plusieurs clients

▶ On peut aussi utiliserpollsur une socket passive.

▶ Dans ce cas, l’évènementPOLLINsignifiera qu’on peutaccepter un nouveau client.

▶ Attention toutefois,acceptest un appel bloquant.

▶ Il est donc nécessaire de rendre la socket du serveurnon bloquante.

On peut le faire avec un appel àfcntl.

Dans ce cas,acceptretournera -1 et mettreerrnoà la valeurEWOULDBLOCKà la place de bloquer.

Pablo Rauzy (Université Paris 8) Réseaux : modèles, protocoles, programmation Séance a 5 / 13

(6)

Gérer plusieurs clients simultanément Programmation réseau (un peu plus) avancée

Accepter plusieurs clients

▶ On peut aussi utiliserpollsur une socket passive.

▶ Dans ce cas, l’évènementPOLLINsignifiera qu’on peutaccepter un nouveau client.

▶ Attention toutefois,acceptest un appel bloquant.

▶ Il est donc nécessaire de rendre la socket du serveurnon bloquante.

On peut le faire avec un appel àfcntl.

Dans ce cas,acceptretournera -1 et mettreerrnoà la valeurEWOULDBLOCKà la place de bloquer.

Pablo Rauzy (Université Paris 8) Réseaux : modèles, protocoles, programmation Séance a 5 / 13

(7)

Gérer plusieurs clients simultanément Programmation réseau (un peu plus) avancée

Code

▶ Codons ensemble un serveur d’écho qui broadcast les messages à tous ses clients.

Pablo Rauzy (Université Paris 8) Réseaux : modèles, protocoles, programmation Séance a 6 / 13

(8)

Programmation réseau (un peu plus) avancée

Communications fiables

▶ Il est généralement important de s’assurer de la fiabilité des communications.

▶ TCP fait en partie cela pour vous, mais il ne peut pas faire de magie non plus.

▶ C’est à vous de gérer les envoies partiels, et de vous assurer en réception d’avoir bien reçu l’intégralité de ce qui vous a été envoyé.

Pablo Rauzy (Université Paris 8) Réseaux : modèles, protocoles, programmation Séance a 7 / 13

(9)

Communications fiables Programmation réseau (un peu plus) avancée

Gestion des envois partiels

▶ Exercice :

Vous avez un bufferbufd’une longueurlen.

Vous devez vous assurer de son envoi complet avecsendouwrite(au choix).

Écrivez une fonctionint sendall (int fd, void *buf, int *len);qui agit commewrite mais s’assure d’avoir tout envoyé.

Si elle échoue, la fonction renvoie -1 et place dans l’argumentlenle nombre d’octets effectivement envoyés, sinon elle renvoie 0.

Pablo Rauzy (Université Paris 8) Réseaux : modèles, protocoles, programmation Séance a 8 / 13

(10)

Communications fiables Programmation réseau (un peu plus) avancée

Réception

▶ Exercice :

En réception, comment être sûr qu’on a bien reçu l’intégralité d’un message ?

Quels mécanismes connaissez vous pour arriver à ce but ?

Pablo Rauzy (Université Paris 8) Réseaux : modèles, protocoles, programmation Séance a 9 / 13

(11)

Programmation réseau (un peu plus) avancée

Gérer IPv4 et IPv6

▶ Voyons comment gérer IPv6 en plus d’IPv4.

Pablo Rauzy (Université Paris 8) Réseaux : modèles, protocoles, programmation Séance a 10 / 13

(12)

Gérer IPv4 et IPv6 Programmation réseau (un peu plus) avancée

Adresse de socket

▶ Pour IPv6 :

remplacer

1 structsockaddr_in sa4;

2 sa4.sin_family = AF_INET;

3 sa4.sin_addr.s_addr = INADDR_ANY;

4 sa4.sin_port = htons(atoi(argv[1]));

par

1 structsockaddr_in6 sa6;

2 sa6.sin6_family = AF_INET6;

3 sa6.sin6_addr = in6addr_any;

4 sa6.sin6_port = htons(atoi(argv[1]));

5 /* in6addr_any est une struct in6_addr 6 initialisée à IN6ADDR_ANY_INIT */

Pablo Rauzy (Université Paris 8) Réseaux : modèles, protocoles, programmation Séance a 11 / 13

(13)

Gérer IPv4 et IPv6 Programmation réseau (un peu plus) avancée

Manipulation d’adresses IP

▶ À la place deinet_ntoa, utiliserinet_ntop:

remplacer

1 printf("%s\n", inet_ntoa(sa4.sin_addr));

par

1 charstr_addr[INET6_ADDRSTRLEN];

2 inet_ntop(AF_INET6, &(sa6.sin6_addr), str_addr, INET6_ADDRSTRLEN);

3 printf("%s\n", str_addr);

▶ À la place deinet_aton, utiliserinet_pton:

remplacer

1 inet_aton("127.0.0.1", &(sa4.sin_addr));

par

1 inet_pton(AF_INET6," ::1", &(sa6.sin6_addr));

Pablo Rauzy (Université Paris 8) Réseaux : modèles, protocoles, programmation Séance a 12 / 13

(14)

Gérer IPv4 et IPv6 Programmation réseau (un peu plus) avancée

Gérer indifféremment les IPv4 et IPv6

▶ Les nouvelles fonctionsinet_ntopetinet_ptonsont capables de gérer aussi bien IPv6 que IPv4 (premier paramètre), et sont à utiliser de préférences par rapport aux anciennes.

▶ Il existe une fonctiongetaddrinfoet une structurestruct addrinfoqui permettent d’utiliser tout ça de manière transparente.

▶ La fonctiongetaddrinfofait beaucoup de choses :

remplace l’appelle àgethostbyname,

est capable de remplir correctement unestruct sockaddrcôté serveur,

peut récupérer les différentes adresses possibles (IPv4 et IPv6) pour un hôte,

▶ Le mieux est de voir un exemple : utilisons la ensemble.

Pablo Rauzy (Université Paris 8) Réseaux : modèles, protocoles, programmation Séance a 13 / 13

Références

Documents relatifs

Il s’agit de programmer, pour chaque protocole, deux procédures de communication qui réaliseront les fonctions du niveau liaison : une procédure d’émission de message et

• Ce qui est fait en TME doit être rendu sous forme d’archive contenant le code source et un fichier texte contenant ce qui a été commencé. • 2 MiniProjets au choix doivent

Découverte en mars 2014 et rendue publique le 7 avril 2014, Heartbleed est une vulnérabilité logicielle présente dans la bibliothèque de cryptographie open source OpenSSL à partir

définit les moyens physiques de transmission de bits à l’état brut gère l’interface entre les supports et les équipements réseaux définit les caractéristiques

Écrire un programme, ServeurMajuscule, représentant un serveur TCP itératif renvoyant les chaînes de caractères envoyées par des clients après les avoir mis en majuscule.. Le

Le protocole est élémentaire, le client se contente d’envoyer un mot au serveur qui lui renvoit la réponse sous la forme d’un texte constitué d’un nombre quelconque de lignes

Dans cet exercice, faîtes un client qui se connecte au service echo de la machine lampe de l’ufr et qui en boucle lui envoie un message et affiche la réponse du service (par exemple

Au lieu d’envoyer et de recevoir des nombres comme des séquences de caractères 0,...,9, changer le protocole et le code de façon à ce que le client envoie un entier au serveur sous