Malá učebnice OpenFlow (8) – topologie a stanice

Část 8 z celkových 15 v seriálu Malá učebnice OpenFlow

Pojďme se podívat na to, jak kontroler udržuje a reprezentuje topologii. V předchozích částech jsme mluvili o tom, jak HP kontroler chytře využívá hybridních služeb k tomu, aby umožnil síti fungovat klasicky a přitom kontroler měl dostatek informací pro SDN aplikace. Obvykle kontrolery (včetně OpenDayLight) fungují jako čisté OpenFlow, tedy aby věděli kdo kde je, předpokládají, že výchozí pravidlo je OUTPUT CONTROLLER. Takové řešení tedy vyžaduje minimálně na úrovni VLAN mít čisté OpenFlow – a toho se řada zákazníků zatím bojí. Hybridní služby HP umožňují všude mít jako výchozí pravidlo OUTPUT NORMAL a přitom kontroler neoslepne.

Discovery topologie a stanic

Kontroler potřebuje zjistit topologii sítě, tedy jak jsou prvky propojeny, a tuto informaci poskytovat SDN aplikacím. Jak to zjistit? Prvním nápadem bylo použít LLDP protokol z klasického světa, který je přesně určen na discovery topologie. Většina kontrolerů to zatím stále používá, ale HP přešlo na jiný typ paketu (BDDP – v zásadě totéž, ale jiný EtherType). Využívání LLDP činí problémy v campus sítích, kdy například IP telefony (používají LLDP k informaci o VLAN) nebo PoE zařízení (používají LLDP pro komunikaci PoE nároků) z toho jsou poněkud zmatené (zkrátka to nefunguje dobře). Ať už je to LLDP nebo BDDP, mechanismus je stejný.

Kontroler má k dispozici Packet_Out příkaz, tedy vygeneruje paket a řekne prvkům, kam ho mají poslat. Kontroler tedy vygeneruje LLDP/BDDP paket pro daný prvek s nějakou značkou (typicky DPID) a pošle jej přes control plane (Packet_Out) s instrukcí OUTPUT ALL. Tohle udělá pro všechny prvky, které se s ním spojily. Ještě před tím ale v prvcích nainstaluje pravidlo – jestliže je to BDDP (u jiných kontrolerů i LLDP), pošli to zpět do kontroleru. Tímto způsobem kontroler ví kde paket vsunul do sítě (switch 1) a kde byl paket odhycen (switch 2 port XY) – znamená to tedy, že switch 1 je spojen se switch 2 na jeho portu XY. Z obraceného směru se informace potvrdí a přidá se údaj o portu na switch 1. Heuréka – dejme tohle všechno dohromady a můžeme vypočítat celou topologii sítě.

A co stanice? Switch/router ví, kde jaká MAC a IP je – učí se MAC adresy a poslouchá ARP případně i DHCP. Kontroler je vlastně takovým velikým switch/routerem, takže dělá v zásadě něco velmi podobného. Poslouchá zejména ARP a DHCP – ale co když mu to nepošle jen access prvek (tak se stane v hybridním módu s OUTPUT NORMAL jako výchozím pravidlem), ale z vícero prvků po cestě (takhle to vypadá s výchozím OUTPUT CONTROLLER, protože dokud se síť stanici nenaučila, šíří se to jako broadcast)? Tady kontroler využije svojí znalost topologie – z předchozího odstavce už je zřejmé, že víme co je access port a co linka mezi prvky.

Jak to vypadá v praxi?

Spustíme si nějakou bohatou topologii v Mininet a to bude stačit k získání topologie. Protože v Mininet jsou ale stanice příliš potichu, pusťte ještě pingall:

mininet@mininet-vm:~$ sudo mn --controller remote,ip=10.10.10.201 --topo tree,depth=3,fanout=4 --switch ovs,protocols=OpenFlow13
*** Creating network
*** Adding controller
*** Adding hosts:
h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 h11 h12 h13 h14 h15 h16 h17 h18 h19 h20 h21 h22 h23 h24 h25 h26 h27 h28 h29 h30 h31 h32 h33 h34 h35 h36 h37 h38 h39 h40 h41 h42 h43 h44 h45 h46 h47 h48 h49 h50 h51 h52 h53 h54 h55 h56 h57 h58 h59 h60 h61 h62 h63 h64
*** Adding switches:
s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 s16 s17 s18 s19 s20 s21
*** Adding links:
(s1, s2) (s1, s7) (s1, s12) (s1, s17) (s2, s3) (s2, s4) (s2, s5) (s2, s6) (s3, h1) (s3, h2) (s3, h3) (s3, h4) (s4, h5) (s4, h6) (s4, h7) (s4, h8) (s5, h9) (s5, h10) (s5, h11) (s5, h12) (s6, h13) (s6, h14) (s6, h15) (s6, h16) (s7, s8) (s7, s9) (s7, s10) (s7, s11) (s8, h17) (s8, h18) (s8, h19) (s8, h20) (s9, h21) (s9, h22) (s9, h23) (s9, h24) (s10, h25) (s10, h26) (s10, h27) (s10, h28) (s11, h29) (s11, h30) (s11, h31) (s11, h32) (s12, s13) (s12, s14) (s12, s15) (s12, s16) (s13, h33) (s13, h34) (s13, h35) (s13, h36) (s14, h37) (s14, h38) (s14, h39) (s14, h40) (s15, h41) (s15, h42) (s15, h43) (s15, h44) (s16, h45) (s16, h46) (s16, h47) (s16, h48) (s17, s18) (s17, s19) (s17, s20) (s17, s21) (s18, h49) (s18, h50) (s18, h51) (s18, h52) (s19, h53) (s19, h54) (s19, h55) (s19, h56) (s20, h57) (s20, h58) (s20, h59) (s20, h60) (s21, h61) (s21, h62) (s21, h63) (s21, h64)
*** Configuring hosts
h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 h11 h12 h13 h14 h15 h16 h17 h18 h19 h20 h21 h22 h23 h24 h25 h26 h27 h28 h29 h30 h31 h32 h33 h34 h35 h36 h37 h38 h39 h40 h41 h42 h43 h44 h45 h46 h47 h48 h49 h50 h51 h52 h53 h54 h55 h56 h57 h58 h59 h60 h61 h62 h63 h64
*** Starting controller
c0
*** Starting 21 switches
s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 s16 s17 s18 s19 s20 s21
*** Starting CLI:
mininet> pingall
...
...
h64 -> h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 h11 h12 h13 h14 h15 h16 h17 h18 h19 h20 h21 h22 h23 h24 h25 h26 h27 h28 h29 h30 h31 h32 h33 h34 h35 h36 h37 h38 h39 h40 h41 h42 h43 h44 h45 h46 h47 h48 h49 h50 h51 h52 h53 h54 h55 h56 h57 h58 h59 h60 h61 h62 h63
*** Results: 0% dropped (4032/4032 received)

Ukažme si obrázek topologie v kontroleru:

of8-mn1_618x320

Zmáčkněte tlačítko P a N – uvidíte i informace o číslech portů a MAC nebo IP adresy stanic:

of8-mn2

Kontroler je schopen sestavit nejkratší cestu sítí jakmile ho necháte ji sestavit – tedy stačí vypnout hybridní režim (a výchozí pravidlo bude OUTPUT CONTROLLER) nebo jednoduše pro nějakou část sítě nebo typ paketů explicitně dát OUTPUT CONTROLLER. Ten pak nastaví všechny prvky ležící na nejkratší cestě (naprogramuje příslušná pravidla do hardware) a pak vypustí paket zpět do sítě (Packet_Out). Další pakety v rámci komunikace už potom mají cestu vytvořenou. Můžete si vyzkoušet jak cesta bude vypadat – klikněte na jednu stanici a zmáčněte Src ikonu, pak na druhou a zmáčkněte Dst – takhle se budou cesty sestavovat.

of8-mn3_630x317

Využití v aplikacích

Pro aplikace běžící nad SDN kontrolerem jsou tohle velmi důležité informace a v dalších částech seriálu je budeme hojně využívat. Dnes si k tomu ukážeme Python skripty – nezapomeňte nejdřív spustit login.py (viz předchozí díly seriálu).

