• 15 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

Ce cours existe en livre papier.

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 03/09/2019

C'est quoi, une application ?

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

Après les gros chapitres que vous venez d'enchaîner, celui-ci fera figure de gâteau.

En effet, ce chapitre a surtout pour objectif de vous faire comprendre certains concepts que vous utilisez sûrement déjà. Il devrait donc être succinct et facile à comprendre.
Plongeons-nous dès maintenant dans les notions de client et de serveur qui sont si importantes sur Internet.

Le serveur

Pour une application client / serveur, il faut un serveur.
Le propre d'un serveur est d'offrir un service. Par exemple, si l'on prend le cas d'un serveur web, son rôle est de mettre à disposition des internautes des pages web. Un serveur de messagerie mettra à disposition des adresses mail ainsi qu'un service d'envoi et de réception de mails.

Le détail d'un serveur

Sans descendre au niveau du fonctionnement basique d'un serveur et du langage de programmation qui a été utilisé pour le créer, nous allons quand même essayer de comprendre le mode de fonctionnement d'un serveur.

Le serveur écoute

Étant donné que le serveur est censé fournir un service accessible tout le temps, on dit qu'il est en écoute. En fait, le serveur va écouter sur le réseau et être prêt à répondre aux requêtes qui lui sont adressées.
Vous pouvez tout à fait le voir sur vos machines virtuelles Linux, ou même sur un autre système d'exploitation avec la commande netstat -an. Le résultat étant un peu un fouillis, je vous propose, sous Linux, d'utiliser l'option -antp.

sd-6123:~# netstat -antp
Connexions Internet actives (serveurs et établies)
Proto Recv-Q Send-Q Adresse locale          Adresse distante        Etat        PID/Program name
tcp        0      0 0.0.0.0:48963           0.0.0.0:*               LISTEN      29575/rpc.statd 
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      5470/mysqld     
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1841/portmap    
tcp        0      0 0.0.0.0:30033           0.0.0.0:*               LISTEN      5249/ts3server_linu
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      29667/sshd      
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      30562/master    
tcp        0      0 0.0.0.0:10011           0.0.0.0:*               LISTEN      5249/ts3server_linu
tcp        0      0 127.0.0.1:39027         127.0.0.1:80            TIME_WAIT   -               
tcp        0      0 127.0.0.1:35335         127.0.0.1:3306          TIME_WAIT   -               
tcp        0     48 88.191.45.68:22         79.82.49.130:53745      ESTABLISHED 23488/1         
tcp6       0      0 :::873                  :::*                    LISTEN      6699/rsync      
tcp6       0      0 :::80                   :::*                    LISTEN      18732/apache2   
tcp6       0      0 :::22                   :::*                    LISTEN      29667/sshd

Ici, trois colonnes nous intéressent.
La colonne Adresse locale nous donne l'adresse IP en écoute, ainsi qu'un numéro que nous ne connaissons pas encore.
La colonne Etat nous indique... l'état du service !
La colonne PID/program name nous indique le numéro du processus en écoute ainsi que son nom.

Si je prends par exemple la seconde ligne, je vois que j'ai un service MySQL qui tourne sur le numéro 3306 de l'adresse IP 127.0.0.1. Son état LISTEN montre qu'il est en écoute, ce qui est bien pour un service.

Vous vous souvenez ? 127.0.0.1 est une adresse IP spéciale, réservée pour une utilisation locale.
Ici, notre serveur MySQL sera injoignable depuis le réseau. Il ne sera joignable que depuis la machine elle-même. Cela évite de rendre un service accessible aux autres si on n'en a besoin que localement.

On peut s'interroger sur deux autres lignes et notamment sur leurs états. Il y a une ligne à l'état ESTABLISHED qui montre que la connexion est établie.
C'est super, cela veut dire que notre machine est en train de fournir un service ! Quelqu'un est connecté sur notre machine !

Enfin, l'état TIME WAIT montre d'anciennes connexions qui sont en cours de terminaison.

Conclusion

On peut donc en déduire qu'un service est un programme qui est en écoute sur une machine. On peut alors appeler cette machine un serveur.
Mais ce service ne servirait à rien s'il n'était pas utilisé, et pour cela, il faut que des clients viennent se connecter dessus et l'utilisent !

Le client

Qu'est-ce qu'un client ?

Le client est simplement un programme qui se connecte à un service pour l'utiliser. Vous en connaissez plein, et d'ailleurs vous en utilisez tous les jours !

Oui, en ce moment même vous utilisez un client web qui est votre navigateur et qui se connecte au serveur du Site du Zéro.
C'est bien une connexion client/serveur qui est établie entre votre navigateur et le serveur web du Site du Zéro.

Et j'utilise d'autres clients, sinon ?

Oui, des tas ! Vous utilisez peut-être un client de messagerie comme Outlook, Thunderbird ou Evolution.
Vous pouvez aussi utiliser un client FTP pour le transfert de fichiers, comme Filezilla.
Si vous jouez un peu en ligne, vous utilisez sûrement un client pour vous connecter à votre jeu préféré qui fonctionne sur un serveur sur Internet.

Un client peut-il être serveur ? Et vice versa ?

Oui, bien sûr ! Par exemple, on a vu dans le paragraphe précédent que ma machine était serveur, mais c'est aussi avec cette machine que je me connecte sur des sites web en tant que client. Elle joue donc à la fois le rôle de client et celui de serveur.

Alors il n'y a que des machines qui ont les deux rôles ?

Non, la plupart du temps, les machines serveur ne jouent pas le rôle de client, ou très peu. Elles sont spécialisées en tant que serveur et pour des raisons de sécurité, on limite les services disponibles à ceux qui sont strictement nécessaires, et on évite que cette machine ait une activité de client qui pourrait engendrer des failles.
De la même façon, on considère que les machines des utilisateurs comme vous et moi jouent en majeure partie le rôle d'un client et sont donc vues comme des clients et non des serveurs.

Et Internet là-dedans ?

On peut dire qu'Internet est aujourd'hui massivement basé sur un fonctionnement client/serveur.

Ceci dit, ce n'est pas l'unique façon de se connecter. En peer to peer par exemple, chacun peut prendre le rôle de client et de serveur. De même, le service n'est pas assuré par un seul et unique serveur auquel on s'adresse, mais par tout un ensemble de machines qui possèdent la ressource.

Nous voyons que la notion de client/serveur est très importante pour Internet.
Elle joue notamment un grand rôle dans le modèle OSI et spécifiquement pour la couche 4.

Nous allons donc pouvoir aborder cette couche sereinement dans le prochain chapitre ! :D

Exemple de certificat de réussite
Exemple de certificat de réussite