Adloun

Corrigé bac NSI 2025 Métropole jour 1 — Exercice 3 : Réseau CaféNet : adressage IPv4, routage RIP et OSPF, table de routage en ABR

Sujet officiel du baccalauréat, spécialité numérique et sciences informatiques, session 2025. Corrigé rédigé par Ibrahim Alame.

Sujet officiel (PDF)

Énoncé

Cet exercice porte sur l'architecture matérielle (réseau), les arbres binaires de recherche et la programmation Python.

L'entreprise CaféNet possède plusieurs cafés répartis dans différentes villes. Le réseau de la chaîne de cafés est représenté en Figure 1.

Sur le schéma sont représentés 4 routeurs, le réseau du siège social, le réseau du café 1, le réseau du café 2. Dans les réseaux du café 1 et du café 2, des bornes de commandes sont connectées à des switchs (ce sont des boitiers de connexion qui n'ont pas eux-mêmes d'adresse IP). Les 4 routeurs représentés sont composés d'au moins 3 interfaces réseau capable de relier des réseaux ensemble. Chaque interface possède donc une adresse IPV4 sur le réseau auquel elle est reliée.

Les masques des sous-réseaux sont tous 255.255.255.0. Avec ce masque, les trois premiers octets des adresses IP codent l'adresse réseau. Le dernier octet, c'est-à-dire les 8 derniers bits, code l'adresse des machines à l'intérieur de chaque sous-réseau.

Partie A

Le gérant veut faire installer une troisième borne de commande dans le café 1.

1. Indiquer les deux seules adresses IP valides pour cette nouvelle borne, parmi les quatre adresses IP proposées.

(a) 192.168.20.2     (c) 192.168.20.261
(b) 192.168.20.157     (d) 192.168.24.10

L'adresse de diffusion, appelée aussi adresse de broadcast, est la dernière adresse disponible à l'intérieur d'un réseau local.

2. Déterminer l'adresse de diffusion du réseau du café 1.

3. Déterminer combien de machines informatiques il est encore possible de connecter au réseau du café 1 après l'installation de la troisième borne de commande.

