Exercice 1 Polynésie – Bac NSI 2025 – Jour 1

🔥🔥🔥🔥🔥
Cet exercice porte sur les protocoles réseaux, l'algorithmique et la POO. Un cœur de réseau est constitué d'un maillage dans lequel les routeurs sont reliés par des liaisons physiques dont le débit est en Mbps.

mots clés: réseaux, algorithmique, POO

🔎 Voir les exercices similaires ↓

📘 Sujet PDF

Polynésie – Bac NSI 2025 – Jour 1 Énoncé de l'exercice 1

Cet exercice porte sur les protocoles réseaux, l’algorithmique et la POO.

Partie A

Un cœur de réseau est constitué d’un maillage dans lequel les routeurs 𝑅1 à 𝑅6 sont reliés par des liaisons physiques dont le débit en Mbps (Méga-bits par seconde) est indiqué sur la figure suivante.

Figure 1. Réseau.
Figure 1. Réseau

Derrière chaque routeur 𝑅1 à 𝑅5, un switch distribue un réseau local LAN1 à LAN5.

Les protocoles utilisés sont le protocole RIP et le protocole OSPF, qui minimisent respectivement le nombre de routeurs traversés et la somme des coûts des liaisons physiques empruntées.

  1. Recopier et compléter la table de routage de 𝑅1 sachant que le protocole de routage RIP est utilisé.

La destination est le routeur à atteindre, le prochain saut est le premier routeur traversé et la distance est le nombre de routeurs traversés.

Table de routage de 𝑅1
destinationprochain sautdistance
𝑅2𝑅20
𝑅3𝑅21
𝑅4
𝑅5
𝑅6
  1. Un utilisateur du réseau local LAN1 interroge, via son navigateur web, un serveur d’Internet. Détailler, suivant le protocole RIP, la route suivie dans le maillage par la requête à destination de ce serveur.

Le coût d’une liaison est donné par la relation coût = 102d\frac{10^{2}}{d}, où 𝑑 est le débit de la liaison en Mbps.

Exemple : le coût de la liaison entre 𝑅1 et 𝑅2 est 10210\frac{10^{2}}{10}\ = 10.

Le tableau suivant donne le coût de chacune des liaisons physiques entre 𝑅1 et les autres routeurs du graphe qui lui sont connectés.

Coût des liaisons depuis 𝑅1
routeur𝑅2𝑅4𝑅5
coût10100100
  1. Recopier et compléter la table de routage de 𝑅1 sachant que le protocole de routage OSPF est utilisé.

La distance est la somme totale des coûts des liaisons physiques empruntées pour atteindre la destination.

Table de routage de 𝑅1
destinationprochain sautdistance
𝑅2𝑅210
𝑅3
𝑅4
𝑅5
𝑅6

Un utilisateur du réseau local LAN1 interroge, via son navigateur web, un serveur d’Internet.

  1. Donner, selon le protocole OSPF, la route suivie dans le maillage par la requête à destination de ce serveur.

Le protocole de routage OSPF est toujours utilisé et le routeur 𝑅2 tombe en panne.

  1. Donner la nouvelle route suivie dans le maillage par une requête partant du réseau LAN1 à destination d’Internet et en donner la nouvelle valeur de la distance.

Partie B

Le réseau LAN1 est supposé disposer d’un serveur DHCP (Dynamic Host Control Protocol) gérant l’attribution d’adresses IPv4. Il est rappelé, ici, qu’une adresse IPv4 est une séquence de 4 octets, généralement représentée par les 4 entiers correspondants en écriture décimale, séparés par des points (notation décimale pointée). Un réseau est caractérisé par des machines dont les adresses ont en commun les 𝑛 mêmes premiers bits. La notation CIDR du réseau a la forme “adresse réseau / 𝑛”. Appliqué à une adresse du réseau, le masque permet de calculer le préfixe réseau commun. Il est constitué de 4 octets consécutifs, dont (de gauche à droite) les 𝑛 premiers bits sont égaux à 1 et les suivants à 0. On obtient l’adresse du réseau en effectuant un ET logique, bit à bit, entre chaque octet composant l’adresse d’une machine et l’octet qui lui correspond dans le masque.

Exemple de ET :

           l'entier 192 s'écrit : 1 1 0 0 0 0 0 0
           l'entier 255 s'écrit : 1 1 1 1 1 1 1 1
