www.SAMURAJ-cz.com 

20.04.2024 Marcela Translate to English by Google     VÍTEJTE V MÉM SVĚTĚ

Články

Cisco QoS 6 - praktické příklady použití QoSu

Sobota, 28.02.2009 16:33 | Samuraj - Petr Bouška |
Poslední díl seriálu o Quality of Service se věnuje jednoduchým praktickým příkladům. Pro toho, kdo přečetl předchozí díly, ukazuje komplexnější konfigurace. Ale je také vhodný pro ty, kteří předchozí články nečetli. Podle mého názoru můžeme konfigurovat různé vlastnosti, aniž bychom znali princip, jakým dojde k jejich provedení. Největší zaměření je na různé možnosti omezování rychlosti (propustnosti) portu.

Přiznám se, že moje praktická zkušenost s konfigurací QoSu není nijak velká. Uvádím zde nějaké příklady, které jsem řešil nebo nalezl v dokumentaci a vyzkoušel. Uvítám vaše návrhy, vlastní zkušenosti a praktické konfigurace. Nebo komentáře k uvedeným příkladům. Několikrát jsem narazil na to, že praxe neodpovídala tomu, co jsem čekal dle teorie.

Co můžeme pomocí QoSu dělat?

  • omezit provoz - tedy nastavit maximální pásmo, které může být použito
  • vyhradit provoz - nastavit minimální (a občas stejné maximální) pásmo, které může být použito
  • prioritizovat provoz - upřednostnit nějaký provoz před ostatním, aby nedocházelo ke zpoždění
  • třídit provoz - rozdělit provoz do kategorií podle řady parametrů
  • spravedlivě rozdělit pásmo - přichází různý provoz a všechen má odejít jedním (pomalejším) portem, můžeme zařídit, aby jeden provoz neobsadil odchozí pásmo a ostatní nebyl pouze zahazován, ale aby se pásmo spravedlivě rozdělovalo

Kde používáme QoS

Nejvíce se QoS využije na hranicích sítí. Standardně máme lokální síť, kde se používají switche a centrální L3 switch, který zařizuje routování. V LAN se používají relativně vysoké rychlosti (100Mbps, 1Gbps) a páteř bývá o řád rychlejší (1Gbps, 10Gbps). Tuto rychlou síť pak spojujeme s další sítí (pobočkou, internetem) přes jednu řádově pomalejší linku (třeba 10Mbps).

V rámci LAN se tedy většinou neobjevují problémy, protože příchozí rychlost je většinou menší než možná odchozí rychlost. Takže zde řešíme spíše omezování rychlosti pro nějaké speciální účely. Problém nastává v místě propojení dále, třeba do WAN. Zde nám často přichází data mnohem rychleji, než je můžeme odesílat. Proto musíme řešit problémy s prioritizací a vyhrazením a rozdělením pásma. Obecně se říká, že nejvíce je třeba řešit QoS na linkách do 768kpbs. Potom linky do 2Mbps a dále vše nad.

Konfiguraci QoSu tedy nejvíce provádíme na routeru (gateway), který propojuje naši LAN s další síti. A potom na přístupovém switchi (access layer), kde příchozí provoz rozdělujeme do kategorií a značkujeme, aby se s ním pak lépe pracovalo na routeru.

Auto-QoS - konfigurační makra

Pozn.: Na routeru je QoS standardně zapnutý. Na switchi je defaultně vypnutý a musí se zapnout pomocí příkazu mls qos. Pokud ale použijeme Auto QoS, tak se provede i zapnutí QoSu.

Cisco IP telefon

Příklad konfigurace, kdy do portu g1/0/2 je připojen Cisco IP telefon (jeho komunikace jde do VLAN 110) a za ním je zapojeno PC (komunikace se řadí do VLAN 100). Auto QoS nastaví všechny potřebné QoS parametry, takže když se následně podíváme na konfiguraci portu, bude zde několik dalších příkazů (pro zrušení konfigurace stačí použít pouze no auto qos … a ostatní příkazy se odstraní automaticky). Pro funkci je třeba povolené CDP.