Le réseau local du café 1 n'a pas besoin de plus de 8 adresses IP différentes. Ce décompte d'adresses IP inclut les adresses IP réservées (à savoir l'adresse de diffusion et l'adresse du réseau). Il est rappelé que la longueur du masque de sous-réseau est actuellement de 24 bits (c'est-à-dire 3 octets).

4. Expliquer quelle est la longueur maximale du masque de sous-réseau que l'on pourrait choisir pour le réseau local du café 1.

Partie B

RIP (Routing Information Protocol) est un protocole de routage utilisé dans les réseaux IP. Il est conçu pour réduire le nombre de sauts entre deux réseaux. Un « saut » correspond au transfert des données d'un routeur à un autre. Le protocole RIP utilise le nombre de sauts comme critère principal pour évaluer le coût d'un chemin. Autrement dit, il considère que le chemin le plus optimal est celui qui traverse le moins de routeurs.

La table de routage du routeur 2 de la Figure 1 est représentée ci-dessous :

Routeur 2

Réseau destinationInterface de sortieProchain routeurNombre de sauts
192.168.20.0192.168.20.1aucun0
172.16.3.0172.16.3.1aucun0
172.16.4.0172.16.4.1aucun0
192.168.10.0172.16.3.1172.16.3.22
172.16.0.0172.16.4.1172.16.4.21
172.16.2.0172.16.4.1172.16.4.21
192.168.30.0………
172.16.1.0………

5. Recopier et compléter les deux dernières lignes de la table de routage du routeur 2.

La table de routage du routeur 2 contient un réseau de destination pour lequel deux routes différentes sont possibles. La ligne correspondante dans la table de routage aurait donc pu être remplie différemment tout en respectant le protocole RIP.

6. Identifier, dans la table de routage du routeur 2, le réseau de destination que l'on peut atteindre d'une autre façon et indiquer comment cette ligne de la table de routage pourrait être modifiée.

Une adresse IP qui n'est pas référencée dans la table de routage doit être routée par défaut vers Internet.

7. Recopier et compléter la ligne à ajouter à la table de routage du routeur 2.

Réseau destinationInterface de sortieProchain routeur
autre……
Partie C

OSPF est également un protocole d'échanges de données entre les routeurs qui prend en compte le coût des routes. Le coût est lié au débit des liaisons entre les routeurs par la formule suivante :

8. Recopier et compléter la dernière colonne du tableau ci-dessous :

Tableau des coûts

Type de connexionDébit en coût
Ethernet100
Fast Ethernet…
Fibre optique…

Le schéma ci-dessous met en évidence les types de connexion qui relient les routeurs.

9. Déterminer la route dont le coût est minimal pour aller du routeur 1 jusqu'au routeur 4 et calculer son coût au sens du protocole OSPF.

Partie D

Le but de cette partie est de classer les adresses IP des différents réseaux afin de faciliter leur recherche.

La fonction ip_bin prend en argument une chaîne de caractères décrivant une adresse IP en notation décimale, et renvoie une chaîne de caractères, de longueur 35 (32 bits et les 3 points), décrivant l'adresse IP en notation binaire. Exemple :


>>> ip_bin('192.168.10.1')
'11000000.10101000.00001010.00000001'

10. Donner la chaîne de caractères renvoyée par ip_bin('192.168.20.12').

La fonction precede prend en paramètres deux adresses IP en notation binaire, sous forme de chaînes de caractères identiques à celles renvoyées par la fonction ip_bin. La fonction precede renvoie un booléen qui vaut True si la première adresse IP en paramètre précède la seconde adresse IP. Exemple :


>>> a = '11000000.10101000.00001010.00000001'
>>> b = '11000000.10101000.00001111.00000001'
>>> precede(a, b)
True

L'algorithme compare bit à bit les deux chaînes binaires, en lisant les chaînes de caractères dans le sens usuel (de gauche à droite). Dans l'exemple ci-dessus, tous les caractères sont identiques jusqu'au sixième caractère du troisième octet. Comme le bit de l'adresse a est inférieur à celui de l'adresse b, on en déduit que l'adresse IP a précède l'adresse IP b.

Si la première adresse IP ne précède pas la seconde, la fonction doit renvoyer False. L'algorithme de comparaison est traduit dans le langage Python sous la forme suivante :


def precede(ip_1, ip_2):
    for i in range(35):
        if ip_1[i] < ip_2[i]:
            return ...
        elif ip_1[i] > ip_2[i]:
            return ...
    return ...

11. Expliquer dans quel cas la fonction precede exécutera la dernière instruction return de la ligne 7.

12. Recopier et compléter les lignes 4, 6 et 7 du code de la fonction precede.

Les tables de routage de chaque routeur sont implémentées sous la forme d'arbre binaire de recherche avec la classe Abr.


class Abr:
    def __init__(self, adresse_ip,
                 interface, passerelle,
                 cout):
        self.adresse_ip = adresse_ip
        self.interface  = interface
        self.passerelle = passerelle
        self.cout       = cout
        if adresse_ip != '':
            self.gauche = Abr('','','',0)
            self.droite = Abr('','','',0)

    def est_vide(self):
        return ...

Dans cette représentation :

13. Citer un attribut et citer une méthode de la classe Abr.

14. Recopier et compléter la ligne 14 du code de la classe Abr.

15. Justifier, en mobilisant des connaissances de cours, l'intérêt qu'il peut y avoir à représenter la table de routage par un arbre binaire de recherche.

La section de code qui définit modifie est incluse dans la classe Abr.


    def modifie(self, adresse_ip,
                interface, passerelle,
                cout):
        if self.est_vide():
            self.adresse_ip = adresse_ip
            self.interface  = interface
            self.passerelle = passerelle
            self.cout       = cout
            self.gauche = Abr('','','',0)
            self.droite = Abr('','','',0)
        else:
            self.adresse_ip = adresse_ip
            self.interface  = interface
            self.passerelle = passerelle
            self.cout       = cout

Les lignes 20 à 23 sont exactement les mêmes que les lignes 27 à 30.

16. Réécrire le code de la fonction modifie en évitant cette répétition.

La classe Abr est complétée afin de permettre l'ajout de nouvelles lignes à la table de routage, tout en conservant les propriétés que doit posséder un arbre binaire de recherche.


    def rechercher(self, adresse_ip):
        if self.est_vide() or adresse_ip==self.adresse_ip:
            return self
        elif precede(...):
            return self.gauche.rechercher(adresse_ip)
        else:
            return self.droite.rechercher(adresse_ip)

    def inserer(self, adresse_ip,
                interface, passerelle,
                cout):
        destination = self.rechercher(adresse_ip)
        destination.modifie(adresse_ip,
                            interface, passerelle,
                            cout)

On rappelle que la fonction precede prend en arguments des adresses IP écrites sous forme binaire.

17. Recopier et compléter la ligne 35 du code de la fonction rechercher.

Corrigé

Partie A

1. Le réseau du café 1 est le réseau 192.168.20.0 de masque 255.255.255.0 : les trois premiers octets 192.168.20 sont imposés à toute machine du réseau, et seul le dernier octet, codé sur 8 bits, distingue les machines.

Les deux adresses valides sont donc (a) et (b).

2. L'adresse de diffusion est la dernière adresse du réseau local, c'est-à-dire celle dont tous les bits de la partie machine valent 1 : le dernier octet vaut . L'adresse de diffusion du café 1 est 192.168.20.255.

3. Le dernier octet offre combinaisons, mais deux sont réservées : 192.168.20.0 (adresse du réseau) et 192.168.20.255 (adresse de diffusion). Il reste adresses attribuables. Sont déjà attribuées : 192.168.20.1 (interface du routeur 2), 192.168.20.10 et 192.168.20.11 (les deux bornes), plus la nouvelle borne, soit 4 adresses. Les switchs, eux, n'ont pas d'adresse IP et ne comptent pas. On peut donc encore connecter machines.

4. Il faut que le réseau contienne au moins 8 adresses, adresse du réseau et adresse de diffusion comprises. Or : il faut au moins 3 bits pour la partie machine, donc au plus bits pour le masque. La longueur maximale du masque est 29 bits, soit 255.255.255.248 en notation décimale. Un masque de 30 bits ne laisserait que adresses, ce qui est insuffisant. En passant de 24 à 29 bits, on libère les autres adresses pour d'autres sous-réseaux.

Partie B

5. On raisonne à partir de la Figure 1, en comptant les transferts de routeur à routeur.

Réseau destinationInterface de sortieProchain routeurNombre de sauts
192.168.30.0172.16.4.1172.16.4.21
172.16.1.0172.16.3.1172.16.3.21

192.168.30.0 est le réseau du café 2, relié au routeur 3 : depuis le routeur 2, on sort par l'interface 172.16.4.1 vers le routeur 3 (172.16.4.2), soit 1 saut. L'autre chemin, par le routeur 1 puis le routeur 3, coûterait 2 sauts : RIP retient le plus court.

172.16.1.0 est le réseau qui relie le routeur 4 au routeur 1 : le routeur 1 y possède l'interface 172.16.1.2, il suffit donc de l'atteindre. On sort par 172.16.3.1 vers le routeur 1 (172.16.3.2), soit 1 saut ; en passant par le routeur 3 puis le routeur 4, il en faudrait 2.

100 % gratuit

La suite du corrigé est sur Adloun

Le corrigé rédigé en entier, partie par partie, et le tuteur pour poser des questions sur ce sujet.

Voir le corrigé complet, gratuitement

Inscription gratuite en 30 secondes (e-mail, nom d'utilisateur, mot de passe, classe ou profil), sans carte bancaire : arrivée directe sur le corrigé.

Corrigé complet gratuit →