Avant de rentrer plus en détail dans la couche 4, nous allons voir en détail ce qu'est une application et le modèle client-serveur.
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. On peut donc dire d'une machine qu'elle est un serveur, dès lors qu'elle fournit un service. 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 une machine virtuelle 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.
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. 127.0.0.1 étant 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 dire ici que ma machine est un serveur, car elle fournit des services sur le réseau (des programmes sont en écoute et sont prêts à répondre à des requêtes qui leur parviennent). 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. 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
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 de Jaynerro. C'est bien une connexion client/serveur qui est établie entre votre navigateur et le serveur web de jaynerro.com. Vous utilisez peut-être également 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. 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.