Differences

This shows you the differences between two versions of the page.

Link to this comparison view

rl:teme:tema1_sw [2024/10/24 21:58]
vlad_andrei.badoiu [Cerinte]
rl:teme:tema1_sw [2024/11/02 13:52] (current)
vlad_andrei.badoiu
Line 3: Line 3:
 === Lectura recomandata === === Lectura recomandata ===
  
-  * **Cursul si laboratorul de VLAN & STP**+  * Tema ar trebui facuta doar dupa ce ati parcurs ​**Cursul si laboratorul de VLAN & STP**
  
   * [[https://​beta.computer-networking.info/​syllabus/​default/​protocols/​lan.html?​highlight=spanning%20tree%20protocol#​ethernet-switches|Ethernet Switches]]   * [[https://​beta.computer-networking.info/​syllabus/​default/​protocols/​lan.html?​highlight=spanning%20tree%20protocol#​ethernet-switches|Ethernet Switches]]
Line 83: Line 83:
  
 Protocolul [[https://​www.ietf.org/​rfc/​rfc2674.txt|IEEE 802.1Q]] este folosit pentru a introduce sistemul de marcare VLAN (VLAN tagging) în Ethernet, sub forma unei extensii a antetului (header-ului) Ethernet. În imaginea de mai jos putem observa că au fost introduși 4 octeți (bytes). De interes pentru noi este câmpul VID pe 12 biți, ce reprezintă identificatorul VLAN-ului din care cadrul face parte. Protocolul [[https://​www.ietf.org/​rfc/​rfc2674.txt|IEEE 802.1Q]] este folosit pentru a introduce sistemul de marcare VLAN (VLAN tagging) în Ethernet, sub forma unei extensii a antetului (header-ului) Ethernet. În imaginea de mai jos putem observa că au fost introduși 4 octeți (bytes). De interes pentru noi este câmpul VID pe 12 biți, ce reprezintă identificatorul VLAN-ului din care cadrul face parte.
-De acum, cand ne vom referi la un pachet cu header-ul 802.1qinseamna ca include acesti ​bytes.+De acum înaintecând ne vom referi la un pachet cu header-ul 802.1Qvom înțelege că este vorba despre un cadru Ethernet plus acești ​byți.
  
 {{ :​rl:​teme:​ethernet_802.png?​600 |}} {{ :​rl:​teme:​ethernet_802.png?​600 |}}
Line 89: Line 89:
 {{ :​rl:​teme:​tag_format.png?​400 | }} {{ :​rl:​teme:​tag_format.png?​400 | }}
  
-Switch-ul cand **primeste** un cadru de pe interfata ​de tip **access** (dinspre host) va comuta cadrul mai departe astfel: +Switch-ul cand **primeste** un cadru de pe orice interfata va comuta cadrul mai departe astfel:
-  * cu header-ul 802.1q daca se duce pe o interfata de tip trunk (catre un switch) +
-  * fara header-ul 802.1q daca se duce pe o interfata de tip access si VLAN ID egal cu cel al interfetei de pe care a venit (catre un host direct conectat la switch, pare a aceluiasi VLAN)+
  
-Switch-ul de fiecare data cand **primeste** ​un cadru de pe o interfata ​de tip **trunk** ​va comuta cadrul mai departe astfel:+  * cu header-ul 802.1Q dacă se transmite pe un port de tip trunk (către un switch). De notat că, în funcție de portul sursă, cadrul primit poate fi sau nu în format 802.1Q. De exemplu, dacă este un cadru primit pe un port trunk, atunci acesta va fi în format 802.1Q. În schimb, dacă este un cadru primit ​de pe o interfață ​de tip access, acesta nu va avea header 802.1Q, iar implementarea noastră de switch va trebui să îl adauge. 
 +  * fără header-ul 802.1Q dacă se transmite pe o interfață de tip access și VLAN ID-ul este egal cu cel al interfeței de pe care a venit (către un host direct conectat la switch, parte a aceluiași VLAN)
  
-  * cu header-ul de 802.1q daca se duce pe o interfata de tip trunk +Nu vom comuta cadrele atunci ​când VLAN ID port destinație ​!= VLAN ID cadru.
-  * fara header-ul de 802.1q daca se duce pe o interfata de tip access si VLAN ID egal cu cel al cadrului primit +
- +
-Nu vom comuta cadrele atunci ​cand VLAN ID port destinatie ​!= VLAN ID cadru.+
  
 Stațiile din simulare rulează Linux, iar stiva de networking din Linux face VLAN filtering, pentru a nu pierde eticheta VLAN (VLAN tag), vom folosi pentru TPID valoarea **0x8200** în loc de **0x8100**. Practic vom avea o implementare custom de 802.1q. Câmpurile PCP și DEI vor fi setate la valoarea 0. Stațiile din simulare rulează Linux, iar stiva de networking din Linux face VLAN filtering, pentru a nu pierde eticheta VLAN (VLAN tag), vom folosi pentru TPID valoarea **0x8200** în loc de **0x8100**. Practic vom avea o implementare custom de 802.1q. Câmpurile PCP și DEI vor fi setate la valoarea 0.
Line 307: Line 303:
 Pentru rezolvarea temei, trebuie să implementați funcționalitatea unui switch. Va recomandăm să folosiți cel puțin ping pentru a testa implementarea și **Wireshark** pentru depanare și analiză corectitudinii. Punctajul este împărțit în mai multe componente, după cum urmează: Pentru rezolvarea temei, trebuie să implementați funcționalitatea unui switch. Va recomandăm să folosiți cel puțin ping pentru a testa implementarea și **Wireshark** pentru depanare și analiză corectitudinii. Punctajul este împărțit în mai multe componente, după cum urmează:
  
-  * **Procesul de comutare (30p)**. Va trebui ​sa implementați funcționalitatea descrisă ​in secțiunea **Procesul de Comutare**. Pentru acest exercițiu nu este nevoie ​sa implementați funcționalitatea referitoare la VLAN sau STP. Pentru a evita buclele, vom porni doar switch-urile 0 si 1. +  * **Procesul de comutare (30p)**. Va trebui ​să implementați funcționalitatea descrisă ​în secțiunea **Procesul de Comutare**. Pentru acest exercițiu nu este nevoie ​să implementați funcționalitatea referitoare la VLAN sau STP. Pentru a evita buclele, vom porni doar switch-urile 0 și 1. 
-  * **VLAN (30p)**. Vom implementa funcționalitatea de Virtual Local Area Networks (VLANs). Fișierele de configurație ale switch-urilor se găsesc ​in directorul **configs**. Pentru a evita buclele, vom porni doar switch-urile 0 si 1.+  * **VLAN (30p)**. Vom implementa funcționalitatea de Virtual Local Area Networks (VLANs). Fișierele de configurație ale switch-urilor se găsesc ​în directorul **configs**. Pentru a evita buclele, vom porni doar switch-urile 0 si 1.
   * ** STP (40p)**. In acest exercițiu vom introduce si switch-ul 2, care va determina apariția unei bucle. Se cere implementarea protocolului STP simplificat,​ descris in enunț, pentru a evita trimiterea pachetelor la infinit. ​   * ** STP (40p)**. In acest exercițiu vom introduce si switch-ul 2, care va determina apariția unei bucle. Se cere implementarea protocolului STP simplificat,​ descris in enunț, pentru a evita trimiterea pachetelor la infinit. ​
  
Line 316: Line 312:
 </​note>​ </​note>​
  
 +<​note>​
 Puteți scrie implementarea în Python sau C/C++. Daca lucrati in C/C++ va trebui sa schimbati regula de rulare a switch-ului din **Makefile**. Puteți scrie implementarea în Python sau C/C++. Daca lucrati in C/C++ va trebui sa schimbati regula de rulare a switch-ului din **Makefile**.
 </​note>​ </​note>​
Line 362: Line 359:
 ==== Trimitere ==== ==== Trimitere ====
  
-Pentru a fi notată în catalog, tema va fi trimisă pe Moodle, unde checker-ul va fi rulat automat și va pune la feedback nota și output-ul rulării. Arhiva (zip) trebuia să includă un fisier numit **README** în care să detaliați implementarea,​ și fișierul python switch.py în care ați făcut rezolvarea. ​**În fișierul README va trebui să specificați pe prima linie ce cerințe ați făcut ​în format ​'1 2 3' ​(toate), ​`1 2sau `1`.**+Pentru a fi notată în catalog, tema va fi trimisă pe Moodle, unde checker-ul va fi rulat automat și va pune la feedback nota și output-ul rulării. Arhiva (zip) trebuia să includă un fisier numit **README** în care să detaliați implementarea,​ și fișierul python switch.py în care ați făcut rezolvarea. În fișierul README va trebui să specificați pe prima linie cerințele rezolvate ​în format ​**1 2 3** (toate), ​**1 2** sau **1**.
  
 O rulare completă durează cam 9 minute. Vă rugăm să trimiteți tema pe Moodle doar după ce ați verificat că aceasta rulează bine pe local. O rulare completă durează cam 9 minute. Vă rugăm să trimiteți tema pe Moodle doar după ce ați verificat că aceasta rulează bine pe local.
Line 378: Line 375:
 </​note>​ </​note>​
 ==== FAQ ==== ==== FAQ ====
 +
 +**Q:** Ce versiune de python ruleaza checker-ul de pe Moodle?
 +
 +**A:​** ​
 +  Python 3.8.10 (Atentie la ce functionalitati folositi)
 +
 +**Q:** Pe Moodle primesc punctaj 0, pe local 100.
 +**A:** Cele mai intalnite probleme sunt faptul ca arhiva trimita nu contine in root-ul ei fisierul switch.py (acesta e intr-un subdirector) sau de la versiune de python rulata pe checker
 +
 +**Q:** Cum știu ce fișier de config sa citesc?
 +
 +**A:** Primul argument pe care îl primește switch-ul la rulare este identificatorul (switch_id = sys.argv[1])
 +
 +**A:** Nu se aplica depunctări pentru coding style
  
 **Q:** Pe local am mai multe puncte decât pe checkerul online **Q:** Pe local am mai multe puncte decât pe checkerul online
Line 421: Line 432:
  
 **A:** Atentie la conceptul de stare. De exemplu, testul `ICMP_0_3_NOT_ARRIVES_2` este rulat in contextul in care si celelalte teste au fost rulate, astfel au fost trimise mai multe ping-uri pana la rularea acestui test. **A:** Atentie la conceptul de stare. De exemplu, testul `ICMP_0_3_NOT_ARRIVES_2` este rulat in contextul in care si celelalte teste au fost rulate, astfel au fost trimise mai multe ping-uri pana la rularea acestui test.
 +
 +In fisierul Dockerfile gasiti imaginea docker folosita pe vmchecker.
 +
 +<code Bash>
 +docker build -f Dockerfile -t tema1 .
 +
 +docker run --privileged -v .:/data/ -it tema1 /bin/bash
 +
 +# Din bash-ul deschis in container rulati vom rula asa:
 +
 +cd /data/
 +ulimit -c 1024
 +/bin/bash -c "​ulimit -c 1024 ; python3 checker/​topo.py tests"
 +
 +# inspectati switch_0_err dupa ce a picat testul cu probleme
 +</​code>​
rl/teme/tema1_sw.1729796296.txt.gz · Last modified: 2024/10/24 21:58 by vlad_andrei.badoiu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0