Paquets en POO

On souhaite transféré un paquet au travers de routeurs dans un réseau informatique.

Voici un exemple de réseau
flowchart LR
    A([Lycee]) <--> B([Routeur1])
    B <--> E([Routeur2])
    C([Webcam]) <--> B
    D([Routeur3]) <--> G([Maison])
    D <--> E
    E <--> F([Routeur4])
    F <--> D

Ce paquet est modélisé par une classe Paquet, décrite ci-dessous :

classDiagram
class Paquet{
       arrivee : str
       passerelle : str
       duree_de_vie : int
       etat : "a_transferer"
       __str__()
}

Un paquet est caractérisé par :

  • son adresse du rĂ©seau de destination : arrivee de type str,
  • l'adresse de passerelle (Ă  savoir l'adresse de sa prochaine Ă©tape) : passerelle de type str,
  • sa durĂ©e de vie : duree_de_vie de type int,
  • et son Ă©tat, soit "a_transferer", soit "rejete", soit "arrive" : etat de type str.

Durée de vie

La durée de vie ou TTL (Time To Live) d'un paquet est un nombre entier placée au niveau de l'en-tête du paquet IP qui indique le nombre maximal de routeurs de transit.

Par défaut, la valeur est fixée à \(64\) et est décrémentée de \(1\) à chaque passage dans un routeur.

Quand il ce nombre arrive à \(0\), on considère que le paquet est perdu et le routeur le rejette.

En utilisant cette classe Paquet, les paquets suivants :

  • paquet1 qui a pour destination "Webcam" et depuis "Lycee",
  • paquet2 qui a pour destination "Maison" et depuis "Lycee".

Table de routage

Une table de routage associe pour chaque nœud d'arrivée la prochaine étape du chemin.

Ainsi la table de routage du Routeur2 est la suivante :

Destination Prochaine étape
Lycee Routeur1
Webcam Routeur1
Autres Routeur3

Dans la table de routage, on trouve une route par défaut, indiquée ici par "Autres".

Quand un paquet arrive sur un routeur, on vérifie si l'adresse est présente dans la table de routage et on trouve la prochaine étape. Si l'adresse n'est pas présente, on prend la route par défaut.

Ainsi, si un paquet arrive au Routeur2 avec pour adresse de destination Maison, il sera redirigé vers le Routeur3.

Les deux questions ci-dessous peuvent être traitées de façon indépendante.

Question 1

Créer une fonction routage qui prend en paramètre un paquet et une table de routage et qui modifie en place le paquet.

On certifie que le paquet passé en paramètre se trouve à l'état "a_transferer".

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 5/5

.128013oPf 8lkg5:j,bry2a1Ah3tvw=u6e[(Sn9]_s-c)7iqm./4p0d050X0C0w0r0P0g0K0e0M0g0r0K0K0z010w0P0V010406050K0A0R0R0r0o0p040F0b0g0A0=0b0G050T0|0~10120`0V04051i1b1l0T1i0`0X0P0x0*0,0.0:0,0G0i0A0r0i0C0L0V0p0w0u190e0u0P0i0u0g1N0u0w0^050#0n0g0C1u0-0/011M1O1Q1O0w1W1Y1U0w0o1j1I0*150K0V0r0G0:0q011!1w010d0%0C0G0r0R0C1U1_1{201$231Y26280^0a0e0c0o0b0V0b0K0P180G0e0Z1@0o0o0C0M2t1b2b0G1j0T1I2G1:1=1;1V0X2d1x0P0G252q1U1r1t0+1#2Q2S0G0b2W1U0V2z1j2E2G2-0{1`2u2Y212$0o0 0g1U0r1L2z0d0:030J0J0M2%0C1Q2#0b0L0W0L0s0^0e0s1b0r2.2;0_2:2c2?1$2^2`2|2~0C3001323436382T3b0L1~040e0q3i3k1{3m2E2P013r0r2{1j2}0u2 3133350Z3B2$3D0v3f0v3J2D3l0`3N3p0:3Q3S053U3W3x3Y3A2R3C3c0U3f0U3+1c3-3n2=1v3q0b2_3R3t3V3v3X3z3!3}3$3c0j3f0j432-3.2;3O3=4d3_3y3Z374j3a3c0B3f0B4p453/483;4a3s3T3u3w4x3|393D0O3f0O4G3L4r3o4J3P4L4c4N4e4P3{4i4S3c0f3f0f4X2F4Z472Z4$4b3?3^4f3`4h4z4.0L0H3f0H4?3M4s3:4{4M3@4O4g4y3#4B3d0W0^0s0W581m2+1b2W2J0X1=2O5b4y2V1s1j2*0C2,3l3,3L054y5F2c0P0X0:332E3D3e4N5N5P515i5S1 2h0C5W5h4A5Z2G3j463O0h0^0Z0d5H2F5-5b0y3f5?5L4_2@0d0^2n171C0C5|5^4#0@040E664I4`0G0^1`0Q0A0!6c5a680^0m5|0e676e0^1-65445I6d21690N0k6q0`6x5@3N5V015Q2;3D3F5e6J4,523~3E5!275$6K5X5)3c6O0T3j0e6)6r6z1$5/040P5=6G3G6s2@6g0r6i6k6=6@1$0b0^0S6l4!6t04100o1s0C6w2-6+6m4`0b5`6/1a6=7d746^046v735~1$696D6=6F2/6I5O6Y5R3c3(5U7z6R5Y7C6V285%4R6T7D3J6*7Q7l7r3;6_6{0w7q3O7004726}6,7U041`0.0C2z0g1Y6q6~0:7!0z7;7(3P6u0r1X7b5G7`690D7Y5b6f7*6`6j7X7%7e217!7$7x8c3q0^77797 6y8h0:690I5|7w804s6Q0J7B0L407E7L4-6T400e5#8C6S4k8z1U6%3G6*7=016.370K8m6H8o017t8s7Y8w8y4m8B6Y5(534m8G6W8I7H0L8(7P7R6)8Q866h89844#8e8~757+8U7.7:7k8Q7@7_8X867p8b7m7s0^839e7T010K3F010t172z0K01916A0^8r7v8#7F8x6M4C3t8w8+6T4D8.7K8*7M8K4D5+8O8_7`8{886|8g9f7?719u8i040X0A2z0C0J0Z0J0x0P8V6?7`7!0L7^977`0R0P5m8!9j0e8$9C0L4U8)7G6!a37J6Xa653a48@9R8X6.6:9a9X7{877W9!9Y7#aoal937-37967c980^0z9^ax9S7V8}9 5b90aG4#868k0x7aar8Z9y9 a11{3D4:a56Z534:9JaaaY6TaWae7R8`aE9V8uakaI9W9k860!0r8aaC8X999_8X9m0^01aM299~a=a09A8y55aX9G8K55a#8:a7baa*8Q8S1Q6;a{ak9TanaJ7f9Zbs7n9%9)9+9*9.9:7S7ZazaB3lbD5b9{0^5obv9g047u4q9z5W8y5n9E9Abc5jbVbf9L8D8KbV9P8^afbpa-a`a/9ka;b:4t0^a^b/3LbI8 azaj9kb004012z0l0!b4aR2/0T5K5q5E5s5B1b0w5vcg2M2H7}1Y2G5t6F0Z0#0%0K04.

