17.01.2015 Views

Généralités sur les systèmes d'exploitation traitement Entrées Sorties

Généralités sur les systèmes d'exploitation traitement Entrées Sorties

Généralités sur les systèmes d'exploitation traitement Entrées Sorties

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

struct hostent {<br />

char h_name; /* nom de l'hôte */<br />

char **h_name; /* liste des alias */<br />

int h_addrtype; /* types d'adresses */<br />

int h_length; /* longueur de l'adresse en octets */<br />

char **h_addr_list; /* liste d'adresses réseau */<br />

}<br />

inet_ntoa permet de transformer une adresse du type struct in_addr en chaîne de caractère contenant <strong>les</strong><br />

points séparateurs. Son prototype est dans netinet/in.h.<br />

Réponse :<br />

/* fichier getadr.c compilé avec gcc -o getadr getadr.c */<br />

#include <br />

#include // pour inet_ntoa<br />

#include // pour gethostbyname<br />

#include <br />

#include // pour exit<br />

main(int argc, char *argv[]) {<br />

char *hote, **addrs;<br />

struct hostent *infohote;<br />

if (argc < 2) {<br />

printf("Usage : getadr host \n");<br />

exit(-1);<br />

}<br />

hote = argv[1];<br />

infohote=gethostbyname(hote);<br />

if (!infohote) {<br />

fprintf(stderr,"Impossible d'obtenir des infos <strong>sur</strong> l'hote\n");<br />

exit(-1);<br />

}<br />

if (infohote->h_addrtype != AF_INET){<br />

fprintf(stderr,"Ce n'est pas un hôte IP\n");<br />

exit(-1);<br />

}<br />

addrs = infohote ->h_addr_list;<br />

printf("%s\n",inet_ntoa(*(struct in_addr *)*addrs));<br />

exit(0);<br />

}<br />

Exercice n°3 (Protocole de routage RIP : Routing Information Protocol)<br />

Ce protocole est un protocole très simple de type "vecteur à distance" basé <strong>sur</strong> un algorithme de calcul du<br />

chemin le plus court dans un graphe (Bellman - 1957) anciennement utilisé <strong>sur</strong> Internet.<br />

Nous allons simplifier le problème en raisonnant<br />

(A) 1 (B) 2 (C)<br />

<strong>sur</strong> un réseau de 5 noeuds et 6 liaisons sans<br />

préciser le contenu des noeuds (hôte, routeur,<br />

3<br />

4<br />

commutateur de paquets, terminal) Le but du<br />

protocole de routage est de calculer <strong>les</strong> tab<strong>les</strong><br />

(D) 6 (E) 5<br />

de routage qui indiquent à chaque noeud comment joindre <strong>les</strong> autres noeuds.<br />

1°) On part d'un démarrage à froid, c'est à dire que l'on fait démarrer tous <strong>les</strong> noeuds en même<br />

temps. Chaque noeud à ce moment connaît sa<br />

propre adresse et il sait <strong>sur</strong> quel<strong>les</strong> liaisons il est de A à Liaison n° Coût<br />

branché. Ils ne connaissent rien d'autre, ni le A locale 0<br />

nombre de liaisons ni le nombre de noeuds. Chaque<br />

noeud possède donc une table de routage simple. A résume dans cette table un vecteur distance qui<br />

a exactement un élément A=0. A diffuse cette<br />

information <strong>sur</strong> la liaison n°1 c'est à dire à B qui met de B à Liaison n° Coût<br />

à jour sa nouvelle table. Mais il reçoit aussi B locale 0<br />

l'information de C et E (pas ajoutée dans la table). A 1 1<br />

En admettant que la mise à jour des tab<strong>les</strong> se fait pour tout le monde en même temps (hypothèse de<br />

15 / 51 Travaux Dirigés LO 14

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!