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".
.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.
.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.
# Tests(insensible Ă la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)