Вы находитесь на странице: 1из 17

M3101 · Principes des systèmes d’exploitation

Les sockets

IUT d’Orsay · DUT Informatique · 2015 / 2016


Les sockets

Une interface de communication bidirectionnelle entre les processus


I résidant dans le même système (domaine Unix)

I résidant dans des systèmes distants (domaine Internet)

I manipulés à l’aide de descripteurs de fichiers

Sockets datagramme « boîte aux lettres »


I échange de messages individuels
I pas de connexion
I UDP : pas de garantie de réception, ni d’ordre

Sockets stream « appel téléphonique »


I échange de flux de données
I nécessite une connexion
I TCP : assure la réception dans le bon ordre

2 / 17
Communication via les sockets datagramme

Client Serveur
Créer la socket Créer la socket
sclient = socket(...) sserveur = socket(...)

Attacher la socket à une adresse


bind(sserveur,...)

Communiquer Communiquer
sendto(sclient,...) recvfrom(sserveur,...)
recvfrom(sclient,...) sendto(sserveur,...)

Fermer la socket Fermer la socket


close(sclient) close(sserveur)

3 / 17
Communication via les sockets stream
Client Serveur
Créer la socket Créer la socket
sclient = socket(...) secoute = socket(...)
Attacher la socket à une adresse
bind(secoute,...)
Passer la socket en mode écoute
listen(secoute,...)
Demander une connexion Accepter une connexion
connect(sclient,...) sservice = accept(secoute,...)
Communiquer Communiquer
write(sclient,...) read(sservice,...)
read(sclient,...) write(sservice,...)
Fermer la connexion Fermer la connexion
shutdown(sclient,...) shutdown(sservice,...)
close(sclient) close(sservice)
Fermer la socket d’écoute
close(secoute)

4 / 17
Créer une socket

int socket(int domaine, int type, int protocole);

domaine portée de communication


I AF_UNIX ou AF_LOCAL — dans le même système
I AF_INET ou AF_INET6 — via les réseaux Internet

type type de communication


I SOCK_DGRAM — sockets datagramme
I SOCK_STREAM — sockets stream

protocol protocole de communication


I 0 — valeur par défaut

Renvoie le descripteur de la nouvelle socket ou −1 en cas d’erreur

5 / 17
Attacher la socket à une adresse
Nécessaire pour les serveurs, possible pour les clients

int bind(
int sockfd, /* descripteur de la socket */
struct sockaddr* adresse, /* pointeur vers l’adresse */
socklen_t longueur_adresse); /* longueur de l’adresse */

Le type réel d’adresse varie selon le domaine de la socket


I AF_UNIX — struct sockaddr_un — nom d’un fichier
I AF_INET — struct sockaddr_in — adresse IPv4 + port
I AF_INET6 — struct sockaddr_in6 — adresse IPv6 + port

Conversion de types (type casting) est nécessaire au moment de l’appel

Renvoie 0 en cas de succès et −1 en cas d’erreur


I par exemple, si le port demandé est déjà utilisé

6 / 17
La structure d’adresse AF_INET

struct sockaddr_in {
unsigned short sin_family; /* domaine : AF_INET */
uint16_t sin_port; /* numéro de port */
struct in addr sin_addr; }
_ /* structure d’adresse IP */

struct in_addr {
uint32_t s_addr; } /* adresse IPv4 sur 32 bit */

Adresse et port sont stockés en format réseau (network byte order ) : XXxx
Également, toutes données numériques sont transmises en format réseau

Les nombres entiers sont en format hôte (host byte order ) : xxXX ou XXxx

La traduction est nécessaire :


ntohs() network-to-host 16 bit htons() host-to-network 16 bit
ntohl() network-to-host 32 bit htonl() host-to-network 32 bit

7 / 17
Attacher la socket à une adresse

unsigned short port = 80; // par exemple HTTP


struct sockaddr_in addr = {0}; // initialiser à zéro
addr.sin_family = AF_INET; // domaine IPv4
addr.sin_port = htons(port); // port en format réseau
addr.sin_addr.s_addr = htonl(INADDR_ANY); // toute
// adresse locale

