Réseaux, routage et systèmes
Léa ouvre l'application de sa banque sur son téléphone. Pendant que la page s'affiche, son téléphone exécute des dizaines de processus, ses paquets traversent plusieurs routeurs, et personne ne doit pouvoir lire son mot de passe en route. Comment le système partage-t-il le processeur ? Comment un paquet trouve-t-il son chemin ? Comment la connexion est-elle protégée ? Voilà les trois questions de ce chapitre, qui reviennent régulièrement dans les exercices de l'épreuve écrite du bac.
Processus et ordonnancement
Un processus est un programme en cours d'exécution. Le processeur ne peut exécuter qu'un processus à la fois (par cœur) : le système d'exploitation décide dans quel ordre les processus passent. C'est l'ordonnancement, assuré par l'ordonnanceur.
Un processus est toujours dans l'un de ces trois états :
-
prêt : il attend que le processeur se libère ;
-
élu (ou en cours d'exécution) : il utilise le processeur ;
-
bloqué : il attend une ressource (lecture sur le disque, réponse du réseau, saisie au clavier…).
Un processus bloqué ne repasse jamais directement à l'état élu : une fois la ressource obtenue, il redevient prêt et doit attendre son tour.
Première arrivée, première servie (FIFO)
Les processus passent dans l'ordre d'arrivée, et chacun va jusqu'au bout. Le temps d'attente d'un processus est la durée écoulée entre son arrivée et le début de son exécution.
Le tourniquet (round robin)
Chaque processus reçoit le processeur au plus pendant un quantum (une durée fixée, par exemple 2 s). S'il n'a pas terminé, il est remis à la fin de la file des processus prêts. Personne ne reste bloqué derrière un long processus.
Avec ce mode, le temps d'attente total d'un processus est la durée passée dans la file des prêts :
$$\text{attente} = \text{instant de fin} - \text{instant d'arrivée} - \text{durée d'exécution}.$$Un système d'exploitation exécute trois processus selon la règle « premier arrivé, premier servi » (sans interruption). Les instants sont exprimés en secondes. |…
Un système d'exploitation exécute trois processus selon la règle « premier arrivé, premier servi » (sans interruption). Les instants sont exprimés en secondes.
| Processus | Instant d'arrivée | Durée d'exécution |
|---|---|---|
| P1 | 0 | 4 |
| P2 | 1 | 3 |
| P3 | 2 | 1 |
-
Donner, pour chaque processus, l'intervalle de temps pendant lequel il s'exécute.
-
Calculer le temps d'attente de chaque processus, c'est-à-dire la durée écoulée entre son arrivée et le début de son exécution, puis le temps d'attente moyen, arrondi au centième.
-
Citer les trois états classiques d'un processus et préciser, à l'instant 3 s, l'état de chacun des trois processus.
Trois processus sont ordonnancés selon la politique du tourniquet avec un quantum de 2 s. Un processus qui n'a pas terminé à la fin de son quantum retourne à la fin de…
Trois processus sont ordonnancés selon la politique du tourniquet avec un quantum de 2 s. Un processus qui n'a pas terminé à la fin de son quantum retourne à la fin de la file des processus prêts. Si un processus arrive à un instant inférieur ou égal à la fin d'une tranche, il est placé dans la file avant le processus interrompu à cet instant.
| Processus | Instant d'arrivée (s) | Durée d'exécution (s) |
|---|---|---|
| P1 | 0 | 5 |
| P2 | 1 | 3 |
| P3 | 2 | 4 |
-
Construire le diagramme de Gantt de l'exécution, sous la forme d'une suite d'intervalles de temps associés aux processus.
-
Donner l'instant de fin de chaque processus, puis son temps de séjour (instant de fin moins instant d'arrivée) et le temps de séjour moyen, arrondi au centième.
-
Mener la même étude avec la règle « premier arrivé, premier servi » sans interruption.
-
Comparer les temps de séjour moyens obtenus et citer un avantage du tourniquet pour un système interactif.
Ressources partagées et interblocage
Plusieurs processus peuvent avoir besoin de la même ressource (une imprimante, un fichier, un port). Si elle ne peut servir qu'à un seul processus à la fois, les autres attendent. Cela peut conduire à un interblocage (deadlock) : plusieurs processus s'attendent mutuellement, pour toujours.
Le cycle « P1 attend P2 qui attend P1 » ne peut jamais se débloquer. Un interblocage exige la réunion de quatre conditions :
-
exclusion mutuelle : une ressource n'est utilisable que par un processus à la fois ;
-
détention et attente : un processus garde ses ressources en en demandant d'autres ;
-
pas de réquisition : on ne peut pas retirer de force une ressource à un processus ;
-
attente circulaire : il existe un cycle de processus, chacun attendant une ressource détenue par le suivant.
Deux processus P1 et P2 partagent deux ressources R1 et R2, chacune utilisable par un seul processus à la fois. Le processus P1 exécute les actions suivantes : demander…
Deux processus P1 et P2 partagent deux ressources R1 et R2, chacune utilisable par un seul processus à la fois. Le processus P1 exécute les actions suivantes : demander R1, demander R2, utiliser les deux ressources, libérer R2, libérer R1. Le processus P2 exécute : demander R2, demander R1, utiliser les deux ressources, libérer R1, libérer R2. Une demande d'une ressource déjà occupée met le processus en attente jusqu'à sa libération.
-
Décrire un entrelacement des exécutions de P1 et de P2 qui provoque un interblocage. Préciser quelle ressource détient chaque processus et laquelle il attend.
-
Décrire un entrelacement des exécutions qui se termine normalement.
-
Expliquer pourquoi, dans la situation de la question 1, aucun des deux processus ne pourra progresser.
-
Proposer une modification de l'ordre des demandes de ressources qui élimine tout risque d'interblocage, et justifier.
Routage : RIP et OSPF
Un paquet envoyé de Lyon vers Nantes traverse plusieurs routeurs. Chaque routeur possède une table de routage : pour chaque destination, elle indique le prochain routeur à qui transmettre le paquet. Le réseau est modélisé par un graphe : les routeurs sont les sommets, les liaisons sont les arêtes.
Deux protocoles choisissent la route :
-
RIP minimise le nombre de sauts (nombre de liaisons traversées) ;
-
OSPF minimise le coût total, somme des coûts des liaisons. Le coût d'une liaison dépend de son débit : plus le débit est élevé, plus le coût est faible. Avec une valeur de référence de $10^9$ bit/s :
Par exemple, 1 Gbit/s donne un coût de 1, 100 Mbit/s donne 10, et 10 Mbit/s donne 100.
Pour aller de A à C : RIP choisit la liaison directe A–C (1 saut, mais coût 4). OSPF choisit A–B–C (2 sauts, coût $1+2=3$). Les deux protocoles ne donnent pas toujours la même route.
Trouver le plus court chemin
Pour OSPF, on cherche le chemin de coût minimal avec l'algorithme de Dijkstra, qui est le même que celui des plus courts chemins dans un graphe pondéré :
-
On donne la distance 0 au routeur de départ et $+\infty$ aux autres.
-
On retient le routeur non encore retenu de plus petite distance provisoire.
-
Pour chacun de ses voisins, on regarde si passer par lui donne une distance plus petite ; si oui, on met à jour la distance et on note le prédécesseur.
-
On recommence jusqu'à avoir retenu tous les routeurs.
Cinq routeurs R1, R2, R3, R4 et R5 sont reliés par les liaisons suivantes : R1–R2, R2–R3, R3–R4, R1–R5 et R5–R4. Le protocole de routage utilisé est RIP, qui minimise le…
Cinq routeurs R1, R2, R3, R4 et R5 sont reliés par les liaisons suivantes : R1–R2, R2–R3, R3–R4, R1–R5 et R5–R4. Le protocole de routage utilisé est RIP, qui minimise le nombre de sauts.
-
Donner le chemin choisi par RIP pour aller de R1 à R4 et le nombre de sauts correspondant.
-
Donner la table de routage de R1 sous la forme d'un tableau à trois colonnes : destination, prochain routeur, nombre de sauts. Les destinations sont R2, R3, R4 et R5.
-
La liaison R1–R5 tombe en panne. Donner le nouveau chemin de R1 à R4 et le nombre de sauts.
Cinq routeurs sont reliés par les liaisons suivantes. Dans le protocole OSPF, le coût d'une liaison est égal à $10^9$ divisé par son débit en bits par seconde. | Liaison…
Cinq routeurs sont reliés par les liaisons suivantes. Dans le protocole OSPF, le coût d'une liaison est égal à $10^9$ divisé par son débit en bits par seconde.
| Liaison | Débit |
|---|---|
| R1–R2 | 1 Gbit/s |
| R2–R3 | 100 Mbit/s |
| R1–R3 | 10 Mbit/s |
| R2–R4 | 1 Gbit/s |
| R4–R3 | 1 Gbit/s |
| R3–R5 | 100 Mbit/s |
| R4–R5 | 10 Mbit/s |
-
Calculer le coût de chacune des liaisons.
-
Donner la route choisie par RIP de R1 vers R5 et son coût total au sens d'OSPF.
-
Donner la route choisie par OSPF de R1 vers R5 et son coût total. Justifier en comparant avec au moins trois autres routes.
-
Expliquer pourquoi ce problème de routage est un problème de recherche d'un chemin de poids minimal dans un graphe pondéré.
Un réseau est constitué de cinq routeurs A, B, C, D et E. Les coûts OSPF des liaisons sont donnés par le dictionnaire suivant. 1. Dérouler à la main l'algorithme de…
Un réseau est constitué de cinq routeurs A, B, C, D et E. Les coûts OSPF des liaisons sont donnés par le dictionnaire suivant.
reseau = {
"A": {"B": 2, "C": 1},
"B": {"A": 2, "C": 2, "D": 5, "E": 10},
"C": {"A": 1, "B": 2, "D": 8},
"D": {"B": 5, "C": 8, "E": 3},
"E": {"B": 10, "D": 3},
}
-
Dérouler à la main l'algorithme de recherche de plus court chemin depuis A en présentant, à chaque étape, le routeur retenu et les distances provisoires mises à jour.
-
En déduire la table de routage de A : pour chaque destination, le coût total et le prochain routeur.
-
La liaison A–B tombe en panne. Recalculer la table de routage de A.
-
Comparer les coûts de A vers E avant et après la panne, et conclure sur la nécessité, pour OSPF, de recalculer les routes en cas de modification du réseau.
Chiffrement et HTTPS
Pour protéger un message, on le chiffre : on le transforme avec une clef pour qu'il devienne illisible. Seul le destinataire autorisé peut le déchiffrer. On dit « chiffrer » et « déchiffrer » ; « décrypter » désigne le fait de lire un message sans connaître la clef (casser le chiffrement).
Chiffrement symétrique
La même clef (une clef partagée) sert à chiffrer et à déchiffrer. Il est rapide, mais il pose un problème : comment transmettre la clef à son correspondant sans que quelqu'un l'intercepte ?
Exemple simple, le chiffrement de César avec la clef 3 : on décale chaque lettre de 3 positions dans l'alphabet, en revenant au début après Z.
Ce chiffrement est très faible : il n'existe que 25 clefs non triviales (de 1 à 25) et on peut toutes les essayer en un instant. C'est une attaque par force brute.
Autre exemple : le XOR
On chiffre un octet bit à bit avec le ou exclusif (XOR, noté $\oplus$) : $a \oplus b$ vaut 1 si $a$ et $b$ sont différents, 0 sinon. En Python : ^.
La propriété clef est $(a \oplus b) \oplus b = a$. Si $b=0$, on ne change rien deux fois. Si $b=1$, on inverse $a$ puis on l'inverse encore : on retrouve $a$. Donc chiffrer et déchiffrer sont la même opération avec la même clef.
Chiffrement asymétrique
Chaque personne possède deux clefs liées : une clef publique, que tout le monde peut connaître, et une clef privée, qu'elle garde secrète.
-
On chiffre avec la clef publique du destinataire.
-
Seul le destinataire déchiffre avec sa clef privée.
Le problème de la transmission de la clef disparaît : la clef publique n'a pas besoin d'être cachée. En contrepartie, le chiffrement asymétrique est bien plus lent que le symétrique.
Les deux ensemble : HTTPS
Le protocole HTTPS combine les deux. On utilise l'asymétrique, lent, pour s'échanger une clef, puis le symétrique, rapide, pour tout le reste. On simplifie ici la négociation (que le programme n'étudie pas en détail) :
-
Le serveur envoie sa clef publique au navigateur.
-
Le navigateur génère une clef symétrique aléatoire.
-
Le navigateur la chiffre avec la clef publique du serveur et l'envoie.
-
Le serveur la déchiffre avec sa clef privée. Lui seul le peut.
-
Les échanges suivants sont chiffrés avec la clef symétrique partagée.
Retour au début : quand Léa se connecte à sa banque, son navigateur et le serveur s'échangent une clef symétrique grâce à la clef publique du serveur ; ensuite tout est chiffré par cette clef partagée, et un espion qui capte les paquets ne lit rien.
On utilise le chiffrement de César avec la clef 3 : chaque lettre est remplacée par la lettre située 3 positions plus loin dans l'alphabet, en revenant au début après Z.…
On utilise le chiffrement de César avec la clef 3 : chaque lettre est remplacée par la lettre située 3 positions plus loin dans l'alphabet, en revenant au début après Z.
-
Chiffrer le mot « NSI ».
-
Déchiffrer le message « HQJLQH ».
-
Indiquer si ce chiffrement est symétrique ou asymétrique et justifier la réponse.
-
Expliquer pourquoi ce chiffrement est facile à casser en essayant toutes les clefs possibles. Donner le nombre de clefs non triviales à essayer.
Léa se connecte au site de sa banque en ligne par le protocole HTTPS. On décrit de façon simplifiée l'établissement de la communication. 1. Rappeler la différence entre…
Léa se connecte au site de sa banque en ligne par le protocole HTTPS. On décrit de façon simplifiée l'établissement de la communication.
-
Rappeler la différence entre un chiffrement symétrique et un chiffrement asymétrique, en précisant dans chaque cas quelle clef sert à chiffrer et quelle clef sert à déchiffrer.
-
Ordonner les étapes suivantes.
a) Le navigateur de Léa chiffre une clef symétrique avec la clef publique du serveur.
b) Une fois la clef publique du serveur reçue, le navigateur de Léa génère une clef symétrique aléatoire.
c) Les échanges suivants sont chiffrés avec la clef symétrique.
d) Le serveur déchiffre la clef symétrique reçue avec sa clef privée.
e) Le navigateur de Léa obtient la clef publique du serveur.
-
Expliquer pourquoi une personne qui intercepte la clef publique du serveur et la clef symétrique chiffrée ne peut pas retrouver la clef symétrique.
-
Expliquer pourquoi on utilise ensuite un chiffrement symétrique plutôt que de continuer avec le chiffrement asymétrique.
-
Dix personnes veulent pouvoir communiquer deux à deux de façon confidentielle avec un chiffrement symétrique, chaque paire disposant de sa propre clef. Calculer le nombre de clefs nécessaires. Comparer avec le nombre de paires de clefs nécessaires avec un chiffrement asymétrique, chaque personne disposant d'une paire (clef publique, clef privée).
On illustre le chiffrement symétrique par un chiffrement « ou exclusif » (XOR) avec une clef partagée. Pour deux bits $a$ et $b$, $a \oplus b$ vaut 1 si $a$ et $b$ sont…
On illustre le chiffrement symétrique par un chiffrement « ou exclusif » (XOR) avec une clef partagée. Pour deux bits $a$ et $b$, $a \oplus b$ vaut 1 si $a$ et $b$ sont différents et 0 sinon. L'opération s'applique bit à bit à des octets. En Python, l'opérateur correspondant est ^.
-
On considère le message $m = 01101001$ et la clef $k = 10110010$. Calculer $c = m \oplus k$, puis $c \oplus k$ et comparer avec $m$.
-
Justifier que, pour tous bits $a$ et $b$, $(a \oplus b) \oplus b = a$. En déduire que le même procédé permet de chiffrer et de déchiffrer.
-
On considère la fonction suivante.
def chiffre(texte, cle):
return [ord(c) ^ cle for c in texte]
a) Donner le résultat de `chiffre("NSI", 42)`. On rappelle que `ord("N")` vaut 78, `ord("S")` vaut 83 et `ord("I")` vaut 73.
b) Écrire une fonction `dechiffre(liste, cle)` qui renvoie le texte d'origine.
-
La clef est un entier compris entre 0 et 255. Donner le nombre de clefs possibles et expliquer pourquoi ce chiffrement est vulnérable à une attaque par force brute.
-
Pour une clef de 128 bits, donner le nombre de clefs possibles sous la forme d'une puissance de 2.
-
Expliquer pourquoi la clef partagée pose un problème de transmission entre les deux interlocuteurs, et décrire comment un chiffrement asymétrique permet de le résoudre dans le cadre d'une communication HTTPS.