Académique Documents
Professionnel Documents
Culture Documents
Protocole Application Application Sockets 4 3 2 1 Transport Rseau Liaison Physique Protocole de Transport TCP-UDP Application Sockets Transport
P. Sicard-Cours Rseaux
Les Sockets
Principes
Socket : tymologie: prise (de courant,...) Interface des sockets: librairies de primitives (fonctions/ procdures) daccs aux deux protocoles transport dInternet : TCP et UDP Dveloppe par luniversit de Berkeley (on parle de Berkeley Socket Interface) Disponible dans diffrents langages (C, Java ...)
Rfrences
Livres ! J. M. Rifet, J.-B. Yuns. Unix - Programmation et Communication, Dunod (2003), chap. 19 R. Stevens. Unix Network Programming. Prentice-Hall. Web ! http://www.eng.auburn.edu/department/cse/classes/cse605/ examples/index.html http://www.scit.wlv.ac.uk/~jphb/comms/sockets.html man de Unix
P. Sicard-Cours Rseaux
Les Sockets
- ssh kernighan.imag.fr
- On lance le client en lui donnant le nom DNS ou ladresse Internet du serveur connecter - Lapplication consulte lannuaire DNS : kernighan.imag.fr ->195.221.225.6 - Elle demande une connexion avec la socket du serveur (195.221.225.6, 22) - La socket ct client est (192.1.1.2, 3400) : numro de port libre ce moment sur la machine o tourne le client (192.1.1.2)
(192.1.1.2, 3400)
(195.221.225.6, 22)
Rseau
Une fois la communication tablie, le ux de donne peut tre bi-directionnel La communication est identie par le quadruplet:
- (adresse IP source, port source, adresse IP destination port destination)
P. Sicard-Cours Rseaux Les Sockets 6
Numros et annuaires
Identication dun point daccs laide du couple: - Une adresse Internet: identie la machine dans le rseau - Un numro de port: identie lapplication sur la machine Annuaires disponibles: - Local Nom/adresses internet: chier systme sur la machine (/etc/hosts) - Global Nom/adresses internet: le DNS (Domain Name System) Distribu Client et serveur DNS - Local Application/numro de port : chier systme sur la machine (/etc/ services) Numro de port attribus aux applications standards (rservs < 1024) Ceux sont les numros de port des sockets des serveurs, on parle aussi de service
P. Sicard-Cours Rseaux Les Sockets 7
Accs lannuaire
La recherche dans lannuaire local ou le DNS peut tre dni dans un chier systme: /etc/host.conf sous free-BSD Rcupration de ladresse partir du nom - struct hostent *gethostbyname (char *nom)
- retourne un pointeur sur une structure contenant les adresses Internet correspondant au nom
Rcupration du numro de port partir du nom du service (donn dans /etc/services) - struct servent *getservbyname(char *nom, char *protocole)
- retourne un pointeur sur une structure contenant le numro de port correspondant au nom et au protocole associ
P. Sicard-Cours Rseaux
Les Sockets
Rcupration dun numro de port allou dynamiquement - int getsockname(int socket, struct sockaddr_in *p_ad_s, int *len)
- *len doit contenir la longueur de la structure sockaddr_in, attention cest un paramtre donne/rsultat
P. Sicard-Cours Rseaux Les Sockets 9
domaine:
- AF-INET : prise Rseau Internet - PF-INET : prise pour utilisation locale (interne la machine entre processus)
mode:
- SOCK_STREAM (pour TCP), SOCK_DGRAM (pour UDP), SOCK_RAW (pour IP)
protocole:
- associ au mode (IPPROTO_UDP, IPPROTO_TCP, IPPROTO_RAW, IPPROTO_ICMP)
P. Sicard-Cours Rseaux Les Sockets 10
Structure sockaddr_in
- A remplir avant lappel de bind - struct sockaddr_in
{
short sin_family;
/* famille dadresse*/ ushort sin_port;
/* numro de port */ ulong sin_addr;
/* adresse de niveau 3: IP*/ char sin_zero [8];
/* inutilis (mis zro) */ }
P. Sicard-Cours Rseaux Les Sockets
11
Numros spciaux
Il est possible de laisser au systme le choix dun numro de port libre au moment de lappel la fonction bind
- Cest intressant dans le cas dun client - Il suft de mettre dans la structure sockaddr_in le champ sin_port 0
Il est possible dassocier une socket lensemble des adresses IP de la machine dans le cas o elle est connecte plusieurs rseaux Cela permet dans le cas dun serveur dtre accessible via ces diffrents rseaux
- Il suft de remplir dans la structure sockaddr_in le champ sin_addr par la constante INADDR_ANY
P. Sicard-Cours Rseaux Les Sockets
12
Identicateur: 3
Identicateur: 5
(192.1.1.2, 3400)
(*, 22)
P. Sicard-Cours Rseaux
Les Sockets
13
P. Sicard-Cours Rseaux
Les Sockets
14
P. Sicard-Cours Rseaux
Les Sockets
15
SERVEUR UDP SERVEUR UDP socket socket bind 195.221.225.6, bind 192.1.1.2, 3400 22
recvfrom recvfrom
Identicateur: Identicateur: 33
Identicateur: 55 Identicateur:
(192.1.1.2, 3400)
(192.1.1.2, 3400)
(195.221.225.6, 22)
(195.221.225.6, 22)
Le rcepteur possde un buffer dune taille xe Une fois le premier paquet mis le serveur peut aussi envoyer des donnes au client
P. Sicard-Cours Rseaux Les Sockets 17
P. Sicard-Cours Rseaux
Les Sockets
18
P. Sicard-Cours Rseaux
Les Sockets
19
write bonjour
Bonjour
Identicateur: 2
Identicateur: 5
(192.1.1.2, 3400)
P. Sicard-Cours Rseaux
(195.221.225.6, 22)
Les Sockets
21
Le problme de la langue
Les donnes ne sont pas reprsentes de la mme faon suivant les processeurs (little-big endian) Il faut passer par un traducteur avant de les envoyer sur le rseau La fonction short int htons (short int x)
- retourne lentier court (2 octets) la norme rseau de x (pass en norme machine) - home to network
Les options
On peut consulter/modier des options sur des sockets alloues Exemples
- Taille du buffer de rception, dmission - Dnition de socket multicast - Rception/mission de paquets broadcast - Priorit - ...
En Travaux pratiques
Librairie encapsule des primitives des sockets (chier fon.c, fon.h) Exemple : bind -> h_bind Simplication des appels des primitives (moins de paramtre) Evite de manipuler la structure sockaddr_in grce la procedure adr_socket (char *service, char *adresse, char protocole, struct sockaddr_in *p_ad_s)
- service : numro de port ou nom associ dans /etc/services (Ex: 3400) - adresse: adresse en dcimal point ou nom associ (/etc/hosts ou DNS) (ex: 192.1.1.2) - protocole: udp ou tcp - p_ad_s: pointeur sur la structure qui est remplie par la procdure - Exemple: adr_socket(3400, 192.1.1.2, tcp, &sockclient);
P. Sicard-Cours Rseaux Les Sockets 26
makele pour compiler fon.c, fon.h avec client.c et serveur.c Commandes: make, make clean Mode debug possible (voir dans le makele : -DDEBUG) pour avoir des traces dexcution lcran des primitives des sockets Pour tester votre client indpendamment du serveur, vous pouvez utiliser socklab pour dialoguer avec votre programme
P. Sicard-Cours Rseaux
Les Sockets
27
P. Sicard-Cours Rseaux
Les Sockets
28
(*, 22) (56.1.1.10, 5000) socket bind connect read/write close accept read/write close 6 (195.221.226.2, 22) Id: 6
close 5
P. Sicard-Cours Rseaux Les Sockets 29
P. Sicard-Cours Rseaux
Les Sockets
30
Id: 5
(*, 22)
close 5
(192.1.1.2, 3400)
(*, 22) socket bind 195.2.2.2, 4444 ou port "0" puis getsockname sendto nouveau port 4444 recvfrom/sendto sur port 4444 close 6 close 5 Id: 6
(195.2.2.2, 4444)
Les Sockets
32
socket passive
Client 1
Cration processus
P. Sicard-Cours Rseaux
Les Sockets
33
La cration de processus
Fonction int fork()
- Cre un nouveau processus (appel ls) lidentique du processus pre - Le processus pre est dupliqu en mmoire (instruction machines et variables) - Il ny pas de partage de variable entre les processus - Pour les sockets il faut que les deux processus pre et ls ferme la socket pour quelle soit compltement libre - La seule diffrence entre les deux processus est la valeur retourne par la fonction fork
Pour le pre elle retourne la valeur du PID (Processus Identier) du ls Pour le ls elle retourne 0
P. Sicard-Cours Rseaux Les Sockets 34
(*, 22) (56.1.1.10, 5000) socket bind connect read/write close accept fork pre close 6 close 5
P. Sicard-Cours Rseaux
(192.1.1.2, 3400)
close 5
sendto (envoi nouveau port 4444) close 5 Id: 6 recvfrom/sendto sur 4444 close 6 (195.2.2.2, nouvport) exit
Les Sockets
37
Exemple:
fdset set; int idsock1, idsock2, maxsock; FD_ZERO(&set); /* initialise set vide */ FD_SET(idsock1, &set); /*ajoute idsock1 a set */ FD_SET(idsock2, &set); /*ajoute idsock2 a set */ maxsock=getdtablesize(); select (maxsock, &set,0,0,0) if (FD_ISSET(idsock1, &set) ...
P. Sicard-Cours Rseaux Les Sockets 38
P. Sicard-Cours Rseaux
Les Sockets
39
Choix du protocole
Avantages UDP par rapport TCP
- Plus rapide (pas dtablissement de connexion) - Moins coteux pour le rseau (petite entte, pas dautres paquets (syn, ack, close)) - Possibilit de broadcast et multicast - Intressant si communication question-rponse - Mobilise moins de ressources sur la machine que TCP