int se = socket(AF_INET, SOCK_STREAM, 0); // socket d’écoute


if (se == -1) { perror("error socket()"); exit(1); }

int ok = bind(se, (struct sockaddr*) &addr, sizeof(addr));


if (ok == -1) { perror("error bind()"); exit(1); }

INADDR_ANY — attacher la socket à toutes les interfaces réseau locales

8 / 17
Passer la socket en mode écoute

Sockets stream côté serveur :

int listen(int sockfd, int nbPendants);

sockfd descripteur de la socket d’écoute

nbPendants nombre maximal de demandes en attente d’acceptation

Renvoie 0 en cas de succès et −1 en cas d’erreur

9 / 17
Demander une connexion
Sockets stream côté client :

int connect(
int sockfd, /* descripteur de la socket */
struct sockaddr* adresse, /* pointeur vers l’adresse */
socklen_t longueur_adresse); /* longueur de l’adresse */

Le type réel d’adresse varie selon le domaine de la socket


Conversion de types (type casting) est nécessaire au moment de l’appel

Appel bloquant : connect() attend la réponse du serveur


I la demande de connexion acceptée par le serveur — renvoie 0

I la demande refusée ou le délai maximum dépassé — renvoie −1

TCP : un paquet SYN est envoyé au serveur distant

10 / 17
Demander une connexion

unsigned short port = 80; // par exemple HTTP


struct sockaddr_in addr = {0}; // initialiser à zéro
addr.sin_family = AF_INET; // domaine IPv4
addr.sin_port = htons(port); // port en format réseau
addr.sin_addr.s_addr = inet_addr("127.0.0.1"); // par exemple
// localhost

int sc = socket(AF_INET, SOCK_STREAM, 0); // socket de client


if (sc == -1) { perror("error socket()"); exit(1); }

int ok = connect(sc, (struct sockaddr*) &addr, sizeof(addr));


if (ok == -1) { perror("error bind()"); exit(1); }

uint32_t inet_addr(char *adresse) — chaîne vers adresse IP

11 / 17
Accepter une demande de connexion

Sockets stream côté serveur :

int accept(
int sockfd, /* descripteur de la socket */
struct sockaddr* adresse, /* pointeur vers l’adresse */
socklen_t* longueur_adresse); /* pointeur vers la longueur */

Écrit l’adresse du client connecté dans *adresse


Si on ne s’y intéresse pas : accept(sockfd, NULL, NULL);

Appel bloquant : accept() attend une demande de connexion


Renvoie le descripteur de la nouvelle socket de service ou −1 si erreur

TCP : le noyau établit la connexion même si on n’appelle pas accept()


I finalisation du three-way handshake : SYN — SYN+ACK — ACK

I accept() renvoie les descripteurs pour les connexions établies

12 / 17
Recevoir des données — sockets stream

int read(int sockfd, const void *tampon, size_t nbOct);

Renvoie le nombre d’octets lus (6 nbOct) ou −1 en cas d’erreur


Les données lues disparaissent de la socket — il n’y pas de lseek()

Appel bloquant : si le tampon de réception est vide


⇒ read() attend l’arrivée de nouvelles données

Si la connexion est fermée ou semi-fermée (voir shutdown())


⇒ read() renvoie 0 (end-of-file)

13 / 17
Envoyer des données — sockets stream

int write(int sockfd, const void *tampon, size_t nbOct);

Renvoie le nombre d’octets envoyés ou −1 en cas d’erreur

Appel bloquant : si le tampon d’envoi est plein


⇒ write() attend que l’interlocuteur consomme les données envoyées

Si la connexion est fermée ou semi-fermée (voir shutdown())


⇒ le processus reçoit un signal SIGPIPE et write() renvoie −1

14 / 17
Recevoir des données — sockets datagramme

int recvfrom(
int sockfd, /* descripteur de la socket */
void* tampon, /* zone de réception */
size_t nbOct, /* taille max du message */
int drapeaux, /* défaut : 0 */
struct sockaddr* adresse, /* pointeur vers l’adresse */
socklen_t* longueur_adresse); /* pointeur vers la longueur */

Renvoie le nombre d’octets lus (6 nbOct) ou −1 en cas d’erreur