SWITCH(config)#interface g1/0/2 
SWITCH(config-if)#switchport mode access 
SWITCH(config-if)#switchport access vlan 100 
SWITCH(config-if)#switchport voice vlan 110 
SWITCH(config-if)#auto qos voip cisco-phone 
SWITCH(config-if)#spanning-tree portfast 
SWITCH(config-if)#no shutdown 

Trunk port na Cisco switch

Příklad konfigurace trunk portu (uplinku do core switche) pomocí IEEE802.1q. Auto QoS zajistí důvěru hodnotám, tedy aby se označení provozu (například pro IP telefonii) přenášelo dále.

SWITCH(config)#interface te1/0/1 
SWITCH(config-if)#switchport trunk encapsulation dot1q 
SWITCH(config-if)#switchport mode trunk 
SWITCH(config-if)#switchport nonegotiate 
SWITCH(config-if)#auto qos voip trust 
SWITCH(config-if)#no shutdown 

Označování provozu

Vybírání provozu - router i switch

Jednoduchý příklad, který označuje http provoz. Nejprve vytvoříme ACL, které bude vybírat http (port 80). Následně vytvoříme class-map http-class, v které budeme pomocí ACL vybírat provoz. Potom vytvoříme policy-map http-policy, kde pro provoz vybraný class mapou nastavíme DSCP na AF22. Na konci aplikujeme tuto policy-map na interface g1/0/1 na příchozí komunikaci.

Pozn.: Pokud bychom chtěli nastavovat COS hodnoty, tak se musí jednat o trunk port.

SWITCH(config)#access-list 101 permit tcp any eq 80 any
SWITCH(config)#access-list 101 permit tcp any any eq 80

SWITCH(config)#mls qos

SWITCH(config)#class-map http-class 
SWITCH(config-cmap)#match access-group 101

SWITCH(config)#policy-map http-policy
SWITCH(config-pmap)#class http-class  
SWITCH(config-pmap-c)#set dscp AF22

SWITCH(config)#interface gigabitEthernet1/0/1 
SWITCH(config-if)#service-policy input http-policy  

Veškerý provoz - switch

Na switchi můžeme nastavit, aby se všechny příchozí pakety označkovaly na danou hodnotu. První příkaz značkuje pouze pakety bez tagu, druhý zařídí přepisování u všech.

SWITCH(config)#interface gigabitEthernet1/0/1 
SWITCH(config-if)#mls qos cos 3
SWITCH(config-if)#mls qos cos override 

Omezení rychlosti - Rate Management

Rychlost portu

Nejjednodušší možnost, která nemá nic společného s QoSem, je nastavení rychlosti portu. Rychlost portu je defaultně nastavena na auto, kdy se vyjednává rychlost dle připojeného zařízení. Rychlost ale můžeme zadat i manuálně. U gigabitového portu máme k dispozici 10Mbps, 100Mbps a 1000Mbps.

SWITCH(config)#interface g1/0/30 
SWITCH(config-if)#speed 10 

Na switchi - srr-queue

Jednoduché řešení u switchů, které ale nelze nastavit příliš jemně. Natavují se procenta 10 - 90% z maximální rychlosti interfacu. Takže pro Gigabitový ethernet dosáhneme minima 100Mbps.

SWITCH(config)#mls qos 
SWITCH(config)#interface g1/0/30 
SWITCH(config-if)#srr-queue bandwidth limit 10 

Můžeme také použít fintu a zkombinovat srr-queue spolu s nastavením rychlosti portu a tím se dostat na nižší rychlosti. V následujícím příkladu nastavíme gigabitový port do režimu FastEthernet (100Mbps) a následně omezíme na 20% rychlosti, tedy 20Mbps.

SWITCH(config)#interface g1/0/30 
SWITCH(config-if)#speed 100 
SWITCH(config-if)#srr-queue bandwidth limit 20 

Pomocí policeru na switchi

Zde využijeme metodu zvanou Class Based Policing. Ta omezuje maximální šířku pásma, kterou provoz může spotřebovat. Provádí se to tak, že co je nad zadané pásmo, je ořezáno (pakety jsou zahozeny - drop, je možno i pouze přeznačkovat pakety). Nijak ale negarantuje minimální pásmo.

