Programmation de sockets pour les réseaux informatiques
Un socket est l'une des technologies les plus fondamentales de la programmation des réseaux informatiques. Les sockets permettent aux applications logicielles réseau de communiquer à l'aide de mécanismes standard intégrés au matériel et aux systèmes d'exploitation du réseau.
Bien que cela ressemble à une autre caractéristique du développement de logiciels Internet, la technologie des sockets existait avant le Web. De nombreuses applications logicielles réseau populaires reposent sur des sockets.
Ce que la technologie Socket peut faire pour votre réseau
Un socket représente une connexion unique entre exactement deux logiciels (une connexion point à point). Plus de deux logiciels peuvent communiquer avec serveur client ou des systèmes distribués en utilisant plusieurs sockets. Par exemple, de nombreux navigateurs Web peuvent communiquer simultanément avec un seul serveur Web à l'aide d'un groupe de sockets créés sur le serveur.
Les logiciels basés sur des sockets s'exécutent généralement sur deux ordinateurs distincts du réseau, mais les sockets peuvent également être utilisés pour communiquer localement (interprocessus) sur un seul ordinateur. Les sockets sont bidirectionnels, ce qui signifie que chaque côté de la connexion est capable à la fois d'envoyer et de recevoir des données.
Parfois, l'application qui initie la communication est appelée le client et l'autre application est le serveur, mais cette terminologie prête à confusion dans d'égal à égal réseau et doit généralement être évité.
API et bibliothèques de sockets
Plusieurs bibliothèques qui implémentent la norme interfaces de programmation d'applications (API) existent sur Internet. Le premier package grand public, la Berkeley Socket Library, est largement utilisé sur les systèmes UNIX.
Une autre API courante est la bibliothèque Windows Sockets (WinSock) pour les systèmes d'exploitation Microsoft. Par rapport à d'autres technologies informatiques, les API de socket sont matures. WinSock est utilisé depuis 1993 et les sockets Berkeley depuis 1982.
Les API de socket sont relativement petites et simples. De nombreuses fonctions sont similaires à celles utilisées dans les routines d'entrée/sortie de fichiers telles que lire(), écrivez(), et proche(). Les appels de fonction réels à utiliser dépendent du langage de programmation et de la bibliothèque de sockets choisis.
Types d'interface de socket
Les interfaces de socket peuvent être divisées en trois catégories:
- Prises de flux: C'est le type le plus courant. Les deux parties communicantes établissent d'abord une connexion socket, après quoi toutes les données transitant par cette connexion est garantie d'arriver dans le même ordre dans lequel elle a été envoyée (en utilisant une programmation orientée connexion maquette).
- sockets de datagramme: offre une sémantique sans connexion. Avec les datagrammes, les connexions sont implicites plutôt qu'explicites comme avec les flux. Chaque partie envoie des datagrammes selon les besoins et attend que l'autre réponde. Les messages peuvent être perdus lors de la transmission ou reçus dans le désordre; l'application traite ces problèmes, pas les sockets. L'implémentation de sockets de datagramme peut donner à certaines applications une amélioration des performances et une flexibilité supplémentaire par rapport à l'utilisation de sockets de flux.
- Prises brutes: Contournez la prise en charge intégrée de la bibliothèque pour les protocoles standard tels que TCP et UDP. Les sockets bruts sont utilisés pour le développement de protocoles de bas niveau personnalisés.
Prise en charge des sockets dans les protocoles réseau
Les sockets réseau modernes sont généralement utilisés en conjonction avec les protocoles Internet IP, TCP et UDP. Les bibliothèques qui implémentent des sockets pour le protocole Internet utilisent TCP pour les flux, UDP pour les datagrammes et IP pour les sockets bruts.
Pour communiquer sur Internet, les bibliothèques de sockets IP utilisent le adresse IP pour identifier des ordinateurs spécifiques. De nombreuses parties d'Internet fonctionnent avec des services de nommage, de sorte que les utilisateurs et les programmeurs de sockets peuvent travailler avec ordinateurs par nom (par exemple, thiscomputer.wireless.lifewire.com) au lieu de par adresse (par exemple, 208.185.127.40).
Les sockets de flux et de datagrammes utilisent également IP numéros de port pour distinguer plusieurs applications les unes des autres. Par exemple, les navigateurs Web sur Internet savent utiliser le port 80 par défaut pour les communications socket avec les serveurs Web.