Si nbOct < la taille du message reçu


⇒ le reste du message est perdu

Appel bloquant : si le tampon de réception est vide


⇒ recvfrom() attend l’arrivée de nouveaux datagrammes

15 / 17
Envoyer des données — sockets datagramme

int sendto(
int sockfd, /* descripteur de la socket */
const void* tampon, /* adresse du message */
size_t nbOct, /* taille du message */
int drapeaux, /* défaut : 0 */
struct sockaddr* adresse, /* pointeur vers l’adresse */
socklen_t longueur_adresse); /* longueur de l’adresse */

Renvoie le nombre d’octets envoyés ou −1 en cas d’erreur

Appel bloquant : si le tampon d’envoi est plein


⇒ sendto() attend que le noyau décharge le tampon

16 / 17
Terminer la connexion
Sockets stream :

int shutdown(int sockfd, int sens);

sockfd descripteur de la socket


sens SHUT_RD — fermer en lecture
SHUT_WR — fermer en écriture
SHUT_RDWR — fermer dans les deux sens

Renvoie 0 en cas de succès et −1 en cas d’erreur

TCP : fermeture de connexion


I en lecture — le système répond par un paquet RST à tout octet reçu

I en écriture — le système envoie un paquet FIN à l’interlocuteur

Ne pas oublier de fermer le descripteur : close(sockfd);

17 / 17

