Movatterモバイル変換


[0]ホーム

URL:


Aller au contenu
Wikipédial'encyclopédie libre
Rechercher

Berkeley sockets

Un article de Wikipédia, l'encyclopédie libre.

Berkeley Sockets Interface ou simplementsockets, est unensemble normalisé de fonctions de communication lancé par l'université de Berkeley au début des années 1980 pour leurBerkeley Software Distribution (abr.BSD). 30 ans après son lancement, cetteinterface de programmation est proposée dans quasiment tous leslangages de programmation populaires (Java,C#,C++, etc.)[1].

La notion sur laquelle est construite cette interface sont lessockets (en français « interfaces de connexion » mais aussi « ports,points de connexion,connecteurs logiciels »)[2],[3] par lesquelles une application peut se brancher à unréseau et communiquer ainsi avec une autre application branchée depuis un autre ordinateur.

Fonctionnalités

[modifier |modifier le code]

Unsocket représente uneprise par laquelle une application peut envoyer et recevoir des données. Cette prise permet à l'application de se brancher sur un réseau et communiquer avec d'autres applications qui y sont branchées. Les informations écrites sur une prise depuis une machine sont lues sur la prise d'une autre machine, et inversement. Il existe différents modèles de prises, en fonction desprotocoles réseau; le plus fréquent sont lessocketTCP/IP[4]. La première interface de programmation (anglaisAPI pourapplication programming interface) mettant en œuvre lessocket a été développée par l'université de Berkeley pour leur Unix, dans les années 1980. C'est un des premiers produitsopen source de l'histoire[4].

La fonctionsocket de cette API sert à créer un certain type de prise. Le type de prise sera choisi en fonction de la technologie de communication à utiliser (par exempleTCP/IP). L'API permet à un logiciel serveur de servir plusieurs clients simultanément.

Une connexion est établie entre le client et le serveur en vue de permettre la communication. La fonctionconnect permet à un client de demander la connexion à un serveur, et la fonctionaccept permet à un serveur d'accepter cette connexion. Le programme serveur utilisera préalablement la fonctionlisten pour informer lelogiciel sous-jacent qu'il est prêt à recevoir des connexions. Une fonctionclose permet de terminer la connexion. Lorsqu'un des deux interlocuteurs termine la connexion, l'autre est immédiatement avisé[5].

Une fois la connexion établie, les fonctionssend etrecv servent respectivement à envoyer et à recevoir des informations. Une fonction auxiliairegethostbyname permet d'obtenir l'adresse IP d'une machine en interrogeant leDNS, adresse qui sera utilisée par d'autres fonctions de l'API[5].

Chaque socket possède untype et un ou plusieurs processus qui lui sont associés. Il est également caractérisé par ledomaine de communication dans lequel il se trouve. Ce dernier est une abstraction qui permet de regrouper les processus ayant des propriétés communes et communiquant par l'intermédiaire de sockets. Normalement, un socket ne peut échanger des données qu'avec un socket se trouvant dans le même domaine de communication.

La communication inter-processus de 4.3BSD supportait trois domaines de communication :

  • ledomaineUnix dans lequel deux processus se trouvant sur la même station Unix uniquement peuvent communiquer[6] ;
  • ledomaineInternet pour les processus utilisant le protocoleTCP/IP pour communiquer entre eux ;
  • ledomaine NS pour les processus échangeant des données en utilisant le protocole standard deXerox.

Types de sockets

[modifier |modifier le code]
Cette sectionne cite pas suffisamment ses sources (décembre 2016)
Pour l'améliorer, ajoutezdes références de qualité et vérifiables (comment faire ?) ou le modèle{{Référence nécessaire}} sur les passages nécessitant une source.

Les différents types de sockets dépendent de quelques propriétés visibles par le programmeur. Rien n'empêche deux sockets de types différents de communiquer entre eux si le protocole utilisé le supporte — même si les processus sont supposés communiquer uniquement par des sockets de même type.