Na switchi můžeme použít agregovaný policer (v tomto příkladu, konfigurace na začátku), který následně aplikujeme v jedné policy-map na více class-map (nelze aplikovat stejný agregovaný policer na více policy-map!). Hodnoty, které nastavíme, jsou maximem pro součet všech toků, na které se použije. Nebo můžeme použít individuální policer (v druhém příkladu), který se vloží do každé class-map a omezuje pouze tento tok.

Konfigurace policeru je značně detailní, ale je třeba trochu rozumět použitému algoritmu Token Bucket (popsaný v 3. díle seriálu) nebo prakticky znát jakým nastavením dosáhneme jakých výsledků. V příkladu nastavujeme průměrný datový tok (average rate) a velikost shluku (burst size). I když nastavíme hodnoty správně, tak u TCP budou naměřené hodnoty výrazně nižší (proto se doporučuje nastavovat 2x více než požadujeme) díky chování TCP při zahazování paketů (zmenšování velikosti okna na polovic a následné narůstání rychlosti - provoz pak vypadá jako zuby na pile).

Následující příklad, který pochází z webu Cisco, je určen pro starší switche (C3550), které mají řadu omezení. Zde vybíráme veškerý provoz pomocí dvou ACL pro IP a ne IP provoz. Vytvoříme dvě class-map, kde využijeme ACL. Potom vytvoříme policy-map do které vložíme obě class-map (na interface můžeme aplikovat pouze jednu policy-map pro jeden směr) a použijeme agregovaný policer, který by měl omezovat provoz na 1Mbps (pro lepší výkon nastavíme burst-size na 16kB). Nakonec aplikujeme policy-map na port Gi1/0/30.

SWITCH(config)#mls qos  
SWITCH(config)#mls qos aggregate-policer test-policer 1000000 16000 exceed-action drop

SWITCH(config)#access-list 100 permit any any 
SWITCH(config)#mac access-list extended non-ip-acl 
SWITCH(config-ext-macl)#permit any any

SWITCH(config)#class-map test-ip
SWITCH(config-cmap)#match access-group 100 
SWITCH(config)#class-map test-non-ip 
SWITCH(config-cmap)#match access-group name non-ip-acl

SWITCH(config)#policy-map police-all-traffic
SWITCH(config-pmap)#class test-ip 
SWITCH(config-pmap-c)#police aggregate test-policer 
SWITCH(config-pmap)#class test-non-ip 
SWITCH(config-pmap-c)#police aggregate test-policer

SWITCH(config)#interface gi1/0/30
SWITCH(config-if)#service-policy input police-all-traffic    

Na novějších switchích (C3750) můžeme předchozí konfiguraci provést jednodušeji. Zkusil jsem předchozí příklad upravit a prakticky vyzkoušet na Catalyst 3750. Zde máme k dispozici příkazy match all a match interface g1/0/30, bohužel když použijeme tento výběr, tak výslednou policy-map nemůžeme aplikovat na L2 interface. Já zkusil využít toho, že veškerý provoz, který nikam nezařadíme, spadá do třídy class-default, takže jsem omezil tuto třídu.

SWITCH(config)#mls qos

SWITCH(config)#policy-map police-all-traffic
SWITCH(config-pmap)#class class-default 
SWITCH(config-pmap-c)#police 1m 16000 exceed-action drop 

SWITCH(config)#interface gi1/0/30
SWITCH(config-if)#service-policy input police-all-traffic 

Nastavení proběhlo vpořádku. Mou představou bylo, že budu omezovat port, na který jsem policer nastavil. Na něm jsem měl připojenou stanici a zkusil jednoduše ověřit rychlost. Pomocí Total Commanderu jsem kopíroval soubor po síti pomocí CIFS protokolu (Windows share). A byl jsem překvapen, provoz byl sice zpomalen (z původních 168Mbps), ale na rychlost asi 22Mbps a já očekával něco hluboko pod 1Mbps. Zkusil jsem jiné nastavení a třeba pro 100kbps policer jsem dosáhl hodnot 3,89Mbps. Chvíli mi trvalo přijít na to proč. Přitom stačí přemýšlet. Já jsem policy-map nastavil sice na správný interface, ale pouze na jeden směr a to opačný.

