ccna 4 sedinta 08 - laborator sdn (mininet) 08 - sdn/2018_01_18_ccna 4 - sedinta08...infoacademy...
TRANSCRIPT
InfoAcademy Cisco Networking Academy
www.infoacademy.net
Studentul poate utiliza prezentul material si informatiile continute in el exclusiv in scopul asimilarii cunostintelor pe care le include, fara a afecta dreptul de proprietate intelectuala detinut de InfoAcademy.
1
CCNA 4 – SEDINTA 08 - LABORATOR SDN (Mininet)
Scopul acestui laborator este de a prezenta un posibil emulator pentru SDN (Software Defined
Network), denumit Mininet. In cadrul retelelor definite prin software (SDN), se utilizeaza un
model de retea centralizat fata de modelul distribuit, inca utilizat in prezent.
Modelul de retea centralizat presupune decuplarea planului de control de planul de date. Planul
de date ramane din punct de vedere conceptual , plasat pe echipamentul fizic , dar planul de
control va fi reprezentat de un “Controller” central care este conectat la echipamente prin
intermediul “Southbound Interface” si “Northbound Interface”. Orice “Controller”
functioneaza pe baza standardului OpenFlow, dezvoltat de ONF (Open Networking
Foundation) si poate fi implementat in diverse limbaje de programare (C++, Python, Java,…)
Emulatorul Mininet are integrat un controller standard numit OVS (Open vSwitch) care
emuleaza comportamentul unui Switch standard (fara capabilitati de rutare). Acesta este scris in
limbajul de programare Python.
De asemenea in Mininet mai exista integrata si o topologie simpla formata dintr-un Switch care
interconecteaza doua host-uri. Switch-ul are planul de control mentinut in “Controller” deci
pentru orice functionalitate noua pe care dorim sa o aducem , trebuie sa modificam codul
Python al controllerului OVS.
Initial dorim sa instalam emulatorul Mininet pe distributia de linux “Ubuntu”. In aceasta
distributie , ne putem folosi de pachetele precompilate utilizand utilitarul de instalare “apt-get”:
Astfel intram in “Terminal” iar intr-o prima etapa , ne logam ca root pentru a avea drepturi
depline :
InfoAcademy Cisco Networking Academy
www.infoacademy.net
Studentul poate utiliza prezentul material si informatiile continute in el exclusiv in scopul asimilarii cunostintelor pe care le include, fara a afecta dreptul de proprietate intelectuala detinut de InfoAcademy.
2
Logarea ca root se face in distributia Ubuntu cu comanda: “sudo su”:
cisco@ubuntu:/# sudo su
Comanda :
root@ubuntu:/home/cisco# cd /
schimba directorul curent cu radacina sistemului de operare , notata cu slash “/”;
Din acest mod , trebuie sa actualizam lista pachetelor precompilate, folosind comanda:
root@ubuntu:/# apt-get update
Este posibil sa avem mult mai multe pachete noi daca instalam de la zero o distributie Ubuntu.
Apoi facem upgrade la pachetele deja instalate:
root@ubuntu:/# apt-get upgrade
InfoAcademy Cisco Networking Academy
www.infoacademy.net
Studentul poate utiliza prezentul material si informatiile continute in el exclusiv in scopul asimilarii cunostintelor pe care le include, fara a afecta dreptul de proprietate intelectuala detinut de InfoAcademy.
3
Pentru a fi de acord cu upgrade-ul pachetelor trebuie sa raspundem cu Y (Yes) si apoi sa apasam
Enter:
Dupa instalarea update-urilor, vom instala emulatorul de retea Mininet:
root@ubuntu:/# apt-get install mininet
Va trebui din nou sa fim de acord cu instalarea , alegand Y:
De asemenea pe langa Mininet , Ubuntu va instala si pachete suplimentare de care Mininet are
nevoie pentru instalare, acestea se numesc dependinte. In cazul nostru acestea sunt:
cgroup-bin, cgroup-lite, cgroup-tools, iperf, libcgroup1…
InfoAcademy Cisco Networking Academy
www.infoacademy.net
Studentul poate utiliza prezentul material si informatiile continute in el exclusiv in scopul asimilarii cunostintelor pe care le include, fara a afecta dreptul de proprietate intelectuala detinut de InfoAcademy.
4
Dupa instalare , putem lansa in executie emulatorul Mininet si odata cu el se va incarca si
topologia de test , configurata automat odata cu instalarea .Aceasta este de fapt o retea LAN cu
doua host-uri, interconectate de un Switch. Acest Switch nu are inteligenta proprie, ii lipseste
planul de control. In schimb Switch-ul este conectat la un Controller care ii impune toate
regulile de decizie (Learning, Flooding, Forwarding), inclusiv tabela CAM.
InfoAcademy Cisco Networking Academy
www.infoacademy.net
Studentul poate utiliza prezentul material si informatiile continute in el exclusiv in scopul asimilarii cunostintelor pe care le include, fara a afecta dreptul de proprietate intelectuala detinut de InfoAcademy.
5
Asadar lansam in executie emulatorul Mininet prin comanda
root@ubuntu:/# mn
Output-ul comenzii are urmatoarele semnficatii:
Mininet cauta controllerul standard setat de user, daca nu exista il va folosi pe cel
implicit: OVS.
Mininet creaza reteaua: adauga controllerul, cele doua host-uri, switch-ul, legaturile
dintre Switch si cele doua host-uri :
o Legatura dintre h1 si Switch (h1, s1)
o Legatura dintre h2 si Switch (h2, s1)
Mininet configureaza host-urile cu adrese IP, MAC.
Mininet lanseaza Controllerul , Switch-ul , linia de comanda.
Reteaua astfel creata este :
InfoAcademy Cisco Networking Academy
www.infoacademy.net
Studentul poate utiliza prezentul material si informatiile continute in el exclusiv in scopul asimilarii cunostintelor pe care le include, fara a afecta dreptul de proprietate intelectuala detinut de InfoAcademy.
6
Primul test pe care il putem face este un ping general folosind toate combinatiile de
echipamente.
mininet> pingall
In acest caz combinatiile de echipamente sunt doua : de la h1 la h2 si de la h2 la h1.
Procentul de pachete 0% dropped inseamna ca la toate echo request-uri s-au primit echo reply-
uri.
Momentan iesim din emulator cu comanda exit, Mininet va opri procesele fiecarui element din
retea:
mininet> exit
Timpul de 143.475 secunde reprezinta timpul cat a fost executat emulatorul Mininet.
Pentru a lista toate optiunile pe care Mininet le poate avea putem da comanda (vezi pagina
urmaroare):
root@ubuntu:/# mn -h
Aceste optiuni sunt in general folosite cand dorim sa executam actiuni fara a intra in emulatorul
mininet (cu comanda “mn”), adica direct din linia de comanda linux.
InfoAcademy Cisco Networking Academy
www.infoacademy.net
Studentul poate utiliza prezentul material si informatiile continute in el exclusiv in scopul asimilarii cunostintelor pe care le include, fara a afecta dreptul de proprietate intelectuala detinut de InfoAcademy.
7
din toate acestea vom folosi in acest laborator optiunea “topo” prin care putem genera
(dinamic) topologii diferite decat cea initiala , dar fara a modifica nimic din codul python al
topologiei din locatia:
/usr/share/doc/mininet/examples/emptynet.py
Putem folosi editorul de text “nano” din Ubuntu pentru a vizualiza continutul fisierului
emptynet.py: root@ubuntu:/# nano /usr/share/doc/mininet/examples/emptynet.py
InfoAcademy Cisco Networking Academy
www.infoacademy.net
Studentul poate utiliza prezentul material si informatiile continute in el exclusiv in scopul asimilarii cunostintelor pe care le include, fara a afecta dreptul de proprietate intelectuala detinut de InfoAcademy.
8
Dupa executarea comenzii, obtinem output-ul:
Explicam la modul basic, codul python din acest fisier:
Initial importam setari din diverse fisiere deja scrise (mininet.net, mininet.node, mininet.cli,
mininet.log), apoi definim o functie denumita emptynet(), fara argumente.
Python este un limbaj de programare orientat de obiecte. Ain acest tip de limbaje se lucreaza cu
clase si obiecte. In orice limbaj de programare exista definite cateva tipuri de date standard:
InfoAcademy Cisco Networking Academy
www.infoacademy.net
Studentul poate utiliza prezentul material si informatiile continute in el exclusiv in scopul asimilarii cunostintelor pe care le include, fara a afecta dreptul de proprietate intelectuala detinut de InfoAcademy.
9
integer (numar intreg), float (numar cu virgula), char (character), string (sir de caractere) si
altele. Clasele sunt tipuri de date create de programator intrucat acestea nu se regasesc deja in
acel limbaj. Clasele se pot instantia, altfel zis putem crea obiecte cu aceleasi caracteristici
definite in clasa dar obiectele pot avea denumiri diferite. Cand cream obiecte ale clasei de fapt
cream clone ale clasei , iar clonele au denumiri diferite.
In acest cod , cream un obiect cu numele “net” de tipul clasei Mininet , importata initial din
fisierul mininet.net. La crearea obiectului , clasa , fiind si ea o functie , primeste ca argument
denumirea controllerului folosit.
Functia info() este de asemenea importata din fisierul mininet.log, si ajuta la afisarea unor
mesaje de informare.
Regula de baza in programarea orientata pe obiecte, este ca un obiect acceseaza o metoda a
clasei . Metodele sunt functii definite in interiorul clasei si ne ajuta sa protejam atributele
acesteia de modificari neautorizate.
In codul nostru:
Obiectul net acceseaza metoda addController definita in clasa Controller importata din
fisierul mininet.node => se plaseaza in topologie un controller OVS
Obiectul net acceseaza metoda addHost (net.addHost) cu primul argument h1 (numele
host-ului) si al doilea argument 10.0.0.1 (adresa IP a host-ului h1) =>se plaseaza hostul in
topologie
Obiectul net acceseaza metoda addHost (net.addHost) cu primul argument h2 (numele
host-ului) si al doilea argument 10.0.0.2 (adresa IP a host-ului h2) =>se plaseaza hostul in
topologie
Obiectul net acceseaza metoda addSwitch (net.Switch) cu un singur argument s3 (numele
switch-ului)=> se plaseaza Switch-ul s3 in topologie.
Obiectul net acceseaza metoda addLink (net.addLink) cu doua argumente h1, s3 (cele
doua capete ale legaturii =>se conecteaza hostul h1 la switch-ul s3
Obiectul net acceseaza metoda addLink (net.addLink) cu doua argumente h2, s3 (cele
doua capete ale legaturii =>se conecteaza hostul h2 la switch-ul s3
Obiectul net acceseaza metoda start =>se initializeaza reteaua
Functia CLI (linia de comanda) apeleaza obiectul net => se porneste linia de comanda
pentru reteaua formata.
Obiectul net acceseaza metoda stop (atunci cand in linia de comanda scriem comanda
“exit”)
Ne intoarcem la topologie si intram din nou in topologia standard pentru a o studia in detaliu:
root@ubuntu:/# mn -h
InfoAcademy Cisco Networking Academy
www.infoacademy.net
Studentul poate utiliza prezentul material si informatiile continute in el exclusiv in scopul asimilarii cunostintelor pe care le include, fara a afecta dreptul de proprietate intelectuala detinut de InfoAcademy.
10
Putem lista nodurile din reteaua de test (noduri = elementele din retea mai putin controllerul
care este vazul ca facand parte din Switch – este de fapt planul de control al Switch-ului): mininet> nodes
Output-ul comenzii va fi listarea celor 3 elemente din retea: switch-ul si cele doua host-uri:
Dorim sa aflam in continuare , legaturile dintre noduri:
mininet> net
Explicam aceste legaturi:
Interfata eth0 a hostului h1 este conectata cu interfata eth1 a Switch-ului s1
Interfata eth0 a hostului h2 este conectata cu interfata eth2 a Switch-ului s1
Putem lista si informatii detaliate despre noduri , inclusiv IP-ul fiecarui nod si procesul asociat
din linux. Folosim comanda :
mininet> dump
Confirmam ca h1 are IP 10.0.0.1 iar h2 are IP 10.0.0.2
Switch-ul este controlat de OVSBridge si are un IP de Loopback 127.0.0.1
Fiind Switch , pe interfetele fizice, eth1 si eth2, nu are adrese IP ci doar adrese MAC.
Daca dorim sa detaliem configuratia unui nod , putem folosi comanda ifconfig cu parametrul –a
, cu precizarea inaintea comenzii a nodului pentru care dorim informatiile
Comanda ifconfig este general valabila in Linux pentru vizualizarea oricarei interfete (inclusive
InfoAcademy Cisco Networking Academy
www.infoacademy.net
Studentul poate utiliza prezentul material si informatiile continute in el exclusiv in scopul asimilarii cunostintelor pe care le include, fara a afecta dreptul de proprietate intelectuala detinut de InfoAcademy.
11
interfetele fizice ale PC-ului).
Pentru hostul h1:
mininet> h1 ifconfig -a
Identificam aici adresa MAC , adresa IPv4, adresa de broadcast si Masca IPv4 (/8).
De asemenea h1 detine si adresa IPv6 de tip link-local.
Un parametru din headerul IPv4 este Maximum Transmission Unit (MTU) setat la valoarea
standard de 1500 bytes.
Pentru hostul h2:
InfoAcademy Cisco Networking Academy
www.infoacademy.net
Studentul poate utiliza prezentul material si informatiile continute in el exclusiv in scopul asimilarii cunostintelor pe care le include, fara a afecta dreptul de proprietate intelectuala detinut de InfoAcademy.
12
Iar pentru Switch:
Pentru a vizualiza tabela ARP folosim comanda: mininet> s1 arp
InfoAcademy Cisco Networking Academy
www.infoacademy.net
Studentul poate utiliza prezentul material si informatiile continute in el exclusiv in scopul asimilarii cunostintelor pe care le include, fara a afecta dreptul de proprietate intelectuala detinut de InfoAcademy.
13
Dar si tabela de rutare pe hostul h1,h2, si Switch-ul s1:
mininet> h1 route
Testam apoi un ping intre h1 si h2 si apoi intre h2 si h1:
mininet> h1 ping –c 5 h2
Comanda de rulare a ping-ului precizeaza sursa(h1) , numarul de echo request-ului (5) si
destinatia (h2).
InfoAcademy Cisco Networking Academy
www.infoacademy.net
Studentul poate utiliza prezentul material si informatiile continute in el exclusiv in scopul asimilarii cunostintelor pe care le include, fara a afecta dreptul de proprietate intelectuala detinut de InfoAcademy.
14
Mininet are posibilitatea de a crea un server web (ce asculta pe portul standard 80) pe unul din
host-uri si accesarea fisierelor pe celalalt host in format html:
Comanda de creare server web va fi:
mininet> h1 python –m SimpleHTTPServer 80 &
iar comanda de accesare a fisierelor folosind utilitarul wget din Linux:
mininet> h2 wget – O – h1
Fisierele de pe h1 sunt listate pe h2 utilizand tag-uri HTML.
InfoAcademy Cisco Networking Academy
www.infoacademy.net
Studentul poate utiliza prezentul material si informatiile continute in el exclusiv in scopul asimilarii cunostintelor pe care le include, fara a afecta dreptul de proprietate intelectuala detinut de InfoAcademy.
15
Din nou iesim cu comanda exit din Mininet si dorim in continuare crearea unor topologii
parametrizate din afara liniei de comanda
Exemplul 1 : Cream o topologie cu un singur Switch si 3 Host-uri :
root@ubuntu:/# mn –-test pingall –-topo single,3
In aceasta comanda am folosit optiunea “topo” pentru a particulariza topologia dar si comanda
“test” cu argumentul “pingall” pentru a verifica conectivitatea cu toate combinatiile de host-uri.
Testarea cuprinde de fapt 6 echo request-uri , cate doua pentru cele trei combinatii posibile:
h1 catre h2 si h3
h2 catre h1 si h3
h3 catre h1 si h2
InfoAcademy Cisco Networking Academy
www.infoacademy.net
Studentul poate utiliza prezentul material si informatiile continute in el exclusiv in scopul asimilarii cunostintelor pe care le include, fara a afecta dreptul de proprietate intelectuala detinut de InfoAcademy.
16
Exemplul 2: O retea de 4 Switch-uri interconectate linear, sic ate un host conectat la fiecare
Switch: root@ubuntu:/# mn –-test pingall –-topo linear,4
In aceasta topologie exista 3 legaturi intre Switch-uri: (s2, s1) (s3,s2) (s4,s3) si cate o legatura
intre host si Switch-ul corespunzator (h1,s1) (h2,s2) (h3,s3) (h4,s4). Deci in total 7 legaturi.
Se testeaza 12 echo request-uri care cuprind toate combinatiile de host-uri:
h1 catre h2 , h3 , h4
h2 catre h1 , h3 , h4
h3 catre h1 , h2 , h4
h4 catre h1 , h2 , h3
InfoAcademy Cisco Networking Academy
www.infoacademy.net
Studentul poate utiliza prezentul material si informatiile continute in el exclusiv in scopul asimilarii cunostintelor pe care le include, fara a afecta dreptul de proprietate intelectuala detinut de InfoAcademy.
17
Dorim acum sa folosim topologia standard cu 2 host-uri si un Switch dar sa impunem parametri
diferiti la intreaga topologie:
tc: control trafic (activarea facilitatii de control manual al traficului)
bw= 10 (bandwidth de 10 Mbps pe fiecare link)
delay=10 ( delay de 10 milisecunde pe fiecare link)
root@ubuntu:/# mn –-link tc,bw=10,delay=10ms
Aceasta comanda ne aduce tot in linia de comanda Mininet dar parametrii retelei sunt cei
impusi de noi;
Cu ajutorul comenzii “iperf” putem testa bandwidth-ul intre h1 si h2
mininet> iperf
Apoi , pentru a vedea timpul de raspuns dintre host-uri (influentat de delay-ul impus) , folosim
din nou comanda ping :
mininet> h1 ping –c 10 h2
InfoAcademy Cisco Networking Academy
www.infoacademy.net
Studentul poate utiliza prezentul material si informatiile continute in el exclusiv in scopul asimilarii cunostintelor pe care le include, fara a afecta dreptul de proprietate intelectuala detinut de InfoAcademy.
18
Rezultatele acestor teste cu parametri modificati:
Bandwidth-ul masurat a fost intre 9.05 Mbps si 11.3 Mbps (in jurul valorii de 10 Mbps)
Delay-ul cumulat=RTT (Round Trip Time) h1 – Switch – h2 a fost minim de 42.141 ms,
mediu de 42.696 ms iar cel maxim de 43.474 ms.
o Aceste valori includ delay-ul de la h1 la Switch insumat cu timpul de procesare
(decizie) al Switch-ului dar si delay-ul de la Switch la h2.