Il existe généralement quatre types de sockets :

  • Un socketstream permet une communication bidirectionnelle, sûre, séquencée et un flux de données sans duplication pouvant entraîner une fragmentation des paquets transmis. Dans le domaine Internet, il s'agit du protocole TCP.
  • Un socketdatagram permet une communication bidirectionnelle qui n'est pas séquencée, pas sûre, et peut éventuellement entraîner une duplication des données. Un processus utilisant ce type de socket peut donc recevoir les données dans un ordre différent de l'ordre de départ. Dans le domaine Internet, il s'agit du protocole UDP.
  • Un socketraw permet d'accéder au contenu brut des paquets de données. Lessockets raw ne sont pas destinés aux utilisateurs courants — seul l'utilisateur root peut y avoir accès sur la plupart des systèmes UNIX — et sont utilisés par exemple pour analyser le trafic d'un réseau.
  • Un socketsequenced packet, qui ressemble à un socketstream sauf qu'il n'utilise pas de fragmentations de paquets.

Socket réseau

[modifier |modifier le code]
Cette sectionne cite pas suffisamment ses sources (décembre 2016)
Pour l'améliorer, ajoutezdes références de qualité et vérifiables (comment faire ?) ou le modèle{{Référence nécessaire}} sur les passages nécessitant une source.

Les sockets réseau sont utilisés pour communiquer avec des services hébergés sur d'autres machines (site web,imprimante réseau, ...). Ils sont utilisés dans le cadre d'une communicationIP. Selon la manière dont ils sont configurés, ils peuvent émettre et recevoir des messages vers et depuis plusieurs ordinateurs sur le même réseau (lemulticast).

Un socket réseau se caractérise par la combinaison des éléments suivants :

  • Adresse locale : Coordonnées du socket pour les autres ordinateurs, il s'agit en général d'uneadresse IP et d'unnuméro de port. Ce numéro de port permet au système d'exploitation de rediriger les paquets entrant vers le bon programme (navigateur web, ...). L'adresse locale est définie à l'aide de la fonctionbind.
  • Adresse distant : Analogue à l'adresse locale pour l'ordinateur distant. Cette fois, le numéro de port sera en général un desports connus (80 pourHTTP, ...).
  • Un protocole de lacouche réseau (IPv4,IPv6, ...), il définit comment est adressé le réseau et le routage des paquets.
  • Un protocole de lacouche transport (TCP,UDP, ...), il définit comment sont échangés les données. Certains commeTCP impose l'établissement d'une connexion et vérifie l'acheminent des paquets. D'autres commeUDP envoie juste le paquet sans garantir son acheminement, ni l'établissement d'une connexion.

Socket UNIX

[modifier |modifier le code]

Les sockets du domaineUNIX sont un moyen decommunication inter-processus utilisant lesystème de fichiers commeespace de nommage[7]. Ils rendent l'accès à un même service (DBus,X.org, ...) pour plusieurs clients plus facile qu'avec de simplestubes nommés. La communication se produit entièrement dans lenoyau du système d'exploitation.

Il est possible de réguler l'accès à ces sockets à l'aide despermissions UNIX (un socket du domaine UNIX reste uninode dans lesystème de fichiers). Le serveur peut également déterminer l'UID des programmes qui se connectent[8], permettant de réaliser uneauthentification sans mot de passe[9].

En plus d'envoyer des données, ces processus peuvent envoyer desdescripteurs de fichiers sur un socket du domaine UNIX à l'aide des API « sendmsg » et « recvmsg »[10].

Socket raw

[modifier |modifier le code]

Les socketsraw reçoivent les paquets bruts avec leur en-tête, et elles n'ajoutent automatiquement un en-tête lorsque l'on envoie les paquets que si on le demande dans une option de la socket. Une utilisation possible des socketsraw est de développer de nouveaux protocoles de couche transport enespace utilisateur[11].

Les socketsraw sont nécessaires aux protocoles qui sont directement encapsulés dansIP, sans passer parTCP niUDP. On peut par exemple citer le protocole de gestion de groupes de multidiffusionIGMP, le protocole de routage dynamiqueOSPF, ainsi que le protocoleICMP utilisé par la commandeping

