Université de Caen U.F.R. de Sciences L3 d Informatique Année 2010/2011 1ère session / Décembre Date : 15 décembre 2010 Examen terminal EI51 Systèmes avancés et réseaux Chaque candidat doit, au début de l épreuve, porter son nom dans le coin de la copie qu il cachera par collage après avoir été pointé. Il devra en outre porter son numéro de place sur chacune des copies, intercalaires, ou pièces annexées. Tout document autorisé Durée : 2 heures Les deux parties systèmes et réseaux sont à rédiger sur des copies séparées. 1 Partie système (à rédiger sur une copie séparée) 1.1 Systèmes de fichiers Lu sur stackoverflow.com : Hi, I am trying to modify the ext3 file system. Basically I want to ensure that the inode for a file is saved in the same (or adjacent) block as the file that it stores metadata for. [...] Ce que l on peut traduire par : Salut, Je suis en train de modifier le système de fichiers ext3. En deux mots, je voudrais assurer que le inode d un fichier soit toujours stocké dans le même bloc (ou le bloc adjacent) que le fichier dont il conserve les métadonnées. Question 1.1 Que sont les métadonnées dont il est question ici? Question 1.2 Quel gain 1 espère ce programmeur en modifiant ainsi ext3? 1.2 Ordonnancement de processus Question 1.3 Quels sont les différences entre des processus limités par les performances en calcul (CPU bound) et par des processus limités par les entrées sorties (I/O bound)? Donnez des exemples de processus limités par les performances en calcul ( CPU bound). Le texte suivant a été déposé sur lwn.net en commentaire d un article sur le nouvel algorithme d ordonnancement des processus : Apt and dpkg are not, in general, CPU bound, but I/O bound. Nicing I/O bound processes generally causes more problems than it solves, because you end up blowing the file cache. Ce que l on peut traduire en français par : 1 Mis à part le plaisir de programmer!
Les programmes apt et dpkg ne sont pas en général limités par les performances en calcul, mais sont limités par les entrées sorties. Utiliser nice sur les processus limités par les E/S provoque généralement plus de problèmes qu il n en résout car cela finit toujours par surcharger le cache du système de fichiers. Question 1.4 Êtes-vous en accord avec ce commentaire? Justifiez. 1.3 Appel système Nom open, creat - Ouvrir ou créer éventuellement un fichier. Synopsis #i n c l u d e <sys / types. h> #i n c l u d e <sys / s t a t. h> #i n c l u d e <f c n t l. h> i n t open ( const char pathname, i n t f l a g s ) ; i n t open ( const char pathname, i n t f l a g s, mode t mode ) ; i n t c r e a t ( const char pathname, mode t mode ) ; Description open essaye d ouvrir un fichier et retourne un descripteur de fichier (petit entier non négatif à utiliser avec read, write, etc.) flags est l un des éléments O RDONLY, O WRONLY ou O RDWR qui réclament respectivement l ouverture du fichier en lecture seule, écriture seule, ou lecture/écriture. flags peut aussi être un OU binaire ( ) avec un ou plusieurs des éléments suivants : O CREAT Créer le fichier s il n existe pas. O EXCL En conjonction avec O CREAT, déclenchera une erreur si le fichier existe, et open échouera. O EXCL ne fonctionne pas sur les systèmes de fichiers NFS de version antérieure à la v3. [...] Fig. 1 : Début de la page du manuel Unix open(2) Question 1.5 La figure 1 indique que le drapeau (flag) O EXCL n est pas opérationnel au dessus de NFS de version antérieure à la v3. Existe-t-il une autre façon de garantir qu une ouverture en création n écrase pas un fichier qui existait déjà avant cette création? 2
2 Partie réseaux (à rédiger sur une copie séparée) 2.1 Introduction On se place dans le cadre d un réseau domestique. Un fournisseur d accès permet de connecter ce réseau à l Internet. Ce fournisseur nous alloue une adresse IPv4 et on supposera de plus en section 2.4 qu il nous alloue également un préfixe IPv6, au minimum un «/64». La prestation du fournisseur inclut une «box», et on suppose dans ce qui suit que l utilisateur peut accéder à un menu de configuration de cette dernière au moyen d une interface web. 2.2 Configuration classique Question 2.1 Rappeler les principaux mécanismes inclus dans une telle «box» permettant : de fournir une configuration IPv4 à chaque élément du réseau domestique, et préciser la nature des adresses fournies, ainsi que les autres éléments nécessaires ; d autoriser les logiciels client situés sur les machines de ce réseau d accéder aux services classiques sur Internet ; à l utilisateur du réseau domestique de configurer un ou quelques services sur une ou plusieurs de ses machines, ces services pouvant être accessibles de l extérieur (donner un exemple au moins en précisant les éléments de configuration nécessaires). 2.3 Service additionnel Notre fournisseur, afin d attirer certaines catégories de clients, souhaite proposer un service supplémentaire permettant à ses clients de donner des noms aux différents éléments de son réseau. Ce service devra, bien sûr, être facilement configurable pour des non-spécialistes. On suppose donc que la «box» intègre un logiciel serveur de noms (ce qui est d ailleurs souvent le cas pour les configurations actuelles, mais ils sont configurés seulement pour être un relais vers des serveurs de noms extérieurs). On se préoccupe uniquement de pouvoir donner des noms à usage interne aux machines du réseau domestique, permettant ainsi, à partir de chaque machine de ce réseau, d accéder par leurs noms aux différents services situés sur les autres machines de ce réseau. Le nommage éventuel de services accessibles de l extérieur sera pour la prochaine amélioration de la prestation du fournisseur... On supposera que le domaine domestique est home. par défaut, éventuellement modifiable par l utilisateur, et que les machines du réseau domestique obtiennent des adresses IP ayant le préfixe 192.168.1.0/24. Question 2.2 Précisez quelle(s) information(s) de configuration (fournies par la box) sont nécessaires aux machines du réseau pour qu elles puissent utiliser ce système de nommage une fois qu il sera correctement configuré (avec les réponses aux questions suivantes). Question 2.3 Décrivez un mécanisme, intégré à la «box», permettant d offrir ce service aux clients du fournisseur. Celui-ci doit permettre : de découvrir automatiquement les services «classiques» (p.e. serveur http, partage de fichiers,...) disponibles sur les différents éléments du réseau domestique, et à l utilisateur d y ajouter des services plus «exotiques» qu il aurait configuré sur certains de ces éléments ; de proposer à l utilisateur un nom (ou plusieurs) pour chacun de ces services, dans le domaine domestique qui sera home par défaut ; d enregistrer les données ainsi découvertes ou fournies par l utilisateur et de mettre en place le service de nommage associé. Indiquez sur un ou deux exemples la forme de ces données qui devront être enregistrées. 3
Ce service devra bien entendu résister à une réinitialisation de la «box», par contre on admettra que modification, ajout, retrait d un service d une des machines du réseau nécessite une mise à jour manuelle de la liste des services mémorisés dans la «box». Question 2.4 Quels phénomènes risquent de compromettre le bon fonctionnement du service en cas de redémarrage de la «box»? Quelle(s) parade(s) peut-on y apporter? 2.4 IPv6 On suppose dans cette question que le fournisseur nous alloue un préfixe IPv6 du type «/64», permettant ainsi à chaque machine du réseau de posséder une adresse publique. Pour autant, l utilisateur du réseau domestique ne désire pas forcément annoncer tous ses services au monde entier, et on étudiera donc encore uniquement le cas où ces services doivent être accessibles par leur nom à partir des machines de ce réseau. On supposera que tous les logiciels clients et serveurs des machines du réseau domestique peuvent fonctionner en IPv6. Question 2.5 Les mécanismes que vous avez proposés pour IPv4 restent-ils valables pour IPv6? Si oui, justifiez votre réponse et si non, indiquez lesquels posent problème et éventuellement des solutions de remplacement. 4
Corrigé indicatif 1 Partie système 1.1 Systèmes de fichiers Question 1.1 Le i-node d un fichier contient les identifiants du propriétaire et groupe propriétaire, les dates de création, de dernière modification ou d accés, le nombre de liens, la taille en octets, mais aussi les adresses de blocs contenant le fichier proprement dit. Question 1.2 Le gain escompté sera effectif lorsque l on accédera (en lecture ou écriture) au contenu du fichier. En effet, l accès aux blocs du fichier nécessite l accès préalable à son i-node. S ils sont contenus dans le même secteur disque, on évitera ainsi une autre lecture de secteur disque, ce qui peut être coûteux s il nécessite un déplacement du bras de lecture du disque. Rappel : dans le système de fichiers ext3 standard, les i-nodes et les blocs de données sont stockés dans des zones différentes. 1.2 Ordonnancement de processus Question 1.3 Un processus limité par les entrées-sorties va être ralenti par les attentes de complétions des opérations en lecture ou en écriture sur les périphériques (disques ou réseau) et ne fait que peu de calculs sur les données lues ou écrites. apt et dpkg vont d abord lire les paquets depuis des dépôts, puis les écrire dans le système de fichiers local, sans faire beaucoup de calculs. Un processus limité par les performances en calcul demande beaucoup de temps de calcul sans accéder à des ressources externes (pas d E/S). Un premier exemple est un programme qui va inverser une matrice de grande taille (assez petite pour tenir en mémoire centrale ce qui commence à faire une taille respectable) en O(n 3 ). Un deuxième encore plus critique est la résolution d un problème dont on n a pas de solution en complexité polynomiale comme le problème du voyageur de commerce (recherche d un chemin hamiltonien dans un graphe). Note : détourner les entrées-sorties ne change pas vraiment le problème, sauf peut-être si c est vers /dev/null ou depuis /dev/zero car dans ces derniers cas, la complétion des E/S est beaucoup plus rapide puisqu elle ne demande aucun accès à un périphérique réel. On ne peut pas dire qu un programme qui fait des lectures du clavier soit limité par les entrées sorties, car le contrôleur du clavier sera toujours plus rapide que le dactylographe. Rappel : l utilisation des canaux DMA (Direct Memory Access) présents sur pratiquement toutes nos machines, décharge complètement le CPU lors des E/S Question 1.4 Oui, diminuer la priorité (avec nice) de processus limités par les E/S ne va pas forcément accélérer les autres processus. En effet, si on «prive» un processus de l accès au processeur alors qu il a demandé beaucoup d E/S, ces dernières seront néanmoins réalisées par le noyau ; le noyau va donc être obligé d allouer de nombreux tampons (ce qui est appelé cache du système de fichiers dans le texte) à ce processus. Ces tampons ne pourront être libérés que lorsque le processus traitera ces résultats (apt les réécrira ailleurs), et il ne pourra le faire que s il a accès au processeur. Pour que cette gestion de priorité soit efficace sur ce type de processus limités par les E/S, il faudrait disposer d un système limitant le nombre de tampons d E/S utilisés par un processus donné. Note : le fait que les processus soit exécuté en arrière plan ne change rien à ce problème. On applique nice en général à des processus en arrière plan, mais cela n a rien d obligatoire. 5
1.3 Appel système Question 1.5 Le problème est ici de garantir que le fichier soit créé si, et seulement si, il n existait pas avant. Nous sommes en présence d un problème où il faut faire deux opérations : le test et la création, de façon atomique. Le seul autre appel sur un système de fichiers qui garantit cette atomicité est : link (cf TD du 13/10/2010). Si l on veut garantir que le fichier toto soit créé sauf s il existait déjà, il faut : créer un premier fichier (par exemple de nom toto.link ; tenter de créer un lien de toto.link sur toto, ce qui échouera si toto existe déjà ; détruire le lien toto.link (ce qui ne détruit pas le fichier toto). Évidemment, ceci est correct seulement si on suppose que la création temporaire de toto.link est acceptable... Cela peut s écrire en shell : #! / bin / sh # crée l e f i c h i e r dont l e nom e s t donné en premier paramètre # s a u f s i l e x i s t e déjà # retourne 0 en cas de succès, 1 s i l e f i c h i e r e x i s t a i t déjà, # 2 s i non d r o i t en création, 3 s i syntaxe i n c o r r e c t e i f t e s t $# ne 1 ; then echo usage : $0 f i c h i e r à c r é e r >&2 exit 3 f i i f! touch $1. l i n k ; then exit 2 f i ln $1. l i n k $1 r e t=$? rm f $1. l i n k exit $ r e t ou en C : / crée l e f i c h i e r dont l e nom e s t donné en premier paramètre s a u f s i l e x i s t e déjà retourne 0 en cas de succès, 1 s i l e f i c h i e r e x i s t a i t déjà, 2 s i non d r o i t en création, 3 s i syntaxe i n c o r r e c t e / #include <s t d i o. h> #include <s t r i n g. h> #include <s t d l i b. h> #include <unistd. h> #include <f c n t l. h> int main ( int argc, char argv [ ] ) { i f ( argc!= 2) { f p r i n t f ( s t d e r r, usage : %s f i c h i e r à c r é e r \n, argv [ 0 ] ) ; e x i t ( 3 ) ; } 6
} char l i e n [ s t r l e n ( argv [ 1 ] ) + s t r l e n (. l i n k ) + 1 ] ; s t r c a t ( s t r c a t ( l i e n, argv [ 1 ] ),. l i n k ) ; i f ( c r e a t ( l i e n, 0664) == 1) { p e r r o r ( c r e a t ) ; e x i t ( 2 ) ; } int r e t = l i n k ( l i e n, argv [ 1 ] ) ; unlink ( l i e n ) ; return r e t == 0? 0 : 1 ; // ou e x i t ( r e t == 0? 0 : 1) Note : touch pourrait fonctionner car il crée le fichier seulement s il n existait pas, mais il modifie sa date de dernier accès et surtout on ne peut pas savoir s il existait avant! 2 Partie réseaux 2.1 Introduction Rappel du contexte : on se place dans le cadre d un réseau domestique. Un fournisseur d accès permet de connecter ce réseau à l Internet. Ce fournisseur nous alloue une adresse IPv4 et on supposera de plus en section 2.4 qu il nous alloue également un préfixe IPv6, au minimum un «/64». La prestation du fournisseur inclut une «box», et on suppose dans ce qui suit que l utilisateur peut accéder à un menu de configuration de cette dernière au moyen d une interface web. 2.2 Configuration classique Question 2.1 Les principaux mécanismes inclus dans une telle «box» Fournir une configuration IPv4 à chaque élément du réseau domestique : en général, une classe C privée (par exemple 192.168.1.0/24) est réservée pour adresser les appareils du réseau interne. La «box» s attribue une de ces adresses sur son interface Ethernet, les autres étant disponibles. L utilisateur a le choix entre configurer lui-même les adresses de ses machines, ou bien utiliser la fonction DHCP (distribution d adresses et de configuration). La plage d adresses pouvant ainsi être allouée est configurable, ce qui permet de séparer les plages adresses automatiques / manuelles. Il y a en outre en général un relais DNS dans la «box», les machines seront donc en général configurées avec comme adresse de DNS l adresse interne de la «box». Ce point n est pas forcément indispensable, mais va le devenir à la section suivante. Autoriser les logiciels client situés sur les machines de ce réseau d accéder aux services classiques sur Internet : Il faut une conversion d adresses privées en l adresse publique de la «box», car les adresses privées ne peuvent circuler sur Internet. Toute requête émanant d une machine interne à destination de l extérieur sera donc transformée, au niveau de l adresse destinataire et aussi du numéro de port, le port de la machine émettrice étant remplacé par un port de la «box». Cette fonction est le NAPT. Permettre à l utilisateur du réseau domestique de configurer un ou quelques services sur une ou plusieurs de ses machines, ces services pouvant être accessibles de l extérieur. Là encore, il faut changer l adresse (fontion NAT), plus précisément rediriger le port souhaité de l adresse publique vers le même port de la machine supportant le service. Par exemple, si l utilisateur souhaite un service web sur sa machine d adresse 192.168.1.12, 7
il devra rediriger le port 80 de sa box vers le port 80 de cette adresse IP. On ne peut rediriger chaque port qu une fois, donc il est impossible d avoir sur deux machines différentes des services accessibles de l extérieur sur un même port. Il est préférable d activer ce genre de service sur des machines dont l adresse IP interne est fixe, car si un redémarrage de la «box» donne de nouvelles adresses, la redirection ne sera plus bonne. 2.3 Service additionnel Il s agissait ici d ajouter un système de nommage des machines internes. Question 2.2 Précisez quelle(s) information(s) de configuration (fournies par la box) sont nécessaires aux machines du réseau pour qu elles puissent utiliser ce système de nommage une fois qu il sera correctement configuré (avec les réponses aux questions suivantes) : Il est ici impératif que les configurations de toutes les machines du réseau interne, qu elles soient obtenues automatiquement ou manuellement, aient comme adresse de DNS à interroger l adresse de la «box», puisque c est elle qui contiendra les données de correspondance entre noms et adresses. Il peut aussi être très utile d indiquer aux machines qu elles se trouvent dans le domaine home afin d autoriser la complétion automatique des adresses internes. Question 2.3 Mécanisme, intégré à la «box», permettant d offrir ce service aux clients du fournisseur. pour découvrir automatiquement les services «classiques» (p.e. serveur http, partage de fichiers,...) disponibles sur les différents éléments du réseau domestique, et à l utilisateur d y ajouter des services plus «exotiques» qu il aurait configuré sur certains de ces éléments, on peut imaginer : que la «box» puisse scanner les ports (au moins quelques ports bien connus) des adresses des machines du réseau interne. Au pire il y a 253 adresses à scanner ; que pour chacun des ports trouvés ouverts, l interface propose au client de donner un nom à la machine concernée, correspondant à la fonction trouvée. En cas de plusieurs fonctions sur une même machine, le système pourra proposer des alias. que ce système puisse également proposer au client d ajouter des noms ou des alias pour certaines adresses Enregistrer les données ainsi découvertes ou fournies par l utilisateur et de mettre en place le service de nommage associé. : L enregistrement devra contrôler qu il n y a pas d informations contradictoire. Les données seront enregistrées dans les fichiers du DNS de la «box». Il y a le fichier direct du domaine homequi peut contenir par exemple des enregistrements : www IN A 192.168.1.12 (parce qu on a détecté que le port 80 était ouvert sur cette machine) ftp IN CNAME www (on y a aussi détecté un port 21) Le fichier reverse du domaine.68.192.in-addr.arpa@peut également être utile, bien que non indispensable et contenir : 12 IN PTR www.home. 8
Question 2.4 Problème de réinitialisation. Pour résister à une réinitialisation de la «box», il faudra s assurer que les machines ne changent pas d adresses. Si ces dernières sont configurées manuellement, c est de la responsabilité de l utilisateur, mais si on utilise DHCP, alors il sera bon de configurer DHCP pour distribuer les adresses IP en fonction des adresses MAC des machines car celles-ci ne changent pas. 2.4 IPv6 On suppose dans cette question que le fournisseur nous alloue un préfixe IPv6 du type «/64», permettant ainsi à chaque machine du réseau de posséder une adresse publique. Pour autant, l utilisateur du réseau domestique ne désire pas forcément annoncer tous ses services au monde entier, et on étudiera donc encore uniquement le cas où ces services doivent être accessibles par leur nom à partir des machines de ce réseau. On supposera que tous les logiciels clients et serveurs des machines du réseau domestique peuvent fonctionner en IPv6. Question 2.5 Les mécanismes que vous avez proposés pour IPv4 restent-ils valables pour IPv6? Le NAPT / NAT de la «box» n a plus d utilité ici. Le DHCP pourra être remplacé par une configuration automatique sans états, mais le DHCP peut cependant avoir toujours un intérêt : S il n y a plus de DHCP, on ne peut pas savoir quelles sont les machines qui ont obtenu des configurations automatiques. Il est par ailleurs hors de question de scanner les 2 64 machines possibles! La recherche automatique de services sera donc plus difficile. De plus, on peut difficilement demander à l utilisateur de taper à la main les adresses IPv6 auto-configurées... Il faudra donc mettre en place un mécanisme de découverte de voisins pour au moins acquérir les adresses des machines connectées (notons que pour un usage interne, les adresses lien-local suffisent), et on pourra alors en scanner les ports et proposer des noms et/ou proposer à l utilisateur d en mettre d autres. Pour éviter les changements d adresses, il suffira de choisir, en cas d auto-configuration, la version qui calcule l adresse IP à partir de l adresse MAC. Le fait de devoir avoir l adresse du DNS de la «box» configurée dans chaque machine ne change pas, mais ceci ne s obtient pas par auto-configuration! Un serveur DHCP complémentaire pourra dons être utile. Idem pour le nom (home) du domaine. Les enregistrements dans le DNS devront bien entendu être adaptés à IPv6 (AAAA au lieu de A, sous-domaine de ip6.arpa pour le reverse) 9