Při aplikaci policy-map na interface můžeme zadat směr input nebo output. Všude se uvádí, že input je směr dovnitř interfacu a output ven (což je logické). Ale nikde jsem nenašel, z které strany. Předpokládám, že je to podobně jako u ACL, a na směr se díváme z pohledu switche/routeru, takže co přichází z venku do portu je input a co odchází ze switche skrze port je output. Takže jsem v mém příkladu omezoval odchozí provoz, ale měřil příchozí.

Není nic lehčího než nastavit policy-map na druhý směr, takže jsem se o to pokusil.

S2NP01(config-if)#service-policy ?
  input   Assign policy-map to the input of an interface
  output  Assign policy-map to the output of an interface
S2NP01(config-if)#service-policy output ?
  WORD  policy-map name
S2NP01(config-if)#service-policy output police-all-traffic
police command is not supported for this interface
Configuration failed!
Warning: Assigning a policy map to the output side of an interface not supported

Nápověda zobrazuje obě možnosti, ale když se o to pokusíme, tak dostaneme chybovou hlášku, protože policing je možný pouze pro vstupní porty (input). Takže nemůžeme takto omezit stahování dat pro jednoho uživatele připojeného na portu. Buď bychom museli nastavit omezení na port, z kterého data přichází. Nebo můžeme použít dříve uvedené možnosti.

Pozn.: Když jsem vyzkoušel kopírování opačně, že PC na konfigurovaném portu, byl zdroj dat, tak jsem dosáhl lepších výsledků asi 370kbps (čekal bych tedy trošku více).

Pomocí policeru na routeru

Další testování jsem přesunul na router. Zkoušel jsem na malém modelu z nejnižší řady Cisco 871. Routery mají více možností pro CB Policing. Obsahují také Dual Token Bucket algoritmus. Zde již můžeme všechen provoz vybrat pomocí match any. Na routeru je třeba, aby bylo zapnuté Cisco Express Forwarding (CEF), což je na všech novějších modelech defaultně (CEF se používá i na multilayer switchích).

ROUTER(config)#ip cef

ROUTER(config)#class-map all-traffic-class 
ROUTER(config-cmap)#match any

ROUTER(config)#policy-map all-traffic-policy 
ROUTER(config-pmap)#class all-traffic-class 
ROUTER(config-pmap-c)#police 1000000 16000 conform-action transmit exceed-action drop

ROUTER(config)#interface fastEthernet1 
ROUTER(config-if)#service-policy output all-traffic-policy 

Router 871 (moje verze) má 4 FastEthernet porty, jako LAN switch a 1 WAN port (také FastEthernet). Já jsem pro testování zapojil dvě PC do portů fa1 a fa2. Na port fa1 jsem zkusil aplikovat politiku na odchozí směr a vše proběhlo bez chyby. Jenže moje nastavení nemělo žádný efekt, vyzkoušel jsem řadu věcí (i změnu na směr dovnitř), ale pořád nic. Když jsem se podíval na statistiky, tak je vidět, že datový provoz je zaznamenán, ale ignoruje se.

Router#show policy-map interface f1
 FastEthernet1

  Service-policy output: all-traffic-policy

    Class-map: all-traffic-class (match-all)
      24 packets, 1440 bytes
      5 minute offered rate 0 bps, drop rate 0 bps
      Match: any
      police:
          cir 1000000 bps, bc 16000 bytes
        conformed 0 packets, 0 bytes; actions:
          transmit
        exceeded 0 packets, 0 bytes; actions:
          drop
        conformed 0 bps, exceed 0 bps

    Class-map: class-default (match-any)
      0 packets, 0 bytes
      5 minute offered rate 0 bps, drop rate 0 bps
      Match: any

Po řadě zkoušek jsem zkusil jeden počítač zapojit do WAN portu fa4 a na něj nastavit politiku (zde již je možnost pouze na odchozí příchozí směr). A vše začalo fungovat. Když jsem použil kopírování ve správném směru, tak jsem dosáhl kolísavé rychlosti okolo 360kbps.

ROUTER(config)#interface FastEthernet4
ROUTER(config-if)#ip address 192.168.10.1 255.255.255.0
ROUTER(config-if)#service-policy output all-traffic-policy