Enfin, on peut s'en servir pour créer des paquets TCP ou UDP inhabituels. En particulier, un pirate informatique pourra contrefaire des paquets dans l'intention de nuire ou de s'introduire dans un système (voir plus bas).

Les sockets raw, un outil de piratage ?

[modifier |modifier le code]

QuandMicrosoft a publiéWindows XP en 2001, l'interfaceWinsock prenait en charge les socketsraw. La presse a alors critiqué Microsoft, en affirmant que les socketsraw n'étaient utilisées que par despirates pour fabriquer de toutes pièces des paquets trafiqués. Ceux-ci peuvent ainsi par exemple lancer des attaques de réinitialisation des connexionsTCP en cours, en créant des segments TCP contenant le bit RST (reset). Trois ans plus tard, Microsoft a, sans l'annoncer, limité la prise en charge des socketsraw par Winsock dans unpatch qui ne pouvait pas être retiré et n'a pas offert d'assistance ou proposé de contournements aux applications qui les utilisaient[12].

On peut s'interroger sur l'opportunité de mettre ainsi des bâtons dans les roues des pirates, sachant qu'un informaticien déterminé trouvera toujours le moyen de « forger » (contrefaire) des paquets. De fait, il n'a fallu que quelques jours pour qu'un « correctif » auhotfix de Microsoft apparaisse[13]. Les paquets réseau ne sont en effet jamais que des suites arbitraires d'octets, le vrai problème des attaques de type RST se niche dans le protocole TCP lui-même et pas dans le moyen pratique de contrefaire les paquets, socketraw ou autre.

Par ailleurs, il existe des utilisations légitimes de certains paquets « forgés », même dans le cas d'un paquet TCP ayant le bit RST. Le mécanisme d'équilibrage de charge des serveurs de Yahoo! et deGoogle s'en sert, par exemple[14].

Notes et références

[modifier |modifier le code]
  1. (en) Jean J. Labrosse; Jack G Ganssle; Robert Oshana; et Colin Walls;Embedded Software: Know It All, Elsevier, 2008,(ISBN 9780750685832)
  2. « Le Grand Dictionnaire terminologique », surwww.granddictionnaire.com(consulté le)
  3. « Termium », surwww.btb.termiumplus.gc.ca(consulté le)
  4. a etb(en) Michael J. Donahoo; Kenneth L. Calvert;TCP/IP Sockets in C: Practical Guide for Programmers, Morgan Kaufmann, 2009,(ISBN 9780123745408)
  5. a etbM. Tim Jones;Gnu/Linux Application Programming, Cengage Learning, 2005,(ISBN 9781584503712)
  6. Les processus communiquant viaNFS ne font pas partie de ce domaine.
  7. (en) « unix(7) - Linux man page », surlinux.die.net(consulté le)
  8. (en) « 16.3. UNIX domain socket authentication », surdocs.fedoraproject.org(consulté le)
  9. (en) « Authentication Plugin - Unix Socket », surMariaDB KnowledgeBase(consulté le)
  10. (en) « Section 17.4.  Passing File Descriptors », surpoincare.matf.bg.ac.rs(consulté le)
  11. (en)Linux man page raw(7)
  12. (en)Microsoft Tightens the Noose on Raw Sockets, 23 avril 2005
  13. (en) Neeharika Buddha;Denial of Service attack, 22 octobre 2009
  14. (en) Nicholas Weaver; Robin Sommer; et Vern Paxson;Detecting Forged TCP Reset Packets, 23 février 2009

Annexes

[modifier |modifier le code]

Articles connexes

[modifier |modifier le code]

Liens externes

[modifier |modifier le code]
Ce document provient de « https://fr.wikipedia.org/w/index.php?title=Berkeley_sockets&oldid=226471260 ».
Catégories :
Catégories cachées :

[8]ページ先頭

©2009-2026 Movatter.jp