------------------------------------------------------
ET logique, bit à bit : 1 1 0 0 0 0 0 0  (soit l'entier 192)
  1. Recopier et compléter le tableau suivant correspondant à une machine d’un réseau d’adresse 192.168.1.100 et de masque 255.192.0.0. Ce tableau détermine l’adresse du réseau (en binaire puis en décimale pointée).

Calcul d’une adresse de réseau
octet 1octet 2octet 3octet 4
machine (binaire)1100000010101000
masque (binaire)11111111110000000000000000000000
réseau (binaire)11000000
réseau (déc. pointée)192

On obtient le complémentaire d’un octet en échangeant respectivement chacun des 0 et des 1 qui le composent, par un 1 ou un 0.

Par exemple, le complémentaire de 1 1 0 0 1 0 1 0 est 0 0 1 1 0 1 0 1.

Par un procédé analogue à celui de la question précédente, l’adresse de broadcast d’un réseau est obtenue en effectuant un OU logique bit à bit entre chaque octet composant l’adresse réseau et le complémentaire de l’octet correspondant dans l’écriture binaire du masque.

Exemple de OU :

           12 s'écrit : 0 0 0 0 1 1 0 0
            9 s'écrit : 0 0 0 0 1 0 0 1
---------------------------------------------
OU logique, bit à bit : 0 0 0 0 1 1 0 1  (soit l'entier 13)
  1. Recopier et compléter le tableau ci-après pour déterminer l’adresse de broadcast du réseau suivant (en binaire puis en décimale pointée).

Calcul d’une adresse de broadcast
octet 1octet 2octet 3octet 4
réseau (binaire)11000000100000000000000000000000
masque (binaire)11111111110000000000000000000000
complément du masque (binaire)
broadcast (binaire)
broadcast (déc. pointée)

Une machine du réseau LAN1 a reçu du serveur DHCP l’adresse 172.16.1.100, avec le masque 255.255.0.0.

Sa passerelle par défaut a pour adresse 172.16.255.254.

  1. En déduire les informations suivantes :

  • l’adresse du réseau LAN1 (en décimale pointée) ;

  • l’adresse de broadcast (en décimale pointée) ;

  • le nombre total d’adresses pouvant être distribuées par le serveur, en ne tenant pas compte des éventuelles restrictions possiblement posées par l’administrateur du réseau.

On souhaite, désormais, simuler en Python le fonctionnement du réseau LAN1.

On donne, ci-après, les documentations des méthodes split et join.

Documentation de la méthode split de la classe str : split(self, séparateur). Elle renvoie la liste des sous-chaînes de caractères délimitées par le séparateur dans l’instance courante de chaîne de caractères. Exemple :

>>> 'ab-pq-rs'.split('-')
['ab', 'pq', 'rs']

Documentation de la méthode join de l’objet str : join(self, iterable). Elle fusionne les chaînes de caractères contenues dans iterable en les liant par la sous-chaîne depuis laquelle cette méthode est appelée. Exemple :

>>> '.'.join(['ab', 'pq', 'rs'])
'ab.pq.rs'

On commence par créer la classe IPv4 suivante.

class IPv4(object):
    def __init__(self, adresse:str):
        """
        Constructeur de la classe de calcul sur une
        adresse IPv4 dont la notation décimale pointée
        est passée en paramètre.
        """
        self.adresse = adresse

    def octets(self)->list[int]:
        """
        Découpe l'adresse décimale pointée en la liste
        des 4 entiers correspondants.
        """
        return [int(i) for i in self.adresse.split(".")]

Pour mémoire, l’opérateur & entre deux entiers effectue le ET logique bit à bit de la représentation binaire de ces entiers et renvoie l’entier correspondant à la représentation binaire ainsi obtenue.

Exemple :

>>> 192 & 255
192
  1. Recopier sur la copie et compléter les lignes 15 et 16 du code de la méthode masquer de la classe IPv4, donné ci-dessous. La méthode doit correspondre au docstring.

    def masquer(self, masque: str)->str:
        """
        Détermine le préfixe masqué de l'adresse,
        le masque (décimal pointé) étant passé en
        paramètre.
        >>> add = IPv4('192.168.1.100')
        >>> add.masquer('255.192.0.0')
        '192.128.0.0'
        """
        tmp = []
        ip = self.octets()
        crible = IPv4(masque).octets()
        for i in range(4):
            # Opération booléenne :
            tmp.append(... & ...)
        return ".".join(...)
  1. Recopier sur la copie et compléter les lignes 19 et 20 du code de la méthode adresse_suivante de la classe IPv4, donné ci-dessous. La méthode doit correspondre au docstring.

    def adresse_suivante(self, adresse_max:str)->str:
        """
        Détermine l'adresse décimale pointée suivant
        immédiatement l'adresse courante, sous réserve
        d'existence d'une adresse disponible
        >>> add = IPv4('192.168.1.100')
        >>> add.adresse_suivante('192.168.1.254')
        '192.168.1.101'
        >>> add = IPv4('192.168.1.255')
        >>> add.adresse_suivante('192.168.255.254')
        '192.168.2.0'
        """
        assert self.adresse < adresse_max
        liste_courante = self.octets()
        liste_suivante = list()
        retenue = 1
        for index in range(4):
            somme = liste_courante[3 - index] + retenue
            valeur, retenue = ..., ...
            liste_suivante = ...
        return '.'.join(liste_suivante)
▶✅ Correction (cliquer pour afficher) PDF

Polynésie – Bac NSI 2025 – Jour 1 Correction de l'exercice 1

Partie A – Routage RIP et OSPF

1. Table de routage de R1 avec RIP

R1 est relié directement à R2, R4 et R5 (aucun routeur traversé). R6 n’est relié qu’à R5 : pour l’atteindre, on traverse un seul routeur, R5.

destination prochain saut distance
R2 R2 0
R3 R2 1
R4 R4 0
R5 R5 0
R6 R5 1

2. Route vers Internet avec RIP

LAN1 → R1 → R5 → R6 → Internet (un seul routeur traversé entre R1 et R6).

3. Table de routage de R1 avec OSPF

Avec coût = 10² / d : une liaison à 1 Mbps coûte 100, à 10 Mbps coûte 10 et à 100 Mbps coûte 1.

Depuis R1, le plus économique est de passer par R2 (coût 10), puis d’emprunter les liaisons à 100 Mbps (coût 1) : R2 – R3 – R4 – R5 – R6.

destination prochain saut distance
R2 R2 10
R3 R2 11
R4 R2 12
R5 R2 13
R6 R2 14

4. Route vers Internet avec OSPF

LAN1 → R1 → R2 → R3 → R4 → R5 → R6 → Internet, pour un coût de 10 + 1 + 1 + 1 + 1 = 14.

5. Panne de R2

Sans R2, R1 ne peut sortir que par R4 ou R5, avec une liaison à 1 Mbps (coût 100) :

par R5 : R1 – R5 – R6 coûte 100 + 1 = 101 ;

par R4 : R1 – R4 – R5 – R6 coûte 100 + 1 + 1 = 102.

Nouvelle route : LAN1 → R1 → R5 → R6 → Internet, distance 101.

▶ Animation : RIP ou OSPF, quelle route vers Internet ?

Choisissez le protocole et mettez éventuellement R2 en panne. La route de LAN1 vers Internet est tracée en couleur et la table de routage de R1 se met à jour. Les nombres sur les liaisons sont les coûts OSPF (10² / débit).

Partie B – Adressage IPv4

6. Adresse du réseau (192.168.1.100, masque 255.192.0.0)

octet 1 octet 2 octet 3 octet 4
machine (binaire) 11000000 10101000 00000001 01100100
masque (binaire) 11111111 11000000 00000000 00000000
réseau (binaire) 11000000 10000000 00000000 00000000
réseau (déc. pointée) 192 128 0 0

L’adresse du réseau est 192.128.0.0.

7. Adresse de broadcast

octet 1 octet 2 octet 3 octet 4
réseau (binaire) 11000000 10000000 00000000 00000000
masque (binaire) 11111111 11000000 00000000 00000000
complément du masque 00000000 00111111 11111111 11111111
broadcast (binaire) 11000000 10111111 11111111 11111111
broadcast (déc. pointée) 192 191 255 255

L’adresse de broadcast est 192.191.255.255.

8. Réseau LAN1

Le masque 255.255.0.0 conserve les deux premiers octets :

adresse du réseau : 172.16.0.0 ;

adresse de broadcast : 172.16.255.255 ;

il reste 16 bits pour les machines, soit 2¹⁶ = 65 536 adresses. On retire l’adresse du réseau et celle de broadcast, qui ne peuvent pas être attribuées : le serveur peut distribuer 65 534 adresses.

Partie B (suite) – La classe IPv4

9. Méthode masquer (lignes 15 et 16)

        for i in range(4):
            # Opération booléenne :
            tmp.append(ip[i] & crible[i])            # ligne 15
        return ".".join([str(x) for x in tmp])     # ligne 16

10. Méthode adresse_suivante (lignes 19 et 20)

        for index in range(4):
            somme = liste_courante[3 - index] + retenue
            valeur, retenue = somme % 256, somme // 256              # ligne 19
            liste_suivante = [str(valeur)] + liste_suivante          # ligne 20
        return '.'.join(liste_suivante)

Une erreur, un oubli ? Écrivez-moi : frederic.peuriere@lfcl.pt

💻 Console Python (cliquer pour afficher)

🔎 Exercices sur des thèmes similaires