biancapetrea16/Implementare-dataplane-router
Folders and files
| Name | Name | Last commit date | ||
|---|---|---|---|---|
Repository files navigation
Student: Petrea Bianca-Iulia
Grupa: 322
Seria: CC
DATAPLANE ROUTER
Acest proiect implementeaza functionalitatea de baza a unui router in C, gestionand
pachetele de tip IP și ARP. Routerul utilizeaza protocoalele ARP și ICMP pentru
gestionarea adreselor MAC si a erorilor.
Cerinte implementate:
1. Procesul de dirijare: Routerul primeste un pachet IP, iar apoi verific
daca pachetul IP primit de catre acesta este valid. Daca da, il redirectionez
catre adresa potrivita folosind tabela de rutare. Daca adresa MAC a hext_hop-ului
este cunoscuta, completez header-ul Ethernet si trimit pachetul. Daca nu, trimit
un ARP Request, iar pachetul este pus in coada de asteptare pana cand primesc un
ARP Reply.
2. Longest Prefix Match: In locul unei cautari liniare prin tabela de rutare, am
implementat o versiune mai eficienta de cautare, folosind cautarea binara. Inainte
de a incepe cautarile, sortez tabela de rutare cu qsort() folosind o functie de
comparare route_table_comparator(route1, route2). Daca doua intrari au acelasi
prefix (dupa aplicarea mastii), se prefera cea cu masca mai mare. Functia
get_best_route() cauta ruta pentru un IP de destinatie, iar cand se gaseste o
potrivire, se salveaza ruta ca posibil next. Totusi cautarea continua pentru a
verifica daca exista o masca si mai specifica.
3. Protocolul ARP: Pentru a trimite un pachet la nivel de retea, routerul are
nevoie de adresa MAC a destinatii. Dacă aceasta nu este cunoscuta,
trebuie obtinuta prin protocolul ARP.
-> Cautarea in tabela ARP: Folosesc o functie get_arp_entry() pentru a cauta intrarea
corespunzatoare unui IP dat in tabela ARP. Dacă IP-ul este gasit, returnez intrarea
cu adresa MAC.
Daca am de trimis un pachet si nu am adresa MAC a next_hop-ului, trimit un ARP Request,
iar pachetul este copiat si pus intr-o coada. Routerul va procesa mai tarziu pachetul
din coada cand primeste un ARP Reply.
Daca adresa MAC este cunoscuta, se trimite pachetul.
-> Trimitere ARP Request: Cand un pachet trebuie trimis, dar nu se cunoaste adresa
MAC a IP-ului de destinatie, se trimite un ARP Request, iar adresa MAC de broadcast
se steaza ca destinatie.
-> Trimitere ARP Reply: Routerul trimite un ARP reply atunci cand primeste un ARP
request destinat uneia dintre interfetele sale. Functia send_arp_reply construieste
complet pachetul si il transmite.
-> Procesare ARP Reply: Dupa ce routerul primeste un ARP Reply, actualizeaza tabela
ARP si verifica daca are pachete in asteptare in coada pentru adresa respectiva.
4. Protocolul ICMP: implementeaza raspunsuri pentru urmatoarele situatii:
-> ICMP Echo Reply: Daca routerul primeste un ICMP Echo Request (de genul ping)
pentru unul dintre IP-urile lui, raspunde cu un ICMP Echo Reply.
-> ICMP Time Exceeded: Daca un pachet are TTL <= 1, routerul genereaza un mesaj
de eroare inapoi catre sursa.
-> ICMP Destination Unreachable: Daca nu exista o ruta valida pentru adresa
destinatie, routerul trimite un mesaj de eroare de acest tip inapoi la sursa.