Vyzkoušel jsem nastavit různé hodnoty policeru a provedl jednoduché měření s kopírováním ze sítě, výsledky jsou v následujícíc tabulce. Měření je hodně nepřesné, ale dává (doufám) základní představu o vlivu zadávaných hodnot na reálnou rychlost. Podle teorie by různé hodnoty burst size měli ovlivnit hlavně nárazové toky (kde se krátce přenáší nějaká data, pak je pauza a pak opět krátce data) a ne stálé kopírování.

average rate - CIR [kbps] burst size - Bc [kB] průměrná rychlost kopírování [kbps]
nenastaveno nenastaveno 60 000
1 000 32 416 (relativně stálá rychlost)
1 000 16 360 (skáče od 320 do 390)
1 000 8 180 (skáče od 160 do 216)
1 000 1 kopírování ani nezačalo
100 32 88
100 16 85
100 8 83

Shaping na routeru 

Class Based Shaping je metoda podobná CB Policingu, s tím rozdílem, že se přebytečné pakety hned nezahazují, ale zařazují se do fronty (a teprve při zaplnění fronty se zahazují). Mělo by tedy dojít k lepšímu využití pásma. CB Shaping je dostupný až na vysokých řadách switchů (C3750 jej neobsahuje) nebo na routerech (testoval jsem opět na 871).

Použil jsem stejný příklad jako minule a nastavil shaping na průměrnou hodnotu (average).

ROUTER(config)#class-map all-traffic-class 
ROUTER(config-cmap)#match any

ROUTER(config)#policy-map shape-all-traffic
ROUTER(config-pmap)#class all-traffic-class 
ROUTER(config-pmap-c)#shape average 1000000 

ROUTER(config)#interface FastEthernet4
ROUTER(config-if)#service-policy output shape-all-traffic   

Výsledek byl proti policingu mnohem lepší, dosáhl jsem stálého datového toku 936kbps. Ještě jsem vyzkoušel použít shaping na špičkovou hodnotu (peak), kdy jsem naměřil 1792kbps.

ROUTER(config-pmap-c)#shape peak 1000000 

Vyhrazení pásma a prioritizace provozu

Na ukázku vyhrazení (rezervování) pásma pro určitý provoz, spolu s ukázkou prioritizace určitého provozu, jsem použil opět příklad z webu Cisco. Ten se týká IP telefonie. Pomocí ACL vybíráme VoIP signalizaci (H.323, TCP port 1720) a RTP media stream (což je velký rozsah UDP portů 16384 až 32767). Pro signalizaci vyhradíme pásmo 8kbps. A pro vlastní hlas vyhradíme a prioritizujeme 48kbps.

ROUTER(config)#access-list 102 permit udp any any range 16384 32767
ROUTER(config)#access-list 103 permit tcp any eq 1720 any
ROUTER(config)#access-list 103 permit tcp any any eq 1720

ROUTER(config)#class-map voice-signaling
ROUTER(config-cmap)#match access-group 103
ROUTER(config)#class-map voice-traffic
ROUTER(config-cmap)#match access-group 102

ROUTER(config)#policy-map voice-policy
ROUTER(config-pmap)#class voice-signaling
ROUTER(config-pmap-c)#bandwidth 8
ROUTER(config-pmap)#class voice-traffic
ROUTER(config-pmap-c)#priority 48

ROUTER(config)#interface fastEthernet4
ROUTER(config-if)#service-policy output voice-policy

Vyhrazení pásma

Pro garanci určitého pásma se používají fronty (queue). V tomto případě využijeme Class Based Weighted Fair Queuing (CBWFQ), které umožňuje rezervovat určité pásmo pro třídu. Ve výše uvedeném příkladu se jedná o následující příkaz.

ROUTER(config-pmap-c)#bandwidth 8  

Můžeme kombinovat i s lepší metodou zahazování paketů při přeplnění front (aby nenastal efekt popsaný dříve - TCP si snižuje velikost okna a pak zas zvětšuje), jedná se o Weighted Random Early Detection (WRED). WRED můžeme použít i u policingu, ale můj malý router 871 jej nepodporuje. WRED funguje tak, že méně významný provoz zahazuje dříve než dojde k zahlcení. Následující příkaz využívá pro rozdělení IP Precedence.

