This shows you the differences between two versions of the page.
rl:labs:02:contents:01 [2022/10/18 14:04] cosmin.prunaru [01. [M][10p] Switch vs. Hub] |
rl:labs:02:contents:01 [2023/10/17 10:51] (current) vlad_iulius.nastase [01. [10p] Implementare Hub] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ==== 01. [10p] Switch vs. Hub ==== | + | ==== 01. [15p] Implementare Hub ==== |
- | **Topologie**: {{:rl:labs:02:contents:rl_2022-2023_laborator-02_01.pkt|download}}. | + | Vom implementa in Python funcționalitatea de baza a unui Hub. Cum am vazut si in cadrul laboratorului anterior, pentru fiecare frame primit, hub-ul îl trimite pe toate interfețele (link sau port). Mai jos gasim o descriere in pseudocod: |
- | * Vrem să urmărim diferențele între switch și hub. Vom simula transmiterea de pachete între stații folosind o topologie PacketTracer în care se află 2 rețele cu câte 4 calculatoare fiecare. Diferența între topologii este dispozitivul de interconectare: una este cu un **switch**, iar cealaltă este cu un **hub**. | + | <code> |
- | * Așteptați ca porturile din switch să lumineze cu verde (**nu** cu portocaliu) și apoi trimiteți pachete între oricare 2 calculatoare în cele 2 topologii pentru a vă asigura că există conectivitate. (luminează cu portocaliu timp de circa 30 de secunde până când se definitivează rularea **STP** - //Spanning Tree Protocol//) | + | while hub is powered on: |
- | * După ce ati verificat existența conectivității, intrați în modul **Simulation** și trimiteți câte un pachet între 2 calculatoare. Faceți acest lucru pentru ambele rețele. Observați ce pachete sunt generate în rețea în fiecare caz. | + | for each port: |
+ | if there is incoming data: | ||
+ | read the incoming data | ||
+ | for each other port: | ||
+ | send the data to that port | ||
+ | </code> | ||
- | * Ce puteți spune despre diferența dintre switch și hub? | + | In acest exercițiu vom implementa un Hub in Python pornind de la un API simplu de primire si trimitere de frame-uri Ethernet. Vom porni |
- | * La ce nivel din stiva OSI rulează fiecare? | + | de la scheletul de la [[https://gitlab.cs.pub.ro/rl/schelet-hub|urmatoarea adresa]]. Tot acolo, gasiti in **README.md** detalii despre rularea scheletului. Implementarea se va face in **hub.py**, in dreptul celor doua TODO-uri. |
+ | |||
+ | <code Python> | ||
+ | # data este de tip byte array | ||
+ | interface, data, length = recv_from_any_link() | ||
+ | send_to_link(interface, data, length) | ||
+ | </code> | ||
+ | |||
+ | <hidden> | ||
+ | <code Python> | ||
+ | def main(): | ||
+ | interfaces = range(0, wrapper.init() + 1) | ||
+ | |||
+ | while True: | ||
+ | interface, data, length = recv_from_any_link() | ||
+ | |||
+ | print("Received frame of size {} on interface {}".format(length, interface)) | ||
+ | |||
+ | for i in interfaces: | ||
+ | if i != interface: | ||
+ | print("Forwarding to interface {}".format(i)) | ||
+ | send_to_link(i, data, length) | ||
+ | </code> | ||
+ | </hidden> |