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

.128013Ait3a;dv,n2.S5wbcy14q: f-up08)_j9eklohrP=[s6(]/mg7050h0I0d0f0c0K0R0x0r0K0f0R0R0P010d0c0B010406050R0A0W0W0f0N0s040n0L0K0A0?0L0k050V0}0 11130{0B04051j1c1m0V1j0{0h0c0i0+0-0/0;0-0k0X0A0f0X0I0z0B0s0d0M1a0x0M0c0X0M0K1O0M0d0_050$0q0K0I1v0.0:011N1P1R1P0d1X1Z1V0d0N1k1J0+160R0B0f0k0;0l011#1x010y0(0I0k0f0W0I1V1`1|211%241Z27290_0a0x0O0N0L0B0L0R0c190k0x0!1^0N0N0I0r2u1c2c0k1k0V1J2H1;1?1=1W0h2e1y0c0k262r1V1s1u0,1$2R2T0k0L2X1V0B2A1k2F2H2.0|1{2v2Z222%0N100K1V0f1M2A0y0;030F0F0r2(0I1R2$0L0z0C0z0t0_0x0t1c0f2/2=0`2;2d2@1%2_2{2}2 0I3101333537392U3c0z1 040x0l3j3l1|3n2F2Q013s0f2|1k2~0M303234360!3C2%3E0e3g0e3K2E3m0{3O3q0;3R3T053V3X3y3Z3B2S3D3d0u3g0u3,1d3.3o2?1w3r0L2`3S3u3W3w3Y3A3#3~3%3d0o3g0o442.3/2=3P3?4e3`3z3!384k3b3d0S3g0S4q463:493=4b3t3U3v3x4y3}3a3E0Y3g0Y4H3M4s3p4K3Q4M4d4O4f4Q3|4j4T3d0D3g0D4Y2G4!482!4%4c3@3_4g3{4i4A4/0z0H3g0H4@3N4t3;4|4N3^4P4h4z3$4C3e0C0_0t0C591n2,1c2X2K0h1?2P5c4z2W1t1k2+0I2-3m3-3M054z5G2d0c0h0;342F3E3f4O5O5Q525j5T202i0I5X5i4B5!2H3k473P0J0_0!0y5I2G5.5c0p3g5@5M4`2^0y0_2o181D0I5}5_4$0^040T674J4{0k0_1{0v0A0#6d5b690_0j5}0x686f0_1.66455J6e226a0E0w6r0{6y5^3O5W015R2=3E3G5f6K4-533 3F5#285%6L5Y5*3d6P0V3k0x6*6s6A1%5:040c5?6H3H6t2^6h0f6j6l6?6^1%0L0_0m6m4#6u04110N1t0I6x2.6,6n4{0L5{6:1b6?7e756_046w745 1%6a6E6?6G2:6J5P6Z5S3d3)5V7A6S5Z7D6W295(4S6U7E3K6+7R7m7s3=6`6|0d7r3P7104736~6-7V041{0/0I2A0K1Z6r6 0;7#0P7=7)3Q6v0f1Y7c5H7{6a0Q7Z5c6g7+6{6k7Y7(7f227#7%7y8d3r0_787a806z8i0;6a0U5}7x814t6R0F7C0z417F7M4.6U410x5$8D6T4l8A1V6(3H6+7?016/380R8n6I8p017u8t7Z8x8z4n8C6Z5)544n8H6X8J7I0z8)7Q7S6*8R876i8a854$8f8 767,8V7/7;7l8R7^7`8Y877q8c7n7t0_849f7U010R3G026j0L0d0g0b182A0R9p0A9r0g926B0_8s7w8$7G8y6N4D3u8x8,6U4E8/7L8+7N8L4E5,8P8`7{8|896}8h9g7@729C8j040h0A2A0I0F0!0F0i0c8W6@7{7#0z7_987{0W0c5n8#9k0x8%9K0z4V8*7H6#ab7K6Yae54ac8^9Z8Y6/6;9b9)7|887X9,9*7$awat947.38977d990_0Pa0aF9!7W8~a75c91aO4$878l0i7baz8!9Ga7a91|3E4;ad6!544;9Raia*6Ua(am7S8{aM9%8vasaQ9(9l870#0f8baK8Y9aa18Y9n0_9y9AaU0Iba9sa6a}a89I8z56a)9O8L56a-8;afbla=8R8T1R6=b3as9#avaR7g9+bD7o9/9;9?9=9_9{7T7!aHaJ3mbO5ca30_5pbG9h047v4r9H5X8z5o9M9Ibn5kb*bq9T8E8Lb*9X8_anbAa^b2a`9la|b~4u0_b0b}3MbT90aHar9lb804be0g2A0G0#bd9qbfaZ2:0V5L5r5F5t5C1c0d5wcu2N2I7~1Z2H5u6G0!0$0(0R04.

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

.128013it3a;dv,n2.Swbcy14q: f-up)_elohrP=[s(]/mgk050g0C0c0e0b0D0K0v0p0D0e0K0K0I010c0b0z010406050K0y0O0O0e0G0q040m0E0D0y0+0E0j050N0=0@0_0{0:0z04051b141e0N1b0:0g0b0h0Z0#0%0)0#0j0P0y0e0P0C0x0z0q0c0F120v0F0b0P0F0D1G0F0c0.050U0o0D0C1n0$0(011F1H1J1H0c1P1R1N0c0G1c1B0Z0~0K0z0e0j0)0k011T1p010w0W0C0j0e0O0C1N1/1;1_1V1|1R1 210.0a0v0H0G0E0z0E0K0b110j0v0S1-0G0G0C0p2m14240j1c0N1B2z1)1+1*1O0g261q0b0j1~2j1N1k1m0!1U2J2L0j0E2P1N0z2s1c2x2z2$0;1:2n2R1`2V0G0^0D1N0e1E2s0w0)030B0B0p2W0C1J2U0E0x0r340.0r140e2%2*0/2)252,1V2.2:2=2@0C2_012{2}2 312M340x1@040k393b1;3d2x2I013i0e2;1c2?0F2^2`2|2~0S3s2V3u0d0.0d3z2w3c0:3D3g0)3G3I053K3M3o3O3r2K3t350s0.0s3X153c1f2!142P2C0g1+2H3$013P221c3 1d3}2(3`3B05462#2*0v0b0g0)2|2x3u0r3k4k4m3q3Q3:3S354q0v2a0C4t463R334y1N0N3a3e2+1o1V0Q0.0S0w3Y4e3#4N0)0n0.0v4T2y4L3E0j0w0.1)1;0K0w0C0G0c0B1:0t0y0T4#4h3f4W010-040L4{4%440j0.4@4_0c534V2S4 0.0i4{4!5c2-0.2s0K0C0e0y5b4i44500A0u4{0:4d4$3D4s014n2*3u3w3*4j4l5D4u304w4G3v1^4B4D3/325G4I3a0v5Z5i5s4~4P040n1F1R5h544~5604584`5z4|4M5d0E0.0l5r4}5d5:0T0e5a5@5.5`0.0I0I5~5_1`0K3w024^0E0c0f0e0B4,0j4.4:4:6g0y6i0f6b3E505w5@5y2(5B5K5E1;3T4r6E5M4F6H4A204C5L4E5O6H2z5Y5!6W665k042g101v0C6w5t0.52655j3h570e4^5?6C5$5d505g5@5#5 6Z5m5o5q6-6^1`500J6)5/6:6=646@6~1V5{045}737e3%6:0%6q0D5,7j6c1V500M0A5x6w5C6F0j3u3?3J5J5T4v5V3=5R6O7G5N7I0x7D3z6X6.0)5(2s0c0y0G136|6Y6/5;6;5978677h7+6Z627c3Z530N4g3|0C2z492A41142D7 0e1Q7`3~1l3d0N0S0U0W0K04.