This shows you the differences between two versions of the page.
|
rl:teme:tema1_sw [2025/10/31 11:23] vlad_andrei.badoiu |
rl:teme:tema1_sw [2025/10/31 18:11] (current) radu.mantu |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | f<hidden> | + | <hidden> |
| ====== Tema 1 - Implementare Switch ====== | ====== Tema 1 - Implementare Switch ====== | ||
| Line 76: | Line 76: | ||
| În contextul suportului VLAN apare următoarea terminologie: un port de tip **trunk** este un port prin care pot fi transmise cadre din mai multe VLAN-uri și se află între două switch-uri, în timp ce un port de tip **access** este un port care conectează un host la switch. | În contextul suportului VLAN apare următoarea terminologie: un port de tip **trunk** este un port prin care pot fi transmise cadre din mai multe VLAN-uri și se află între două switch-uri, în timp ce un port de tip **access** este un port care conectează un host la switch. | ||
| - | {{:rl:teme:vlans-33-768x532.png?400|}} | + | {{ :rl:teme:t1_new_topo.png?500 | }} |
| + | |||
| + | <html><center><i> | ||
| + | Topologia implementată în mininet. Valorile numerice scrise în roșu pe link-uri reprezinta VID-ul tip 802.1Q.<br> | ||
| + | Partiționarea rețelei pe baza VID-ului extins (unde se ia în calcul adresa MAC) este reprezentată prin culorile sistemelor H0-H5.<br> | ||
| + | Citiți restul cerinței pentru mai multe detalii. | ||
| + | </i></center></html> | ||
| <note> | <note> | ||
| - | VLAN-ul este configurat la nivelul portului de switch, nu la nivelul unui host, chiar dacă în multe reprezentări grafice stațiile sunt ilustrate ca făcând parte dintr-un VLAN. | + | În mod normal, VLAN-ul este configurat la nivelul portului de switch, nu la nivelul unui host, chiar dacă în multe reprezentări grafice stațiile sunt ilustrate ca făcând parte dintr-un VLAN. |
| + | |||
| + | În acest task, vom încălca acest principiu. | ||
| </note> | </note> | ||
| - | 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 înteres pentru noi este câmpul VID pe 12 biți, ce reprezintă identificatorul VLAN-ului din care cadrul face parte. |
| - | De acum înainte, când ne vom referi la un pachet cu header-ul 802.1Q, vom înțelege că este vorba despre un cadru Ethernet plus acești 4 byți. | + | De acum înainte, când ne vom referi la un pachet cu header-ul 802.1Q, vom înțelege că este vorba despre un cadru Ethernet plus acești 4 octeți. |
| - | {{ :rl:teme:ethernet_802.png?600 |}} | + | {{ :rl:teme:ethernet_802.png?600 | }} |
| {{ :rl:teme:tag_format.png?400 | }} | {{ :rl:teme:tag_format.png?400 | }} | ||
| - | Switch-ul cand **primeste** un cadru de pe orice interfata va comuta cadrul mai departe astfel: | + | Noi vom implementa un sistem custom de VLAN tagging similar cu 802.1Q. Acesta se va distinge prin două aspecte: |
| + | * **TPID**-ul va fi //0x8200//. | ||
| + | * Biții **PCP** și **DEI** for fi reutilizați ca extensie pentru câmpul **VID**. Acesta din urmă va contine in continuare tag-ul de VLAN configurat pe portul switch-ului, dar cei mai semnificativi biți din **TCI** vor lua valoarea sumei [[https://en.wikipedia.org/wiki/Nibble|nibble]]-urilor adresei MAC a host-ului asociat access port-ului. Overflow-ul sumei poate fi ignorat. | ||
| - | * 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. | + | Switch-ul cand **primește** un cadru de pe orice interfata va comuta cadrul mai departe astfel: |
| - | * 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) | + | |
| - | Nu vom comuta cadrele atunci când VLAN ID port destinație != VLAN ID cadru. | + | * Cu header-ul nostru custom (802.1Q-like) 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 să conția deja acest tag. De exemplu, dacă este un cadru primit pe un port trunk, atunci acesta va fi tagged. În schimb, dacă este un cadru primit de pe o interfață de tip access, acesta nu va avea header-ul //EtherType=0x8200//, iar implementarea noastră de switch va trebui să îl adauge. |
| + | * Fără header-ul custom dacă se transmite pe o interfață de tip access. Comutarea pachetului este condiționată de verificarea câmpului **VID extins**. VID-ul stocat în cadru trebuie sa fie egal cu cel configurat pe portul switch-ului, iar cei mai semnificativi 4 biți din TCI trebuie să coincidă cu suma nibbleurilor adresei MAC a host-ului conectat pe portul respectiv. Pentru a simplifica implementarea, extensia de 4 biți poate fi ignorată daca frame-ul este multicast sau dacă adresa MAC a host-ului incă nu a fost adaugată in tabela CAM. | ||
| - | 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. | + | <note tip> |
| + | Un exemplu de calcul a extensiei de VID pentru host-ul H5 cu MAC-ul **de:ad:be:ef:09:01**: | ||
| + | |||
| + | <code> | ||
| + | (0xd + 0xe + 0xa + 0xd + 0xb + 0xe + 0xe + 0xf + 0x9 + 0x1) & 0xf = 114 & 0xf = 0x2 | ||
| + | </code> | ||
| + | |||
| + | Deoarece VLAN ID-ul clasic configurat pe switch este **2**, VID-ul extins va fi **0x2002**. | ||
| + | </note> | ||
| **Atentie, nu uitati ca dimensiunea cadrului creste cu 4 bytes** | **Atentie, nu uitati ca dimensiunea cadrului creste cu 4 bytes** | ||
| Line 171: | Line 189: | ||
| <note> | <note> | ||
| - | Pentru a fi punctat acest subpunct, cadrele trebuie să respecte indicațiile de mai sus. Pentru fiecare valoare din cadru care nu este exact specificată în enunț (e.g., pentru cele unde se specifică că valoarea este conform 802.1D-2004), va trebui să argumentați decizia și să includeți o referință. Fie un link, fie un PDF în arhivă în directorul sources. Sursa trebuie să includă locația exactă în document, fie prin pagină, fie prin numele secțiunii etc. Checker-ul verifica doar functionalitatea, nu si respectarea cerintelor de fond. | + | Pentru a fi punctat acest subpunct, cadrele trebuie să respecte indicațiile de mai sus. Pentru fiecare valoare din cadru care nu este exact specificată în enunț (e.g., pentru cele unde se specifică că valoarea este conform 802.1D-2004), va trebui să argumentați decizia și să includeți o referință. Fie un link, fie un PDF în arhivă în directorul sources. Sursa trebuie să includă locația exactă în document, fie prin pagină, fie prin numele secțiunii etc. Checker-ul verifică doar funcționalitatea, nu și respectarea cerințelor de fond. |
| </note> | </note> | ||