diff --git a/src/SUMMARY.md b/src/SUMMARY.md index ef08953f62e9f7e40d02787873b3229e1daa71e3..cd515832c51ab483e8840dcadd63dfc5d8a12fe1 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -12,7 +12,7 @@ - [ICMP](icmp.md) - [Endianess](endianess.md) - [API](api.md) -- [Cerinte](exercises.md) +- [CerinČe](exercises.md) - [Testare](testing.md) - [Trimitere](sending.md) - [FAQ](faq.md) diff --git a/src/about.md b/src/about.md index 6318966da6c6c6f6e82b6363171f58622baf1317..a7a78c3375184a8955addde149ea33f9f0840e48 100644 --- a/src/about.md +++ b/src/about.md @@ -3,23 +3,30 @@ Ăn cadrul temei vom implementa dataplane-ul unui router. Un router are douÄ pÄrČi: -- Dataplane - partea care implementeazÄ procesul de dirijare, - propriu-zis, acesta se ĂŽntâmplÄ local, pe fiecare router. **Tema constÄ ĂŽn - implementarea acestei componente.** Ăn cele ce urmeazÄ, ĂŽn lipsa altor - precizÄri, toate referinČele la router din textul temei se referÄ la data plane. - -- Control plane - componenta care implementeazÄ algoritmii de rutare - (e.g. RIP, OSPF, BGP); aceČti algoritmi distribuiČi calculeazÄ - rutele pentru fiecare reČea destinaČie Či le insereazÄ ĂŽn dataplane. **NU** - va fi nevoie sÄ implementaČi aceČti algoritmi pentru - temÄ. Routerul va funcČiona cu o tabelÄ de rutare staticÄ, primitÄ - ĂŽntr-un fiČier de intrare, Či care nu se va schimba pe parcursul - rulÄrii. +- Dataplane - partea care implementeazÄ procesul de dirijare propriu-zis, pe + baza intrÄrilor din tabela de routare. + +- Control plane - partea care implementeazÄ algoritmii de rutare (e.g. RIP, + OSPF, BGP); aceČti algoritmi distribuiČi calculeazÄ intrÄrile din + tabela de rutare. + + +**Tema constÄ ĂŽn implementarea componentei de dataplane**. +Ăn cele ce urmeazÄ, ĂŽn lipsa altor precizÄri, toate referinČele la router din +textul temei se referÄ la dataplane. + +**NU** va fi nevoie sÄ implementaČi aceČti algoritmi ĂŽn cadrul temei; vom lucra +strict din perspectiva dataplane-ului, pentru care tabelele de rutare sunt deja +populate. +Routerul nostru va funcČiona cu o tabelÄ de rutare staticÄ, primitÄ ĂŽntr-un +fiČier de intrare, Či care nu se va schimba pe parcursul rulÄrii. Un router are mai multe interfeČe Či poate recepČiona pachete pe oricare dintre acestea. Routerul trebuie sÄ transmitÄ pachetul mai departe, cÄtre un calculator sau cÄtre alt router direct conectat, ĂŽn funcČie de regulile din tabela de -rutare. **Tema poate fi implementatÄ ĂŽn C sau C++**. +rutare. + +**Tema poate fi implementatÄ ĂŽn C sau C++**. ## LecturÄ tema @@ -39,11 +46,11 @@ Approach (6th Edition)](https://eclass.teicrete.gr/modules/document/file.php/TP326/%CE%98%CE%B5%CF%89%CF%81%CE%AF%CE%B1%20(Lectures)/Computer_Networking_A_Top-Down_Approach.pdf) ## Deadline + Deadline-ul temei este specificat pe moodle. -VÄ reamintim pÄrČile relevante din -[regulamentul](https://curs.upb.ro/2021/pluginfile.php/493725/mod_resource/content/0/Regulament_PC_2021_2022.pdf) -cursului de PCom: +VÄ reamintim pÄrČile relevante din [regulamentul cursului de +PCom](https://curs.upb.ro/2023/pluginfile.php/270568/mod_resource/content/1/Regulament_PC_2023_2024.pdf): - DupÄ expirarea acestui termen limitÄ se mai pot trimite teme un interval de maxim 3 zile, cu urmÄtoarele depunctÄri: 10p ĂŽn prima @@ -66,9 +73,9 @@ cursului de PCom: # Setup -Pentru a simula o retea virtuala vom folosi [Mininet](http://mininet.org/). -Mininet este un simulator de retele ce foloseste in simulare implementari reale -de kernel, switch si cod de aplicatii. +Pentru a simula o reČea virtualÄ vom folosi [Mininet](http://mininet.org/). +Mininet este un simulator de reČele ce foloseČte ĂŽn simulare implementari reale +de kernel, switch Či cod de aplicaČii. ```bash sudo apt update @@ -76,8 +83,8 @@ sudo apt install mininet openvswitch-testcontroller tshark python3-click python3 sudo pip3 install mininet ``` -Dupa ce am instalat Mininet, vom folosi urmatoarea comanda pentru a creste -dimensiunea fontului in terminalele pe care le vom deschide. +DupÄ ce am instalat Mininet, vom folosi urmÄtoarea comandÄ pentru a creČte +dimensiunea fontului ĂŽn terminalele pe care le vom deschide. ```bash echo "xterm*font: *-fixed-*-*-*-18-*" >> ~/.Xresources diff --git a/src/api.md b/src/api.md index 8a9894eebdb3eaaeff2a991197030e97355c9f17..bc814d6b6c566449ea42deaa04af244baefa676d 100644 --- a/src/api.md +++ b/src/api.md @@ -9,53 +9,71 @@ precum Či unele funcČii ajutÄtoare a cÄror utilizare este opČionalÄ. Ăn - **RecepČionare/trimitere pachete:** aveČi la dispoziČie urmÄtoarele douÄ funcČii de la nivelul Datalink: ```c - /* Scrie in frame_data continutul unui cadru L1 de Ethernet. In cazul nostru, frame_data - va fi structurat astfel: Ethernet L2 frame|IP or ARP| Alte protocoale - encapsulate de IP (e.g. ICMP) + /* Scrie ĂŽn frame_data continutul unui cadru L2 de Ethernet. Ăn cazul nostru, frame_data + va fi structurat astfel: - Returneaza interfata pe care cadrul a fost primit. Functia este blocanta. + |Alte protocoale encapsulate de IP (e.g. ICMP)| + |IP or ARP| + |Ethernet L2 frame| |<IP or ARP>| + + ReturneazÄ interfaČa pe care cadrul a fost primit. FuncČia este blocantÄ. */ int recv_from_any_link(char *frame_data, size_t *length); - /* Trimite buffer ca si payload al unui cadru Ethernet L1. - Link-ul pe care il va trimite este identificat de interfata. + /* Trimite frame_data ca payload al unui cadru Ethernet L2. + Link-ul pe care ĂŽl va trimite este identificat de interfaČÄ. */ - int send_to_link(int interface, char *frame_data, int len); + int send_to_link(int interface, char *frame_data, int length); ``` - > Pentru a primii punctajul pe tema, trebuie sa folositi acest API de send/recv + > Pentru a primi punctajul pe temÄ, trebuie sÄ folosiČi acest API de send/recv - **IntrÄri ĂŽn tabela de routare:** puteČi modela o intrare ĂŽn tabela de routare folosind urmÄtoarea structurÄ: ```c - struct route_table_entry; + /* Route table entry */ + struct route_table_entry { + uint32_t prefix; + uint32_t next_hop; + uint32_t mask; + int interface; + } __attribute__((packed)); ``` - **Parsare tabela de routare:** pentru a parsa tabela de routare, puteČi folosi funcČia: + ```c int read_rtable(const char *filepath, struct route_table_entry *rtable); ``` - > Intrarile in tabela de rutare sunt deja in network order + + > IntrÄrile din tabela de rutare sunt deja in network order. + - **IntrÄri ĂŽn tabela ARP:** puteČi modela o intrare ĂŽn tabela ARP folosind urmÄtoarea structurÄ: + ```c - struct arp_table_entry; + struct arp_table_entry { + uint32_t ip; + uint8_t mac[6]; + }; ``` + - **Parsare tabela staticÄ ARP:** ĂŽn cazul ĂŽn care doriČi sÄ folosiČi tabela staticÄ de ARP, puteČi sÄ o parsaČi folosind funcČia: + ```c - void parse_arp_table(); + int parse_arp_table(char *path, struct arp_table_entry *arp_table); ``` - **Calcul sume de control:** pentru a realiza calcularea/verificarea sumelor de control din IPv4, respectiv ICMP, puteČi folosi urmÄtoarea funcČie: + ```c /* Atunci cand calculam checksum-ul header-ului, vom pune campul checksum din header pe 0. */ uint16_t checksum(uint16_t *data, size_t len); - ``` - **CoadÄ de pachete:** dupÄ cum este menČionat ĂŽn [descrierea diff --git a/src/arp.md b/src/arp.md index 729775496cafcba8ed38d01eb13968efd2a06588..4c8f61dc1bc02470296a5f2267f729f27b0ae4c0 100644 --- a/src/arp.md +++ b/src/arp.md @@ -1,9 +1,10 @@ # Protocolul ARP DupÄ ce un router a determinat urmÄtorul hop pentru un pachet folosind LPM, -trebuie sÄ-l trimitÄ mai departe, actualizând pachetul astfel ĂŽncât adresa MAC -destinaČie sÄ fie cea a urmÄtorului hop. Cum Čtie routerul aceastÄ adresÄ? O -opČiune ar fi ca aceastÄ sÄ fie reČinutÄ static, ĂŽntr-un tabel. +trebuie sÄ-l trimitÄ mai departe, ĂŽncapsulându-l ĂŽntr-un cadru cu adresa MAC +destinaČie setatÄ ca cea a urmÄtorului hop. Cum Čtie routerul aceastÄ adresÄ? + +ta opČiune este ca aceastÄ sÄ fie reČinutÄ static, ĂŽntr-un tabel. Ăn realitate, ĂŽnsÄ, din mai multe motive (e.g. flexibilitate), routerul *nu Čtie* aceste adrese, ci trebuie sÄ le determine folosind protocolul @@ -102,13 +103,13 @@ PaČii relevanČi pentru dirijarea unui pachet IPv4 sunt urmÄtorii: va parcurge lista de pachete care aČteaptÄ rÄspunsuri ARP Či le va trimite pe cele pentru care adresa urmÄtorului hop este cunoscutÄ. -> Un `ARP Request` catre router poate avea ca destinatie broadcast sau adresa MAC a interfetei router-ului. +> Un `ARP Request` cÄtre router poate avea ca destinaČie broadcast sau adresa MAC a interfeČei router-ului. -In slideshow-ul de mai jos gasiti un exemplu de utilizare a protocolului ARP -pentru a determina adresa MAC a unui dispozitiv la care suntem direct conectati. +Ăn slideshow-ul de mai jos gÄsiČi un exemplu de utilizare a protocolului ARP +pentru a determina adresa MAC a unui dispozitiv la care suntem direct conectaČi. <iframe class="is-fullwidth" height="600" marginheight="0" marginwidth="0" src="slides/index.html"> </iframe> -> In mod normal, hostii sunt conectati la un switch, astfel ARP Request-ul +> Ăn mod normal, hoČtii sunt conectaČi la un switch, astfel ARP Request-ul este trimis la mai mai multe dispozitive, nu doar la router. diff --git a/src/ethernet.md b/src/ethernet.md index d8ace18654bb3f41d30f734381df116e32f2932f..055d58e1853862c063e6ecf1935d94d39418f16c 100644 --- a/src/ethernet.md +++ b/src/ethernet.md @@ -20,7 +20,7 @@ care a fost trimis acest cadru. Ăn cadrul laboratorului puteČi folosi urmÄtoarea structura pentru un cadru Ethernet. -``` C +```C struct ether_header { uint8_t ether_dhost[6]; // MAC destinaČie uint8_t ether_shost[6]; // MAC sursÄ @@ -33,11 +33,12 @@ struct ether_header { ethertype le poate lua. Ăn cazul nostru, ne intereseazÄ IPv4 (0x0800) Či ARP (0x0806). Noi vom folosi API-ul de nivel 2 pentru a trimite cadre Ethernet L2 peste protocolul de L1 Ethernet ce se ocupa cu -framing, checksums etc. [Aici](https://en.wikipedia.org/wiki/Ethernet_frame) gasiti o descriere completa -a structurii Ethernet. In payload-ul cadrului de Ethernet vom avea encapsulat fie protocolul ARP, fie protocolul IP. +framing, checksums etc. [Aici](https://en.wikipedia.org/wiki/Ethernet_frame) gÄsiČi o descriere completÄ +a structurii Ethernet. +Ăn payload-ul cadrului de Ethernet vom avea encapsulat fie protocolul ARP, fie protocolul IP. -In figura de mai jos, gasim o captura Wireshark ce surprinde un cadru ethernet de L2 in care avem encapsulat -IP si ICMP peste IP. +Ăn figura de mai jos, gÄsim o capturÄ Wireshark ce surprinde un cadru ethernet de L2 ĂŽn care avem encapsulat +IP Či ICMP peste IP.  diff --git a/src/exercises.md b/src/exercises.md index 7897f3b0391b9e1902a4a73c3210e9b0768c8214..26ccce0b39b59631120157ebdcd190812fece728 100644 --- a/src/exercises.md +++ b/src/exercises.md @@ -5,7 +5,7 @@ Pentru rezolvarea temei, trebuie sÄ implementaČi dataplane-ul unui router. **Va recomandÄm sÄ folosiČi cel puČin `ping` pentru a testa -implementarea Či `Wireshark` pentru depanare Či analizÄ corectitudinii.** +implementarea Či `Wireshark` sau `tcpdump` pentru depanare Či analiza corectitudinii.** Punctajul este ĂŽmpÄrČit ĂŽn mai multe componente, dupÄ cum urmeazÄ: - **Procesul de dirijare (30p).** Va trebui sÄ implementaČi paČii @@ -17,13 +17,13 @@ Punctajul este ĂŽmpÄrČit ĂŽn mai multe componente, dupÄ cum urmeazÄ: implementat LPM folosind o cÄutare liniarÄ, i.e. trecând de fiecare datÄ prin toate ĂŽntrÄrile din tabel. Ăn practicÄ, o tabelÄ de routare poate conČine foarte multe ĂŽntrÄri [^1] -- astfel de cÄutare - este ineficientÄ. O abordare mai bunÄ este sÄ folosim - [trie](https://www.lewuathe.com/longest-prefix-match-with-trie-tree.html) + este ineficientÄ. O abordare mai bunÄ este sÄ folosim o + [trie](https://www.lewuathe.com/longest-prefix-match-with-trie-tree.html). Orice implementare mai eficientÄ decât cÄutarea liniarÄ valoreazÄ 16 puncte. -- **Protocolul ARP (33p).** Vom implementa paČii din [sectiuena ARP](arp.html) pentru +- **Protocolul ARP (33p).** Vom implementa paČii din [secČiunea ARP](arp.md) pentru a popula dinamic tabela ARP. Va trebui sÄ implementaČi Či funcČionalitatea de caching; dupÄ ce primiČi un rÄspuns ARP, reČineČi adresa MAC a hostului interogat. Ăn realitate, intrÄrile dintr-un @@ -32,7 +32,7 @@ Punctajul este ĂŽmpÄrČit ĂŽn mai multe componente, dupÄ cum urmeazÄ: **Pentru a nu bloca routerul, pachetele pentru care aČteptÄm un `ARP Reply` vor fi puse ĂŽntr-o coadÄ.** - Va recomandÄm sÄ folosiČi comanda `arping` pentru a face cereri ARP. Comanda + VÄ recomandÄm sÄ folosiČi comanda `arping` pentru a face cereri ARP. Comanda `arp` afiČeazÄ tabela ARP a unui host. Tema se poate preda Či cu o tabelÄ de ARP @@ -41,13 +41,13 @@ Punctajul este ĂŽmpÄrČit ĂŽn mai multe componente, dupÄ cum urmeazÄ: checkerul din a rula teste de ARP, deci nu veČi primi puncte pe ele. DacÄ aČi implementat protocolul ARP, nu adÄugaČi fiČierul `arp_table.txt`**. - > Este normal ca testul forward sa pice daca folositi tabela statica de ARP. + > Este normal ca testul forward sÄ pice daca folositi tabela statica de ARP. - **Protocolul ICMP (21p).** ImplementaČi pe router funcČionalitatea descrisÄ ĂŽn [secČiunea ICMP](icmp.html). PuteČi folosi `ping -t 1` pentru a trimite un pachet cu TTL 1. Va recomandÄm sÄ testaČi Či cu `traceroute`. -Pentru a fi punctata o tema, in README trebuie prezentata solutia voastra pe scurt. De asemenea, trebuie mentionat si ce subcerinČe aČi rezolvat. +Pentru a fi punctatÄ o temÄ, ĂŽn README trebuie prezentatÄ soluČia voastrÄ, pe scurt. De asemenea, trebuie menČionat Či ce subcerinČe aČi rezolvat. **NotÄ:** PuteČi scrie implementarea ĂŽn C sau C++. diff --git a/src/forwarding.md b/src/forwarding.md index 0508a565a6abc543ce70ad19637817ef3caf0ab1..4ea9cd86d72002b085fd841f426fc4cbabdf739a 100644 --- a/src/forwarding.md +++ b/src/forwarding.md @@ -6,7 +6,7 @@ efectueze urmÄtoarele acČiuni: 1. **Parsarea pachetului:** din fluxul de octeČi ce reprezintÄ pachetul, routerul trebuie sÄ afle ce antete sunt prezente Či ce - valori conČĂŽn câmpurile acestora, construind Či iniČializând + valori conČin câmpurile acestora, construind Či iniČializând structuri interne corespunzÄtoare. La acest pas, dacÄ routerul descoperÄ cÄ un pachet primit e malformat (e.g. prea scurt), ĂŽl aruncÄ. @@ -21,10 +21,10 @@ efectueze urmÄtoarele acČiuni: 3. **Inspectarea urmÄtorului header:** routerul inspecteazÄ câmpul `Ether Type` din header-ul Ethernet pentru a descoperi urmÄtorul antet prezent. Ăn cadrul temei, ne vor interesa doar douÄ posibilitÄČi: - [IPv4] Či [ARP]. UrmÄtoarele acČiuni ale routerului vor + [IPv4](ip.md) Či [ARP](arp.md). UrmÄtoarele acČiuni ale routerului vor depinde de tipul acestui header. Orice alt fel de pachet trebuie ignorat. -> Ăn cele ce urmeazÄ, vom studia protocoalele implicate ĂŽn procesul de dirijare +> Ăn continuare, vom studia protocoalele implicate ĂŽn procesul de dirijare Či vom prezenta cum acestea sunt folosite de cÄtre router. diff --git a/src/icmp_capture_wireshark.png b/src/icmp_capture_wireshark.png index 2bcaf7e46ac5259c6ade0ed982f7990eacbe9cc5..009a50fb2b8efa8d863fabc6b373c898b6eae96f 100644 Binary files a/src/icmp_capture_wireshark.png and b/src/icmp_capture_wireshark.png differ diff --git a/src/ip.md b/src/ip.md index 140aaddabe3b9bd029afcfd77bf062ddd8d58128..c54ecd82bedbe35731779ddddafb262518857912 100644 --- a/src/ip.md +++ b/src/ip.md @@ -1,6 +1,12 @@ # Protocolul IPv4 -Protocolul IP este utitilzat pentru a permite dispozitivelor conectate ĂŽn reČele diferite sÄ schimbe informaČii prin intermediul unui dispozitiv intermediar numit router. -O descriere completÄ a header-ului de IPv4 o gÄsiČi [aici](https://en.wikipedia.org/wiki/Internet_Protocol_version_4#Header). Header-ul unui pachet (packet) IP este urmÄtorul: + +Protocolul IP este utilizat pentru a permite dispozitivelor conectate ĂŽn reČele +diferite sÄ schimbe informaČii prin intermediul unui dispozitiv intermediar +numit router. +O descriere completÄ a header-ului de IPv4 o gÄsiČi +[aici](https://en.wikipedia.org/wiki/Internet_Protocol_version_4#Header). +Header-ul unui pachet (packet) IP este urmÄtorul: + ``` +----+---------------+---------------+---------------+---------------+ |Word| 1 | 2 | 3 | 4 | @@ -19,27 +25,29 @@ O descriere completÄ a header-ului de IPv4 o gÄsiČi [aici](https://en.wikiped +----+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ``` -UrmÄtoarea strucura poate fi folositÄ pentru a reprezenta un pachet IPV4. -``` C +UrmÄtoarea strucurÄ poate fi folositÄ pentru a reprezenta un pachet IPV4. + +```C struct iphdr { // version este pe 4 biČi, ihl este pe 4 biČi uint8_t version:4, - ihl:4; // Nu vom implementa protocolul IP cu opČiuni, - aČa cÄ 5 Ă 32 bits = 160 bits = 20 bytes (internet header length) - uint8_t tos; // Nu este relevant pentru temÄ (set pe 0) - uint16_t tot_len; // dimensiunea totalÄ a header + date - uint16_t id; // Nu este relevant pentru temÄ, (set pe 1) - uint16_t frag_off; // Nu este relevant pentru temÄ, (set pe 0) - uint8_t ttl; // Time to live - uint8_t protocol; // Identificator al protocolului encapsulat (e.g. ICMP) - uint16_t check; // checksum of the iphdr, we checksum = 0 when computing - uint32_t saddr; // Adresa IP sursÄ - uint32_t daddr; // Adresa IP destinaČie + ihl:4; // Nu vom implementa protocolul IP cu opČiuni, + // aČa cÄ 5 Ă 32 bits = 160 bits = 20 bytes + // (internet header length) + uint8_t tos; // Nu este relevant pentru temÄ (set pe 0) + uint16_t tot_len; // dimensiunea totalÄ a header + date + uint16_t id; // Nu este relevant pentru temÄ, (set pe 1) + uint16_t frag_off; // Nu este relevant pentru temÄ, (set pe 0) + uint8_t ttl; // Time to live + uint8_t protocol; // Identificator al protocolului encapsulat (e.g. ICMP) + uint16_t check; // checksum of the iphdr, we checksum = 0 when computing + uint32_t saddr; // Adresa IP sursÄ + uint32_t daddr; // Adresa IP destinaČie }; ``` -De notat faptul cÄ noi nu suntem interesaČi de diferite funcČionalitÄČi din IP -precum fragmentarea. Astfel, ĂŽn cazul ĂŽn care construiČi un pachet IP de la 0, +**Nu suntem interesaČi de anumite funcČionalitÄČi din IP precum fragmentarea**. +Astfel, ĂŽn cazul ĂŽn care construiČi un pachet IP de la 0, vom seta urmÄtoarele: ``` @@ -51,19 +59,19 @@ id = 1 ``` Ăn [RFC 990 pagina 24](https://www.rfc-editor.org/rfc/rfc990) gÄČiČi o listÄ de identificatori pentru diversele -protocoale ce pot fi encapsulate ĂŽn IP. Vom folosi aceste valori pentru a completa câmpul Protocol +protocoale ce pot fi encapsulate ĂŽn IP. Vom folosi aceste valori pentru a completa câmpul `protocol`. -Când un router primeČte un pachet de tip IPv4 trebuie sÄ realizeze +Când un router primeČte un pachet de tip IPv4, trebuie sÄ realizeze urmÄtoarele acČiuni: -1. **Verificarea dacÄ el este destinaČia:** deČi un intermediar, routerul este +1. **VerificÄ dacÄ el este destinaČia:** deČi un intermediar, routerul este de asemenea o entitate cu interfeČe de reČea Či adrese IP asociate acestora, deci poate fi destinatarul unui pachet. Ăn acest caz, routerul nu trebuie sÄ trimitÄ mai departe pachetul, ci sÄ ĂŽi ĂŽnČeleagÄ conČinutul pentru a putea acČiona ĂŽn consecinČÄ. Ăn cadrul acestei teme, routerul va rÄspunde doar la mesaje de tip **ICMP**. -2. **Verificare checksum:** routerul trebuie sÄ recalculeze suma de +2. **VerificÄ checksum:** routerul trebuie sÄ recalculeze suma de control a pachetului, Či sÄ o compare cu cea primitÄ ĂŽn antetul de IP; dacÄ sumele diferÄ, pachetul a fost corupt Či trebuie aruncat. diff --git a/src/lpm.md b/src/lpm.md index 3e1adb0c3d614ad2c2044eab5e8b1d0cfd4553e3..266785030bbbddff79b806bb967f4b0aac0bdb74 100644 --- a/src/lpm.md +++ b/src/lpm.md @@ -15,5 +15,4 @@ prefixul: OdatÄ ce routerul gÄseČte toate prefixele care se potrivesc adresei destinaČie din pachet, va alege intrarea din tabela de rutare -corespunzÄtoare prefixului cei mai lung (masca cea mai mare). - +corespunzÄtoare celui mai lung prefix (masca cea mai mare). diff --git a/src/routing_table.md b/src/routing_table.md index 66672525f0ba3c4c47a24109192944c8479fca28..e9bfd1f7079f0a520d8e4dd9c194f6085d05b754 100644 --- a/src/routing_table.md +++ b/src/routing_table.md @@ -27,5 +27,5 @@ Prefix Next hop Mask Interface ``` Ăn contextul temei, este suficient sÄ consideraČi cÄ numÄrul maxim de -intrÄri din tabela de rutare este de 100000 de intrÄri. +intrÄri din tabela de rutare este de 100 000 de intrÄri. diff --git a/src/testing.md b/src/testing.md index 5eba33eddffe0f420bd6cff2195e4c5925b1e209..f8e781ce6b293dbe960b06fe5651d3e05c5e15da 100644 --- a/src/testing.md +++ b/src/testing.md @@ -10,10 +10,9 @@ rula pentru a realiza setupul de testare. Acesta trebuie rulat ca $ sudo python3 checker/topo.py -Astfel, se va iniČializa topologia virtualÄ Či se va deschide câte un -terminal pentru fiecare host, câte un terminal pentru fiecare router Či -unul pentru controller (cu care nu vom interacČiona); terminalele pot fi -identificate dupÄ titlu. +Astfel, se va iniČializa topologia virtualÄ Či se va deschide câte un terminal +pentru fiecare host Či câte un terminal pentru fiecare router; terminalele pot +fi identificate dupÄ titlu. Fiecare host e o simplÄ maČinÄ Linux, din al cÄrei terminal puteČi rula comenzi care genereazÄ trafic IP pentru a testa funcČionalitatea @@ -21,17 +20,17 @@ routerului implementat. VÄ recomandÄm [arping](http://man7.org/linux/man-pages/man8/arping.8.html), [ping](https://linux.die.net/man/8/ping) Či [netcat](https://howto.lintel.ĂŽn/listen-arbitrary-port-print-data-coming-using-netcat/). -Mai mult, din terminal putem rula **Wireshark** sau tcpdump pentru a +Mai mult, din terminal putem rula `wireshark` sau `tcpdump` pentru a face inspecČia de pachete. -Pentru a compila codul vom folosi `make` care creeaza binarul router. +Pentru a compila codul vom folosi `make` care creeazÄ binarul `router`. Pentru a porni routerele manual folosim urmÄtoarele comenzi, prima pe router 0 Či a doua pe router 1: ```bash -make run_router0 # din terminalul lui router 0 -make run_router1 # din terminalul lui router 1 +make run_router0 # din terminalul lui router0 +make run_router1 # din terminalul lui router1 ``` Ca sa nu scrieti manual ip-ul unui host, puteti folosii `h0`, `h1`, `h2` si `h3` in @@ -56,7 +55,7 @@ sÄ gÄsiČi utilÄ informaČia de aici, mai ales cea din fiČierele de pe care ĂŽl puteČi inspecta apoi ĂŽn `Wireshark` (captura este fÄcutÄ pe toate interfeČele routerului, deci pachetele dirijate vor apÄrea de douÄ ori; urmÄriČi indicaČiile de [aici](https://osqa-ask.wireshark.org/questions/30636/traces-from-multiple-interface/) -pentru a obČine o vizualizare mai bunÄ) +pentru a obČine o vizualizare mai bunÄ). PuteČi rula un singur test folosind argumentul run <testname>. De exemplu: @@ -67,7 +66,7 @@ sudo python3 checker/topo.py run router_arp_reply Nu veČi primi un raport *PASS/FAIL*, dar veČi putea obČine uČor outputul din `host_output`. -**NotÄ:** Scopul testelor este de a ajuta cu dezvoltarea Či evaluarea +> **NotÄ:** Scopul testelor este de a ajuta cu dezvoltarea Či evaluarea temei. Mai presus de rezultatul acestora, important este sÄ implementaČi *cerinČa*. Astfel, punctajul final poate diferi de cel tentativ acordat de teste, ĂŽn situaČiile ĂŽn care cerinČa temei nu este respectatÄ (un caz