ROUTER(config-pmap-c)#random-detect 

Prioritizace provozu

Pokud chceme nějaký provoz upřednostnit před ostatním (například hlas), tak opět využijeme fronty a metodu zvanou Low Latency Queuing (LLQ). Ta vychází z CBWFQ, takže máme provoz s garantovaným pásmem a ten prioritizujeme. Přidává striktně prioritní frontu (nízká latence). V případě zahlcení i omezuje provoz na danou hodnotu. V předchozím příkladu se jednalo o příkaz.

ROUTER(config-pmap-c)#priority 48 
zobrazeno: 29097krát | Komentáře [7]

Autor:

Související články:

Cisco IOS

Velký seriál o operačním systému aktivních prvků firmy Cisco.

QoS - Quality of Service

Tato série článků se věnuje obsáhlé problematice zajištění kvality při přenosu dat, tedy Quality of Service. Vše je řešeno s přihlédnutí k aktuálním trendům používaným na Cisco aktivních prvcích, spolu s příklady konfigurace.

Pokud se chcete vyjádřit k tomuto článku, využijte komentáře níže.

Komentáře

  1. [1] jirka slintak

    LLQ nejen i omezuje,ale ono hlavne omezuje - viz hard QoS.

    Jinak by totiz neslo zabezpecit konstani zpozdeni. Obecne pokud je pouzito LLQ, melo by byt pouzito i CAC(call admision control),takze ikdyz neni zacpa, nemuzou aplikace v LLQ vyuzivat vic,nez maji prideleny(nutny predpoklad je, ze CAC i LLQ musi byt v souladu,jinak by to nemelo vyznam)

    ale hezky napsane

    slinti

    Středa, 07.07.2010 13:49 | odpovědět
  2. [2] honza

    Ahoj, máš vynikající články! Uplně jsem se vtom zapotal...

    Mám tu na experimentování jeden starší router 1760 a chtěl jsem se zeptat když bych chtěl omezit rychlost linky na IP adresu jak se tohle udělá?

    Středa, 04.01.2012 15:49 | odpovědět
  3. [3] Petr

    Dobrý den, mám switch c2950 s posledním IOSem a potřebuji omezit rychlost na jednotlivých portech, stačí s přesností + - třeba 5Mbit. Je nekdě nějaký návod ? Podle tohoto článku se mi nedaří.

    Jinak Super stránky, již mi mnohokrát pomohly.

    Předem Moc Děkuji. Petr.

    Středa, 01.05.2013 15:01 | odpovědět
  4. [4] Samuraj

    odpověď na [3]Petr: Nemám s 2950 žádné zkušenosti, ale co jsem nahlédl do dokumentace, tak skoro nic nepodporuje :-(, takže to asi bude problém.

    Čtvrtek, 02.05.2013 14:53 | odpovědět
  5. [5] najt

    Ahoj,

    `srr-queue bandwidth limit X` je mozne uplatnit iba v smere input. Testovane na catalyst 2960.

    Pondělí, 31.03.2014 16:15 | odpovědět
  6. [6] Hrošík

    odpověď na [5]najt: Potvrzuji, bohužel je to tak. Lze jen input směr. Já to řeším tak, že nastavuji omezení linky mezi dvěma switchi stejnou konfigurací limitu na obou portech.

    Úterý, 15.07.2014 10:00 | odpovědět
  7. [7] DANIEL

    Omezit VOIP provoz na range portu 16384 az 32767 neni spatny napad ale pozor aby ti zamestnanci nezacali hrat napr. Call of Duty nebo Half - life :D

    BTW. super popis QOS

    Pondělí, 18.08.2014 15:29 | odpovědět
Přidat komentář

Vložit tag: strong em link

Vložit smajlík: :-) ;-) :-( :-O

Nápověda:
  • maximální délka komentáře je 2000 znaků
  • HTML tagy nejsou povoleny (budou odstraněny), použít se mohou pouze speciální tagy (jsou uvedeny nad vstupním polem)
  • nový řádek (ENTER) ukončí odstavec a začne nový
  • pokud odpovídáte na jiný komentář, vložte na začátek odstavce (řádku) číslo komentáře v hranatých závorkách