LodB Router
Introducere
De la realizarea interconectării primelor două calculatoare și faimosul mesaj trimis “LOG”, rețelele de calculatoare au fost și sunt în continuă dezvoltare. Din interconectarea acestor rețele a luat naștere (după mulți pași intermediari) Internet-ul. În cazul Internet-ului, pentru ca două dispozitive din rețele diferite să poată comunica, ele folosesc protocolul IP (Internet Protocol). Adresarea oferită de acest protocol este una ierarhică, permițând agregarea căilor și împărțirea cât mai eficientă a unor echipamente în rețele și subrețele.
Trecerea dintr-o rețea în alta este realizată de echipamente capabile să ia decizii pe baza adreselor IP. Dintre aceste echipamente ne vom concentra asupra Router-ului, un echipament dedicat acestor decizii. Un astfel de dispozitiv intermediar (Intermediate System), în funcție de capacitățile sale, poate ajunge la sume destul de mari, mai ales atunci când este necesar suportul și altor protocoale și servicii.
Proiectul își propune implementarea unui router simplu dar eficient bazat pe uC-ul Atmega128 care să fie capabil să coordoneze traficul între trei sau mai multe rețele. Versiunea protocolului IP implementată va fi 4, deși implementarea schemei de adresare pentru IPv6 este ușor de adaptat, însă pentru acest proof-of-concept considerăm că este suficient.
Exemplu de scenariu load-balancing:
Descriere generală
Fiecare port va avea un buffer de pachete intrare/ieșire atașat
Routerul va deține o tabelă de routare configurată prin intermediul interfeței seriale RS232
Adresele IP ale interfețelor vor fi configurate prin același procedeu
Pentru a folosi la maxim facilitățile full-duplex ale SPI-ului se va transmite un pachet simultan cu citirea unui pachet (implementare separată), astfel obținându-se un spor de viteză
Porturile se vor parcurge într-un ciclu de tip “Round-robin” pentru a asigura fairness între interfețe
IP-ul unui pachet este căutat în tabela de routare. Aici pot apărea mai multe situații
IP-ul nu este în tabelă. Pachetul este aruncat
Rețeaua destinație apare pe o singură interfață. Pachetul este pus în out-bufferul acestei interfețe
Rețeaua destinație apare pe două interfețe. Se citește contorul de încărcare (Load counter) pe fiecare interfață și se alege cea mai puțin aglomerată
Load counter-ul va fi resetat la un interval 1 ms. Acest interval este generat de Timer-ul 0 cu prescaler 1024 și overflow la ~80.
Load counter-ul va putea fi programat să țină count de in-traffic, out-traffic sau ambele sumate
Hardware Design
Schema circuitului principal
PCB Layout-ul
Pinout ENC28J60
Lista pieselor folosite
MAX232 x 1
7805T x 1
Atmel AtMega 128 x 1
Software Design
Funcțiile pentru comunicarea cu ENC28J60 vor fi luate din pachetul AVRLib (detalii la resurse)
Bufferele de intrare / ieșire vor fi cozi circulare implementate pe vectori cu indici
Fiecare port va avea asociată o structură ce va conține
Tabela de rutare va fi ținută sub forma unui vector de perechi (net_descr, out_int)
Rezultate Obţinute
Concluzii
Download
Bibliografie/Resurse