Вам также может понравиться

  • QCM Securité Informatique
    QCM Securité Informatique
    Документ3 страницы
    QCM Securité Informatique
    Frustrados17
    73% (11)
  • Rapport de Stage - Réseaux Informatique
    Rapport de Stage - Réseaux Informatique
    Документ36 страниц
    Rapport de Stage - Réseaux Informatique
    haouati nessrine
    Оценок пока нет
  • SujetEvaluation2017 Correction
    SujetEvaluation2017 Correction
    Документ5 страниц
    SujetEvaluation2017 Correction
    Abdo Elmamoun
    100% (4)
  • Bilan La Digestion
    Bilan La Digestion
    Документ2 страницы
    Bilan La Digestion
    Abdo Elmamoun
    Оценок пока нет
  • Ccna 1
    Ccna 1
    Документ21 страница
    Ccna 1
    monsif ouatik
    100% (1)
  • Quelle Heure Est Il PDF
    Quelle Heure Est Il PDF
    Документ10 страниц
    Quelle Heure Est Il PDF
    Abdo Elmamoun
    Оценок пока нет
  • Imac1 HTML TD8 PDF
    Imac1 HTML TD8 PDF
    Документ7 страниц
    Imac1 HTML TD8 PDF
    Abdo Elmamoun
    Оценок пока нет
  • 2015 04 25 Ateliers Systemes 2
    2015 04 25 Ateliers Systemes 2
    Документ32 страницы
    2015 04 25 Ateliers Systemes 2
    Abdo Elmamoun
    Оценок пока нет
  • 104 3-Montage
    104 3-Montage
    Документ15 страниц
    104 3-Montage
    Abdo Elmamoun
    Оценок пока нет
  • Val Num Ration 1
    Val Num Ration 1
    Документ2 страницы
    Val Num Ration 1
    Abdo Elmamoun
    Оценок пока нет
  • UMLExe2 PDF
    UMLExe2 PDF
    Документ50 страниц
    UMLExe2 PDF
    Hildweig
    Оценок пока нет
  • TD1 HTML PDF
    TD1 HTML PDF
    Документ3 страницы
    TD1 HTML PDF
    Abdo Elmamoun
    Оценок пока нет
  • MPDF
    MPDF
    Документ10 страниц
    MPDF
    Abdo Elmamoun
    Оценок пока нет
  • Imac1 HTML TD8
    Imac1 HTML TD8
    Документ7 страниц
    Imac1 HTML TD8
    Abdo Elmamoun
    Оценок пока нет
  • (WWW - Clubetudiants.ma) Concours-Fst-Tanger-2016-Lsi-Langage-C-Et-Structure-De-Donnees
    (WWW - Clubetudiants.ma) Concours-Fst-Tanger-2016-Lsi-Langage-C-Et-Structure-De-Donnees
    Документ3 страницы
    (WWW - Clubetudiants.ma) Concours-Fst-Tanger-2016-Lsi-Langage-C-Et-Structure-De-Donnees
    Abdo Elmamoun
    100% (1)
  • TP HTML Css
    TP HTML Css
    Документ5 страниц
    TP HTML Css
    Abdo Elmamoun
    Оценок пока нет
  • TD Modulation Codage PDF
    TD Modulation Codage PDF
    Документ3 страницы
    TD Modulation Codage PDF
    Abdo Elmamoun
    Оценок пока нет
  • Active Directory Rabeh
    Active Directory Rabeh
    Документ3 страницы
    Active Directory Rabeh
    Abdo Elmamoun
    Оценок пока нет
  • Sujet 09 01 19
    Sujet 09 01 19
    Документ7 страниц
    Sujet 09 01 19
    Abdo Elmamoun
    Оценок пока нет
  • PDF
    PDF
    Документ6 страниц
    PDF
    Abdo Elmamoun
    Оценок пока нет
  • 2015 04 25 Chapitre 4 - Gestion de La MC
    2015 04 25 Chapitre 4 - Gestion de La MC
    Документ8 страниц
    2015 04 25 Chapitre 4 - Gestion de La MC
    Abdo Elmamoun
    Оценок пока нет
  • Web Tuto HediMagroun PDF
    Web Tuto HediMagroun PDF
    Документ9 страниц
    Web Tuto HediMagroun PDF
    Abdo Elmamoun
    Оценок пока нет
  • Graphique
    Graphique
    Документ2 страницы
    Graphique
    Abdo Elmamoun
    Оценок пока нет
  • TD1 HTML PDF
    TD1 HTML PDF
    Документ3 страницы
    TD1 HTML PDF
    Abdo Elmamoun
    Оценок пока нет
  • Support LPIC-101 OOo
    Support LPIC-101 OOo
    Документ97 страниц
    Support LPIC-101 OOo
    chaqif08
    Оценок пока нет
  • Val Num Ration 1
    Val Num Ration 1
    Документ2 страницы
    Val Num Ration 1
    Abdo Elmamoun
    Оценок пока нет
  • Donne Esr 01
    Donne Esr 01
    Документ9 страниц
    Donne Esr 01
    RICHI NINA
    Оценок пока нет
  • R Cours7
    R Cours7
    Документ37 страниц
    R Cours7
    Abdo Elmamoun
    Оценок пока нет
  • AdminRS Cours3 IOS
    AdminRS Cours3 IOS
    Документ27 страниц
    AdminRS Cours3 IOS
    Yahia Antar
    Оценок пока нет
  • UML Devoir
    UML Devoir
    Документ3 страницы
    UML Devoir
    loufy13
    0% (1)
  • correctionTD5Algo1 1 PDF
    correctionTD5Algo1 1 PDF
    Документ6 страниц
    correctionTD5Algo1 1 PDF
    ZAKAKA777
    Оценок пока нет
  • R TD1
    R TD1
    Документ19 страниц
    R TD1
    Abdo Elmamoun
    Оценок пока нет
  • Chapitre IV
    Chapitre IV
    Документ44 страницы
    Chapitre IV
    mofot72225
    Оценок пока нет
  • AdminRS Cours2 VLAN
    AdminRS Cours2 VLAN
    Документ27 страниц
    AdminRS Cours2 VLAN
    wafa
    Оценок пока нет
  • Oracle Net
    Oracle Net
    Документ15 страниц
    Oracle Net
    jupiter
    Оценок пока нет
  • Formation Cisco (Voir Partie 1) PDF
    Formation Cisco (Voir Partie 1) PDF
    Документ36 страниц
    Formation Cisco (Voir Partie 1) PDF
    Anonymous L6FSuR02
    100% (1)
  • Microsoft Word - Generalité Sur Les Reseau
    Microsoft Word - Generalité Sur Les Reseau
    Документ49 страниц
    Microsoft Word - Generalité Sur Les Reseau
    said amer yacine
    100% (1)
  • Res Mobiles Mbds Ch2bis23
    Res Mobiles Mbds Ch2bis23
    Документ124 страницы
    Res Mobiles Mbds Ch2bis23
    Atashi Tsunagu (“Albedo”)
    Оценок пока нет
  • Formation Cisco 640-802
    Formation Cisco 640-802
    Документ3 страницы
    Formation Cisco 640-802
    Erys Diabs
    Оценок пока нет
  • Accès Internet Pour Visiteurs
    Accès Internet Pour Visiteurs
    Документ9 страниц
    Accès Internet Pour Visiteurs
    ivoire net comput
    Оценок пока нет
  • Test RX 1
    Test RX 1
    Документ7 страниц
    Test RX 1
    jean louis
    Оценок пока нет
  • 7.2.2.5 Lab - Configuring Basic EIGRP For IPv4
    7.2.2.5 Lab - Configuring Basic EIGRP For IPv4
    Документ10 страниц
    7.2.2.5 Lab - Configuring Basic EIGRP For IPv4
    snoupi2
    Оценок пока нет
  • Correction Des Exos snt1
    Correction Des Exos snt1
    Документ2 страницы
    Correction Des Exos snt1
    mhamedsaadi.bachir
    Оценок пока нет
  • Systeme
    Systeme
    Документ37 страниц
    Systeme
    Esaie Guerson Lara
    Оценок пока нет
  • Formation R Seau N2 - Cours
    Formation R Seau N2 - Cours
    Документ26 страниц
    Formation R Seau N2 - Cours
    stevin_doc
    Оценок пока нет
  • Manipulez Les Paquets Reseau Avec Scapy
    Manipulez Les Paquets Reseau Avec Scapy
    Документ23 страницы
    Manipulez Les Paquets Reseau Avec Scapy
    ARSENE
    Оценок пока нет
  • ENSA Module 1
    ENSA Module 1
    Документ41 страница
    ENSA Module 1
    Sofien Kallal
    Оценок пока нет
  • Config IP
    Config IP
    Документ6 страниц
    Config IP
    Hybrid Teyory
    100% (1)
  • TP Cisco PDF
    TP Cisco PDF
    Документ5 страниц
    TP Cisco PDF
    Badr Eddine Tahir
    Оценок пока нет
  • TD3 Réseau Informatique SupportTran - 2019correct
    TD3 Réseau Informatique SupportTran - 2019correct
    Документ5 страниц
    TD3 Réseau Informatique SupportTran - 2019correct
    Wael Laataoui
    Оценок пока нет
  • Cours Téléphonie Sur IP
    Cours Téléphonie Sur IP
    Документ21 страница
    Cours Téléphonie Sur IP
    Cyr ruben
    Оценок пока нет
  • Commandes Ccna2
    Commandes Ccna2
    Документ72 страницы
    Commandes Ccna2
    Gregory Antoine
    Оценок пока нет
  • TP9 10
    TP9 10
    Документ23 страницы
    TP9 10
    Mariem Souissi
    Оценок пока нет
  • Cours VPN IPSec
    Cours VPN IPSec
    Документ47 страниц
    Cours VPN IPSec
    Safoine Gabtni
    Оценок пока нет
  • Exolab Decouverte Accesslistscisco-01
    Exolab Decouverte Accesslistscisco-01
    Документ25 страниц
    Exolab Decouverte Accesslistscisco-01
    api-563705744
    Оценок пока нет
  • UE-R&S Essentials
    UE-R&S Essentials
    Документ5 страниц
    UE-R&S Essentials
    PFE
    Оценок пока нет
  • Chapitre 1 RL TCPIP
    Chapitre 1 RL TCPIP
    Документ26 страниц
    Chapitre 1 RL TCPIP
    Ibtì Ssëm Limem
    Оценок пока нет
  • Solutions Exercices VoIP IPv6 PDF
    Solutions Exercices VoIP IPv6 PDF
    Документ13 страниц
    Solutions Exercices VoIP IPv6 PDF
    Francky Manfo
    Оценок пока нет
  • Configurer Un Routeur Avec FREE - Myb
    Configurer Un Routeur Avec FREE - Myb
    Документ4 страницы
    Configurer Un Routeur Avec FREE - Myb
    Syno WebCam
    Оценок пока нет