Communications inter-syst` emes
1. Fonctionnement de l’Internet 2. Protocoles applicatifs
3. Programmation r´eseau
Fonctionnement de l’Internet
Bas´e sur une architecture TCP/IP du nom des deux principaux protocoles utlis´es
Provient du r´eseau Arpanet de la D´efense Am´ericaine des ann´ees 70
Internet = des millions de r´eseaux utilisant des architectures diff´erentes, interconnect´es par des noeuds d’interconnexion (routeurs).
Architecture
Modèle OSI 1 Physique 2 Liaison 3 Réseau 4 Transport 5 Session 6 Présentation
7 Application Application:
Transport:
Inter−réseau:
Accès au réseau:
Ethernet, TokenRing, FDDI, PPP,...
IP TCP, UDP SSH, HTTP, Telnet, DNS, ...
Architecture TCP/IP
Adresses
Chaque interface (d’acc`es au r´eseau) poss`ede une adresse physique inscrite sur la carte (adr MAC 48bits pour carte Ethernet, unique au monde).
Au niveau IP(v4) : adresses de 32 bits = 4×1 octet repr´esent´e en d´ecimal point´e.
Ex :192.52.237.36
future version IPv6 : adresses sur 128bits
cmdifconfigpour voir les adresses des interfaces
Exemple sous Linux
eth0 Link encap:Ethernet HWaddr 00:0D:56:01:13:C9
inet addr:193.52.237.96 Bcast:193.52.237.255 Mask:255.255.255.0 inet6 addr: 2001:1111::20d:56ff:fe01:13c9/64 Scope:Global
inet6 addr: fe80::20d:56ff:fe01:13c9/64 Scope:Link lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host sit0 Link encap:IPv6-in-IPv4
NOARP MTU:1480 Metric:1
Classes d’adresses
Chaque adresse = prefixe r´eseau + id machine
Classe A
id_machine 10 préf
16 16
110 préfixe_réseau id_mach
24 8
1110 adresse de groupe préf
0 id_machine
8 24
Classe E Classe C Classe B
Classes d’adresses
Ex :192.52.237.36est une adr de classe C, pref res=192.52.237, id machine=36 192.52.237.0= adr du r´eseau
192.52.237.1 ... 254= adr possibles pour les machines 192.52.237.255adr de diffusion (broadcast) sur le r´eseau La partie id machine peut encore ˆetre d´ecoup´ee par
l’administrateur du site en id sous-r´eseau+ id machine
C’est le masque de (sous)r´eseau qui indique jusqu’o`u va la partie pr´efixe r´eseau/sous-r´eseau
IP et le routage
Le protocole IP (Internet Protocol) s’occupe du routage des paquets (chemin qui va ˆetre emprunt´e de la source `a la d´estination).
Pas de contrˆole d’erreur ni perte de paquet =>service minimum.
Format des paquets IPv4 :
IP et le routage
Chaque paquet est rout´e ind´ependament des autres (commutation de paquets).
Chaque routeur poss`ede une table de routage et en fonction de l’adr dst, il choisit l’entr´ee qui correspond le mieux et r´e´emet le paquet sur l’interface en sortie correspondante.
La table est mise `a jour par des protocoles distribu´es.
Commandes :
routeouip pour voir la table de routage
ping adrIP ou nompour tester l’accesibilit´e d’une station traceroute adrIP ou nompour voir le chemin jusqu’a la destination
Protocoles de transport : TCP et UDP
Au niveau transport, l’en-tˆete des paquets contient des champs num´ero de port source et destination qui servent `a indiquer `a quelle application est destin´ee le paquet.
Les num´eros <1024 sont affect´es `a des applicationss standard.
Ex : HTTP=80, SSH=22, ... (voir le ficher /etc/services)
UDP(User Datagramm Protocol) : service de transport non fiable en mode non connect´e = service mini IP + num´ero de port
TCP
TCP(Transmission Control Protocol) : service de transport fiable en mode connect´e (sur IP non fiable, sans connexion) =>
I ´etablissement, maintien et fermeture d’une connexion virtuelle
I acquitements, s´equencement et r´eassemblage des donn´ees
I contrˆole de flux par fenˆetre glissante
Protocoles applicatifs
La plupart fonctionne sur le mode client/serveur :
client et serveurs sont deux processus situ´es le plus souvent sur des machines diff´erentes.
Le serveur tourne en parmanence (en arri`ere plan : on parle de d´emon en Unix).
Le client envoie une ou plusieurs requˆetes au serveur qui r´epond par une ou plusieurs reponses.
requete
Serveur Client1
Client2
réponse
Protocoles de gestion
NIS(Net Info Service, Yellow Pages) : admin centralis´ee des principales BD d’admin du syst`eme : /etc/passwd, group, hosts, network ...
NFS(Net File system) : permet le montage de disques ´eloign´es.
Le client utilise la cmdmount -t nfs
DNS(Domain Name Service) : permet de faire la correspondance entre nom de domaine et adrIP. BD distribu´ee au niveau mondial contient outes les correspondances.
SMTP: service d’envoi des mails
POP, IMAP: consultation de boites aux lettres distantes SNMP: administration du r´eseau `a distance
Protocoles d’acc` es ` a distance
Les commandes `a distance :ajout d’un r devant la commande usuelle
rshex´ecution d’une commande sur machine distante rloginconnexion `a machine distante
rcpcopie sur ..
TELNET(Terminal Emulation Network) : lancement d’un terminal (fenˆetre shell) sur machine distante (remplace rlogin) cmdtelnet nomMachine ou adrIP
Protocoles d’acc` es ` a distance
SSH(Secure SHell) : version s´ecuris´ee de telnet utilisant le m´ecanisme RSA
ssh user@host command: ouverture de la session sur host et exec de la cmd apres identification
FTP(File Transfert Protocol) : transfert de fichiers vers et depuis une machine distante
ftp host get file put file2
sftp= version s´ecuris´ee utilisant ssh scp= version s´ecuris´ee de rcp
HTTP(HyperText Transfert Protocol) : protocole de tranfert de documents hypertextes
Les sockets
Socket = API permettant l’acc`es aux fonction de la couche transport. Apparues en 82 sur BSD4.1c, l’´equivalent system V se nomme les TLI (Transport Layer Interface). Ecrites en C toutes les deux.
Nous allons voir les sockets de BSD4.3 utilis´ees par les appli majeures (named, dhcpd, sendmail, httpd, ...).
Les sockets
Socket = prise = extr´emit´e d’un canal de communication. Ce point est repr´esent´e par une variable enti`ere (descripteur) similaire
`a un descripteur de fichier.
G´en´eralisation du m´ecanisme d’E/S d’Unix : mˆeme type de m´ecanisme, mais sp´ecificit´es dues aux caract´eristiques un peu sp´eciales des E/S r´eseau :
- non symetrie de relation cli/serv
- connexion de type connect´e ou non, d´efinie par quintuplet : (proto, adr locale, process local, adr ´eloign´ee, process ´eloign´e) - l’interface doit permettre d’acc´eder `a diff´erents protos (TCP, UDP, XNS, ...pas sp´ecifique `a TCP/IP)
Cr´ eation et fermeture d’une socket
Cr´eation d’une socket :
int sd=socket(int domain, int type, int proto)
domaine= AF UNIX (domaine local), AF INET (IPv4, AF INET6 (IPv6), ...
type= SOCKSTREAM, SOCKDGRAM, SOCKRAW, ...
proto= IPPROTO UDP, IPPROTO TCP, ... mais souvent mis `a 0 car couple domaine/type fixe le proto :
AF INET + SOCKSTREAM = TCP AF INET + SOCKDGRAM = UDP AF INET + SOCKRAW = IP Fermeture :close(sd)
Association d’un port et d’une adresse IP ` a la socket
int bind(int sd, struct sockaddr *monAddr,socklen\_t tailleAddr) struct sockaddr_un {
short sun_family; // AF_UNIX
char sun_path[128]; // chemin d’acc`es du fichier }
struct sockaddr_in {
short sin_family; // AF_INET
unsigned short sin_port; // num port struct in_addr sin-addr; // IP 32 bits char sin_zero[8]; // inutilis´e
}
struct in-addr {
unsigned long s_addr; // 32 bits
Connexion et envoi des donn´ ees
int connect(int sd, struct sockaddr
*serveurAddr,socklen t tailleAddr) fait par client pour mode connect´e
Envoi de donn´ees :primitives write, send, sendto, sendmsg sendto et sendmsg r´eclament l’adr dst `a chaque envoi R´eception : read, readv, recv, recvfrom, recvmsg
File d’attente : int listen(int sf, int tailleFile) Met en file d’attente les demandes de connexion provenant des clients
Accepter un connexion
Quand le serveur invoqueaccept, il se met en attente bloquante d’une connexion.
int accept (int sd, struct sockaddr
*serveurAddr,socklen t tailleAddr)
retourne le descr d’une nouvelle sock utilis´ee pour dialoguer avec client et remplit la struct avec addr du client.
Mode connect´ e
sd=socket() bind(sd) listen(sd) sd2=accept(sd)
read(sd2) write(sd2) close(sd2)
sd=socket()
connect(sd) write(sd) read(sd) close(sd)
Mode non connect´ e
CLIENT bind(sd) sd=socket()
recvfrom(sd) sendto(sd) bind(sd)
sd=socket()
recvfrom(sd) sendto(sd)
close(sd) close(sd)
SERVEUR
Serveur r´ ecursif
Pour pouvoir traiter plusieurs clients en mˆeme temps : duplication de processus (fork()) ou processus l´egers (threads)
Primitives de lectures/´ecriture sont bloquantes par d´efaut (on peut les rendre non bloquantes `a l’aide de la primitive fcntl()).
Donc si le prg attend des donn´ees sur un descripteur, il ne peut rien faire d’autre pendant ce temps.
Primitives de scrutation de descripteurs de fichier :select(BSD) etpoll(SystemV)
Scrutation de descripteurs
Select permet de surveiller un ensemble de descripteurs
Si aucun actif, process endormi, pas de ressources CPU utilis´ees, d`es qu’un descr devient actif, le noyau reveille le process et select se termine avec infos sur le descr qui a provoqu´e le reveil.
On doit : 1) remplir une struct fd set avec les descr a surveiller, 2) appel au select 3) tester chacun des descripteurs
poll() propose les memes fonctionnalit´es, mais avec une approche l´eg`erement diff´erente : on rempli un tab de struct pollfd, puis appel a poll sur le tab, puis on regarde si donn´ees dispo sur chaque descr