1. Chapitre 3 : Généralités sur les sockets
1- Qu'est-ce qu'un Socket
Un socket est une abstraction logicielle qui permet à deux applications de
communiquer sur une connexion réseau. Il fournit une interface de
communication entre deux ordinateurs afin qu'ils puissent envoyer et recevoir des
données. Essentiellement, un socket agit comme un conduit par lequel les données
peuvent être envoyées et reçues sur un réseau.
C’est une interface de communication introduite par les systèmes Unix pour la
communication réseau. Il s’agit d’un point d’accès aux services de la couche
transport, c’est-à-dire TCP ou UDP. La communication par sockets sur un réseau
adopte généralement un modèle client-serveur ; en d’autres termes pour
communiquer il faut créer un serveur prêt à recevoir les requêtes d’un client.
Dans tous les cas, avant d’utiliser une socket il faut la créer, c’est-à-dire créer un
descripteur associé à l’ensemble des informations constituant la socket (buffers,
adresse, port, état, etc.). Ensuite il est éventuellement possible de l’attacher à une
adresse représentant la provenance des messages envoyés.
Pile TCP/IP et liaison entre application et connexion TCP : l’API socket
2. NB : Pour programmer une application client-serveur, il est commode d’utiliser
les sockets. Les sockets fournissent une interface qui permet d’utiliser facilement
les protocoles de transport tels que TCP et UDP. Une socket est simplement un
moyen de désigner l’extrémité d’un canal de communication bidirectionnel, côté
client ou serveur, en l’associant à un port. Une fois le canal de communication
établi entre processus client et serveur, ceux-ci peuvent communiquer en utilisant
les mêmes primitives que pour l’accès aux fichiers/tubes.
Les sockets fournissent une interface d’accès, à partir d’un hôte, aux interfaces
de transport, notamment TCP et UDP.
Un socket TCP/IP est un point de terminaison pour la communication entre deux
ordinateurs sur un réseau. Il s'agit d'un identifiant unique qui représente une
connexion spécifique entre deux ordinateurs. Un socket est généralement associé
à un numéro de port qui identifie le type de trafic qui passe par le socket.
2- Quels sont les trois types de sockets ?
Il existe trois types de sockets :
1. Les sockets de flux - fournissent une connexion fiable en duplex intégral entre
deux ordinateurs. Les sockets de flux sont fiables et peuvent être utilisés pour
établir une connexion entre deux applications.
2. Les sockets de datagramme - fournissent un service sans connexion et non
fiable. Les sockets datagrammes ne sont pas fiables, mais sont utiles pour envoyer
des données rapidement entre deux applications.
3. Sockets bruts - fournissent un accès direct aux protocoles réseau sous-jacents.
3- L'API
L'API de socket est une interface de programmation d'application (API) qui
fournit des fonctions pour créer et manipuler des sockets. Elle fournit les outils
nécessaires aux applications pour communiquer sur un réseau.
3. Les adresses de sockets sont les identifiants uniques des sockets. Elles sont
typiquement composées d'une adresse IP et d'un numéro de port, qui sont utilisés
pour identifier de manière unique un socket.
La programmation de sockets est le processus d'écriture de programmes qui
utilisent des sockets pour communiquer sur un réseau. La programmation de
sockets est un composant majeur de la programmation réseau, et est nécessaire
pour que les applications puissent communiquer sur un réseau.
4- Les avantages de la programmation par sockets
La programmation par sockets fournit un moyen de communiquer facilement
entre deux applications, et peut être utilisée pour créer des applications
distribuées. Elle permet également la communication entre deux ordinateurs
géographiquement séparés et peut être utilisée pour créer des applications qui
peuvent s'adapter à un grand nombre d'utilisateurs.
5- Défis de la programmation Socket
La programmation Socket peut être difficile à apprendre, car elle nécessite la
connaissance des protocoles réseau sous-jacents. De plus, la programmation par
socket est souvent plus complexe que d'autres types de programmation et peut être
sujette à des erreurs.
6- Sécurité des sockets
La sécurité des sockets est une considération importante lors de la programmation
des sockets. Il est important de s'assurer que toutes les données envoyées ou
reçues sur un socket sont sécurisées, et que toute communication est cryptée.
7- Bibliothèques de socket
Les bibliothèques de sockets sont des collections de fonctions qui fournissent un
moyen plus facile de réaliser la programmation de sockets. Ces bibliothèques
4. fournissent généralement des fonctions pour créer, manipuler et envoyer des
données sur des sockets.
Dans l'ensemble, les sockets sont un outil important pour la programmation
réseau, et sont essentiels pour que les applications puissent communiquer sur un
réseau. La programmation de sockets peut être difficile, mais elle est facilitée par
l'utilisation de bibliothèques de sockets, et il est important de s'assurer que toutes
les données envoyées ou reçues sur un socket sont sécurisées.
8- A quoi sert un socket ?
Un socket est un point de terminaison de communication qui est utilisé pour
envoyer et recevoir des données. C'est un canal de communication de bas niveau
qui est utilisé par les programmes pour échanger des données.
Quelle est la différence entre un plug et un socket ?
Une fiche est un dispositif qui connecte un appareil électrique à une source
d'alimentation, tandis qu'une prise est un dispositif qui fournit une source
d'alimentation à un appareil électrique.
9- Quels sont les deux types de prises ?
Il existe deux types de prises : La prise Internet et la prise Unix. La prise Internet
est le type le plus courant et est utilisée pour se connecter à un serveur sur Internet.
Le socket Unix est utilisé pour se connecter à un serveur sur un réseau local.
10- Le système d'exploitation prend en charge l'ensemble de sockets de
base suivant:
Article Description
SOCK_DGRAM
Fournit des datagrammes, qui sont des messages sans connexion d'une
longueur maximale fixe. Ce type de socket est généralement utilisé pour
les messages courts, tels qu'un serveur de noms ou un serveur de temps,
car l'ordre et la fiabilité de la distribution des messages ne sont pas
garantis.
5. Article Description
Dans le domaine UNIX, le type de socket SOCK_DGRAM est similaire à une
file d'attente de messages. Dans le domaine Internet, le type de
socket SOCK_DGRAM est implémenté sur le protocole User Datagram
Protocol/Internet Protocol (UDP/IP).
Un socket datagram prend en charge le flux bidirectionnel de données, qui
n'est pas séquencé, fiable ou non dupliqué. Un processus recevant des
messages sur un socket de datagramme peut trouver des messages en
double ou dans un ordre différent de celui envoyé. Toutefois, les limites
d'enregistrement dans les données sont conservées. Les sockets de
datagramme modélisent de près les fonctionnalités trouvées dans de
nombreux réseaux à commutation de paquets contemporains.
SOCK_STREAM
Fournit des flux d'octets séquencés bidirectionnels avec un mécanisme de
transmission pour les données de flux. Ce type de socket transmet des
données de manière fiable, dans l'ordre et avec des capacités hors bande.
Dans le domaine UNIX, le type de socket SOCK_STREAM fonctionne
comme un canal de communication. Dans le domaine Internet, le type de
socket SOCK_STREAM est implémenté sur le protocole TCP/IP
(Transmission Control Protocol/Internet Protocol ).
Un socket de flux fournit le flux de données bidirectionnel, fiable, séquencé
et non dupliqué sans limites d'enregistrement. Outre la bidirectionnalité
du flux de données, une paire de sockets de flux connectés fournit une
interface presque identique aux canaux.
SOCK_RAW
Permet d'accéder à des protocoles et à des interfaces de réseau internes.
Ce type de socket est disponible uniquement pour les utilisateurs
disposant de droits utilisateur root ou pour les utilisateurs non root
disposant de la fonction CAP_NUMA_ATTACH . (Pour l'accès au socket
brut non root, la commande chuser affecte la
fonction CAP_NUMA_ATTACH , ainsi que CAP_PROPAGATE. Pour plus
d'informations, reportez-vous à la commande chuser .)
Les sockets bruts permettent à une application d'avoir un accès direct à
des protocoles de communication de niveau inférieur. Les sockets bruts
sont destinés aux utilisateurs avancés qui souhaitent tirer parti de
certaines fonctions de protocole qui ne sont pas directement accessibles
6. Article Description
via une interface normale ou qui souhaitent créer de nouveaux protocoles
en plus des protocoles de bas niveau existants.
Les sockets bruts sont normalement orientés datagramme, bien que leurs
caractéristiques exactes dépendent de l'interface fournie par le protocole.
SOCK_SEQPACKET
Fournit un flux d'informations séquencé,
fiable et non dupliqué.
SOCK_CONN_DGRAM
Fournit un service de datagramme orienté connexion. Ce type de socket
prend en charge le flux bidirectionnel de données, qui est séquencé et non
dupliqué, mais qui n'est pas fiable. Etant donné qu'il s'agit d'un service
orienté connexion, le socket doit être connecté avant le transfert de
données. Actuellement, seul le protocole ATM (Asynchronous Transfer
Mode) du domaine NDD (Network Device Driver) prend en charge ce type
de socket.
Les types de socket SOCK_DGRAM et SOCK_RAW permettent à un programme
d'application d'envoyer des datagrammes à des correspondants nommés dans les sous-
routines send . Les programmes d'application peuvent recevoir des datagrammes via des
sockets à l'aide des sous-routines recv . Le paramètre Protocole est important lorsque
vous utilisez le type de socket SOCK_RAW pour communiquer avec des protocoles de bas
niveau ou des interfaces matérielles. Le programme d'application doit spécifier la famille
d'adresses dans laquelle la communication a lieu.
Les types de socket SOCK_STREAM sont des flux d'octets en duplex intégral. Un socket
de flux doit être connecté pour que des données puissent être envoyées ou reçues. Lors
de l'utilisation d'un socket de flux pour le transfert de données, un programme
d'application doit exécuter la séquence suivante:
1. Créez une connexion à un autre socket avec la sous-routine connect .
2. Utilisez les sous-routines read et write ou les sous-routines send et recv pour
transférer des données.
3. Utilisez la sous-routine close pour terminer la session.
Un programme d'application peut utiliser les sous-routines send et recv pour gérer les
données hors bande.
Les protocoles de communication SOCK_STREAM sont conçus pour éviter la perte ou la
duplication de données. Si un élément de données pour lequel le protocole homologue
7. dispose d'un espace tampon ne peut pas être transmis dans un délai raisonnable, la
connexion est interrompue. Lorsque cela se produit, la sous-routine socket indique une
erreur avec une valeur de retour de -1 et la variable globale errno est définie
sur ETIMEDOUT. Si un processus est envoyé sur un flux interrompu, un
signal SIGPIPE est émis. Processus qui ne peuvent pas traiter l'arrêt du signal. Lorsque
des données hors bande arrivent sur un socket, un signal SIGURG est envoyé au groupe
de processus.
Le groupe de processus associé à un socket peut être lu ou défini par l'opération
ioctl SIOCGPGRP ou SIOCSPGRP . Pour recevoir un signal sur des données, utilisez les
opérations ioctl SIOCSPGRP et FIOASYNC . Ces opérations sont définies dans le
fichier sys/ioctl.h .