Stáhněte si getnodes.py – program, který zavolá RESTFUL API a načte informace o stanicích a vytiskne je na obrazovku. Takhle vypadá příklad s využitím mého fyzického prvku připojeného do sítě:

hp@ubuntu:~$ python getnodes.py
IP              MAC                  Switch                     Port
--              ---                  ------                     ----
16.21.165.55    10:1f:74:77:77:1d    00:6f:2c:59:e5:16:5a:e3    23
16.21.165.107   28:80:23:d7:30:ad    00:6f:2c:59:e5:16:5a:e3    23
16.21.166.149   e4:11:5b:35:56:98    00:6f:2c:59:e5:16:5a:e3    23
...
...
16.21.165.16    28:80:23:04:4f:a2    00:6f:2c:59:e5:16:5a:e3    23
16.21.165.61    e4:11:5b:4d:7b:08    00:6f:2c:59:e5:16:5a:e3    23

API může akceptovat i parametry, tedy vyhledávat – přesně tak to dělám ve skriptu findnodes.py. Nezapoměňte ale zadat také VLAN – skutečnou v případě Comware nebo ProVision prvku, při hrátkách s Mininet zadejte VLAN 0.

hp@ubuntu:~$ python findnodes.py --ip 16.21.166.137 --vlan 111
IP              MAC                  Switch                     Port
--              ---                  ------                     ----
16.21.166.137   00:17:08:30:00:f8    00:6f:2c:59:e5:16:5a:e3    21
hp@ubuntu:~$

Takhle se dá vystopovat koncové zařízení a toho využijeme hned příště. Vytvoříme skript, který stanici najde a odpojí ji ze sítě na zadaný počet vteřin.

Series Navigation<< Malá učebnice OpenFlow (7) – ovládání API z PythonMalá učebnice OpenFlow (9) – blokování stanice a ACL >>
Similar posts
  • L3 a kontejnery bez overlay: Project ... Část 6 z celkových 6 v seriálu L3 a kontejnery bez overlay: Project Calico praktickyL3 a kontejnery bez overlay: Project Calico praktickyL3 a kontejnery bez overlay: Project Calico prakticky (1) – architekturaL3 a kontejnery bez overlay: Project Calico prakticky (2) – rozjezdL3 a kontejnery bez overlay: Project Calico prakticky (3) – BGPL3 a kontejnery bez [...]
  • L3 a kontejnery bez overlay: Project ... Část 5 z celkových 6 v seriálu L3 a kontejnery bez overlay: Project Calico praktickyL3 a kontejnery bez overlay: Project Calico praktickyL3 a kontejnery bez overlay: Project Calico prakticky (1) – architekturaL3 a kontejnery bez overlay: Project Calico prakticky (2) – rozjezdL3 a kontejnery bez overlay: Project Calico prakticky (3) – BGPL3 a kontejnery bez [...]
  • HPE Networking na GitHub – skri... Zaměstnanci HPE publikovali zajímavé skripty a celé knihovny jako open source v licenci Apache2, tedy k volnému použití včetně jakýchkoli modifikací. https://github.com/HPENetworking/scriptsonly Obsah se bude jistě dost rozšiřovat… přidejte si záložku [...]
  • L3 a kontejnery bez overlay: Project ... Část 4 z celkových 6 v seriálu L3 a kontejnery bez overlay: Project Calico praktickyL3 a kontejnery bez overlay: Project Calico praktickyL3 a kontejnery bez overlay: Project Calico prakticky (1) – architekturaL3 a kontejnery bez overlay: Project Calico prakticky (2) – rozjezdL3 a kontejnery bez overlay: Project Calico prakticky (3) – BGPL3 a kontejnery bez [...]
  • L3 a kontejnery bez overlay: Project ... Část 3 z celkových 6 v seriálu L3 a kontejnery bez overlay: Project Calico praktickyL3 a kontejnery bez overlay: Project Calico praktickyL3 a kontejnery bez overlay: Project Calico prakticky (1) – architekturaL3 a kontejnery bez overlay: Project Calico prakticky (2) – rozjezdL3 a kontejnery bez overlay: Project Calico prakticky (3) – BGPL3 a kontejnery bez [...]

No Comments Yet

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *