LodB Router

Load-balancing 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.
  • Routerul va fi capabil să facă load-balancing între 2 posibile ieșiri spre Internet, adică va gestiona traficul de așa manieră încât să fie folosite legăturile cât mai optim acolo unde este posibil

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
  • Condensatori Electroliti 10 uF x 10
  • Condensatori 22pF x 8
  • Condensatori 10nF x 6
  • Condensatori 100nF x 3
  • ENC28J60 Ethernet Controller x 3

  • MAX232 x 1
  • 7805T x 1
  • Atmel AtMega 128 x 1

  • Led-uri 3mm x 8
  • Rezistențe 50 omhni x 18
  • Rezistențe 330 ohmni x 8
  • Rezistența 100 ohmni x 1
  • Rezistențe 2k32 ohmni x 3
  • Quartz 16 MHz x 1
  • Quartz 25 MHz x 3

  • Conector mufa seriala DB9 x 1
  • Jack alimentare x 1
  • Traf x 3
  • Surse Stabilizate x3

  • Memorie SRAM

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
    • load_counter
    • count_mode (IN, OUT, SUM_IN_OUT)
    • in_buffer
    • out_buffer
  • Tabela de rutare va fi ținută sub forma unui vector de perechi (net_descr, out_int)
    • structura net_descr va conține câmpurile (network_id, network_mask)

Rezultate Obţinute

Concluzii

Download

Schema și PCB layout-ul în Eagle: router_eagle.zip

Bibliografie/Resurse

pm/prj2010/rtataroiu/lodbrouter.txt · Last modified: 2021/04/14 17:07 (external edit)
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