On représente l'ensemble du réseau par un dictionnaire dans lequel :

  • les clĂ©s sont les chaĂ®nes de caractères correspondant aux noms des nĹ“uds,

  • les valeurs associĂ©es sont des dictionnaires reprĂ©sentant la table de routage du nĹ“uds correspondant.

Question 2

Créer une fonction transfert_paquet qui prend en paramètre un paquet et une table de routage et qui renvoie une chaine de caractères représentant l'état du paquet à la fin du routage.

Une fonction routage est chargée en mémoire. La question peut donc être traitée sans que la précédente soit résolue.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 5/5

.128013oPf lkg:,bry2a1h3tvw=ue[(Sn]_s-c)iqm./4pd050P0x0s0o0I0f0E0e0G0f0o0E0E0v010s0I0O010406050E0w0K0K0o0l0m040A0b0f0w0*0b0B050M0;0?0^0`0/0O04051a131d0M1a0/0P0I0t0Y0!0$0(0!0B0h0w0o0h0x0F0O0m0s0q110e0q0I0h0q0f1F0q0s0-050T0k0f0x1m0#0%011E1G1I1G0s1O1Q1M0s0l1b1A0Y0}0E0O0o0B0(0n011S1o010d0V0x0B0o0K0x1M1.1:1^1U1{1Q1~200-0a0e0c0l0b0O0b0E0I100B0e0R1,0l0l0x0G2l13230B1b0M1A2y1(1*1)1N0P251p0I0B1}2i1M1j1l0Z1T2I2K0B0b2O1M0O2r1b2w2y2#0:1/2m2Q1_2U0l0@0f1M0o1D2r0d0(030D0D0G2V0x1I2T0b0F0p330-0p130o2$2)0.2(242+1U2-2/2;2?0x2^012`2|2~302L330F1?040n383a1:3c2w2H013h0o2:1b2=0q2@2_2{2}0R3r2U3t0r0-0r3y2v3b0/3C3f0(3F3H053J3L3n3N3q2J3s340N0-0N3W143b1e2Z132O2B0P1*2G3#013O211b3~1c3|2%3_3A05452!2)0e0I0P0(2{2w3t0p3j4j4l3p3P3/3R344p0e290x4s453Q324x1M0M393d2*1n1U0g0-0R0d3X4d3!4M0(0u0-0e4S2x4K3D0B0d0-1(1:0E0d0x0l0s0D1/0J0w0S4!4g3e4V010,040z4`4$430B0-4?4^0s524U2R4~0-0j4`4Z5b2,0-2r0E0x0o0w5a4h434 0H0i4`0/4c4#3C4r014m2)3t3v3)4i4k5C4t2 4v4F3u1@4A4C3.315F4H390e5Y5h5r4}4O040u1E1Q5g534}5504574_5y4{4L5c0b0-0L5q4|5c5/0S0o595?5-5_0-0v0v5}5^1_0E3v010o0D4+0B4-4/4/016a3D4 5v5?5x2%5A5J5D1:3S4q6w5L4E6z4z1 4B5K4D5N6z2y5X5Z6O655j042f0 1u0x6o5s0-51645i3g560o4@5=6u5#5c4 5f5?5!5~6R5l5n5p6#6-1_4 0y6X5.6(6*636,6?1U5`045|6{763$6(0$6l0f5+7b6b1U4 0C0H5w6o5B6x0B3t3=3I5I5S4u5U3;5Q6G7y5M7A0F7v3y6P6$0(5%2r0s0w0l126;6Q6%5:6)587066797Z6R61743Y520M4f3{0x2y482z40132C7@0o1P7/3}1k3c0M0R0T0V0E04.