Protokol RSVP

na operačním systému Linux

Lubomír Walder [wal056]
Tomáš Szkandera [szk018]

Úvod

Resource ReSerVation Protocol (RSVP)[1] je standard navržený IETF a je součástí architektury Integrated Services (IntServ). Architektura IntServ je množina IETF standardů určujících jakým způsobem aplikace definuje své požadavky na kvalitu služby (QoS) v lokálních sítích a v Internetu. V rámci IntServ by měl každý síťový prvek zveřejnit své možnosti ovlivnění QoS a své požadavky na QoS. Dle této architektury by také směrovače měly klasifikovat pakety a udržovat stavové informace o každém aktuálním datovém toku. Koncové stanice pak pomocí protokolu RSVP dynamicky žádají zajištění dané QoS a všechny směrovače na cestě od zdroje k požadovanému cíli by tomuto požadavku měly vyhovět. Definice protokolu RSVP je podrobně popsána v RFC2205.

Princip RSVP

Protokol RSVP je určen pro signalizaci požadavků na přenosové pásmo a to především ve velkých lokálních sítích. V Internetu mohou nastat problémy z důvodu, že RSVP musí podporovat všechny směrovače na cestě od odesílatele požadavku k požadovanému zdroji. Zdroj datového toku pomocí protokolu RSVP periodicky informuje uzly přihlášené v dané multicastové skupině o vlastnostech svého datového toku. Kterýkoli člen multicastové skupiny si pak na základě těchto informací může požádat o zarezervování přenosového pásma a všechny směrovače na cestě by mu měly vyhovět. Jak je tedy patrné, RSVP je využíván hlavně v multicastovém vysílání jako jsou videokonference a multimediální přenosy v reálném čase.
Jelikož se jedná o signalizační protokol, lze princip RSVP rozdělit na dvě části:

Signalizace odesílatel ==> síť

Odesílatel, například server vysílající určitý video stream, stanoví hranice parametrů kvality služby požadované na jeho datový tok, speciálně šířku pásma, zpoždění a změnu zpoždění. Tyto parametry vloží do zprávy (PATH message) a periodicky jej začne zasílat na multicastovou adresu v jejíž skupině je registrován. PATH message je tedy rozeslána směrem ke všem účastníkům multicastové skupiny a veškeré uzly na cestě jsou tak informovány o specifikaci datového toku odesílatele.

Signalizace příjemce ==> síť

Příjemce, zaregistrovaný v dané multicastové skupině, přijme některou ze zpráv PATH a na základě jejích parametrů vytvoří rezervační požadavek. Tato RESV zpráva obsahuje požadavky na kvalitu a rychlost datového toku (obvykle stejné jako v PATH zprávě), port, na kterém příjemce naslouchá, a použitý přenosový protokol (TCP/UDP). Dále mohou být v RESV požadavku připojeny autentizační informace (založeny na zašifrovaném kontrolním součtu zprávy, klíč k dešifrování sdílí všechny RSVP uzly). Požadavek RESV je poté odeslán na adresu zdroje uvedenou v PATH zprávě. Jakmile některý ze směrovačů přijme zprávu RESV, proběhne případná autentizace a na základě požadavků uvedených v RESV zprávě rozhodne o rezervaci prostředků. Pokud se směrovač z jistých důvodů rozhodne odmítnout žádost o rezervaci odešle žadateli upozornění o zamítnutí. Jestliže i poslední směrovač potvrdí požadavek, jsou příjemce i odesílatel uvědoměni a prostředky jsou rezervovány.

Instalace RSVP na systému Linux

Pro použití RSVP v Linuxu je nutné do systému nainstalovat RSVP daemona, který bude tuto službu zajišťovat. Daemon pak slouží jako rozhraní mezi aplikací využívající RSVP a síťovou vrstvou systému. Bohužel, pro systém Linux jsme nenašli žádné oficiální vydání tohoto daemona. Institut ISI [4], který se několik let podrobně zabýval implementací RSVP, vydal několik verzí svého daemona, poslední ve verzi 4.2a4. Tento daemon je však určen pro operační systém SunOS. Ostatní daemony pro systémy na bázi UNIXu jsou převážně založeny na této verzi ISI. Abychom mohli tuto verzi použít také na Linuxu, našli jsme patch, který vytvořil Alexey Kuznetsov [5]. Tento patch ale upravuje pouze zdrojové kódy pro samotný RSVP daemon a rozhraní API k tomuto daemonu. Ostatní podpůrné aplikace, které ISI dodává ke své verzi, například utilitu pro zjištění stavu rezervace, tento patch neopravuje. Jiný patch jsme bohužel nenašli.

Instalace RSVP daemona:

Z FTP serveru ISI (ftp://ftp.isi.edu/rsvp/release/) jsme stáhli tyto soubory:
- rsvpd.rel4.2a4.tar.Z - oficiální a zatím poslední verze RSVP daemona (rok vydání 1998).
- rsvpd.rel4.2a4-1.tar.gz - patch na tuto verzi (rok vydání 1999)

Patch Alexeye Kuznetsova lze nalézt zde (http://www.cs.helsinki.fi/u/jmanner/software/rsvp/)
Všechny zde použité soubory jsou také uloženy v tomto archivu.

Po rozbalení souboru s RSVP daemonem vznikne adresář rel4.2a4. Oficiální patch se aplikuje pouze jeho rozbalením do stejného adresáře, přepíše se několik souborů. Do adresáře rel4.2a4 jsme zkopírovali soubor s patchem Alexeye Kuznetsova. Příkazem patch -p1 < rsvp-rel4.2a4-kuznetsov.patch dojde k opravení asi 20ti souborů. Ke kompilaci je dále třeba skript mkdep, který je obsažen ve výše uvedeném archivu a je nutné ho nakopírovat do /bin adresáře v systému. Před kompilací je vhodné vymazat předkompilované objektové soubory a knihovny příkazem make clear. Samotná kompilace se provádí příkazem make depend a následně make.

Spuštění a práce s RSVP daemonem

Samotný daemon je umítěn v adresáří rsvpd. Daemon lze pustit ve dvou režimech:
./rsvpd spustí daemon na pozadí systému
./rsvpd -D spustí daemon zároveň s RTAP rozhraním, pomocí kterého lze daemonu zadávat příkazy. Definice a popis použití těchto příkazů jsou uvedeny v dokumentaci k RTAP, v adresáři doc.
RTAP rozhraní lze k již běžícímu daemonu spustit dodatečně. Je umístěno v adresáři apitools.

Testování RSVP daemona:

Použili jsme pouze dva počítače, přímo propojené kříženým UTP kabelem. Na obou počítačích jsme nainstalovali a spustili RSVP daemon.



RSPV daemon jednom počítači jsme nastavili jako vysílač (sender), zde je výpis s API konzole:

> dest udp 1.0.0.1/5000   // Vytvoření nové session, připojení na adresu 1.0.0.1 udp port 5000
> sender 1.0.0.2/5000 [t 6000 256 6000 64 256]    //  přihlášení  odesílatele z adresy rozhraní 1.0.0.2 portu 5000

[t <b> <r> <p> <m> <M>] je TSpec (Traffic Specification) parametr definujicí požadavky na QoS [6]:
    b - velikost token bucketu
    r - rychlost doplňování tokenů
    p - součet velikosti token bucketu a špičkové rychlosti přicházejících paketů
    m - minimální datová jednotka pro správu linky
    M - maximální velikost datagramu

   
Po zádání těchto příkazů  začal odesílatel v pravidelných intervalech zasílat PATH message, což jsme ověřili na obou PC pomocí aplikace Ethereal.
Zkrácený obsah PATH paketu zachycený programem Ethereal je uveden na konci v příloze.

Druhý počítač jsme nastavili jako příjemce:

> dest udp 1.0.0.2/5000    // Vytvoření nové session s cílem na IP 1.0.0.2 port udp 5000
> receive    // připojení do multicastové skupiny, v našem případě neměl tento příkaz žádný vliv
> reserve wf [cl 3280 256 64 3280 128]     //  Odeslání požadavku na zarezervovaní prostředků

Parametr wf (Wildcard-Filter) znamená, že bude zarezervován jeden datový tok sdílený pro všechny odesílatele (zdroje dat. toku)
    ff (Fixed-Filter) - pásmo se rezervuje zvlášť pro jednotlivé odesílatele, není sdíleno.
    se (Shared-Explicit) - bude zarezervován jeden datový tok (podobně jako wf), ale sdíleny pouze s vybranými odesílateli.
Parametr cl (Controlled Load) definuje požadovanou charakteristiku QoS a má tvar podobně jako TSpec:
    [cl <b> <r> <p> <m> <M>]
Místo cl může být použit parametr g (Guaranteed) tvaru:
    [g <R> <S> <b> <r> <p> <m> <M>], kde
    R - šířka pásma vyhrazená pro spojení
    S - čas, o který se může datagram zpozdit v síťovém uzlu


Další testování již nemělo žádný význam, jelikož i když na straně příjemce bylo pomocí Etherealu možné zachytit PATH zprávy, sám příjemce po provedení příkazu reserve vypsal chybu "No path message found...". Po vypnutí kontroly intergrity přijímaných zpráv již příjemce na zprávy reagoval, ale pouze vypsáním chyby "Parse error in RAW PKT". Zpráva RESV proto díky této chybě nemohla být vůbec odeslána. Tuto chybu jsme již bohužel nedokázali v rámci vymezeného času opravit. Náš problém je nejspíše způsoben ještě stále se vyskytujícími chybami ve zdrojových kódech daemona, špatným zkompilováním, nebo absencí ještě jiného patche.


Seznam zkratek

API - Application Programming Interface
ICMP - Internet Control Message Protocol
IETF - Internet Engineering Task Force
ISI - Information Science Institute
QoS - Quality of Service
RSVP - Resource Reservation Protocol 
UTP - Unshielded Twisted Pair

Použitá literatura

[1] RFC2205 -  http://www.ietf.org/rfc/rfc2205.txt [06/2006]
[2] RSVP Technology for UNINETT Multimedia Services -  http://home.himolde.no/%7Ekd/rsvp/pilot/rmain/rmain.html [06/2006]
[3] RSVP ReSerVation Protocol - http://www.isi.edu/rsvp/ [06/2006]
[4] Information Science Institute - http://www.isi.edu [06/2006]
[5] http://www.cs.helsinki.fi/u/jmanner/software/rsvp/ [06/2006]
[6] http://www.elektrorevue.cz/clanky/04036/ [06/2006]


Příloha: PATH message paket

+Frame 6 (178 bytes on wire, 178 bytes captured)
+Ethernet II, Src: 00:60:b0:ec:5d:bf, Dst: 00:12:0e:33:da:f6
+Internet Protocol, Src Addr: 1.0.0.2 (1.0.0.2), Dst Addr: 1.0.0.1 (1.0.0.1)
-Resource ReserVation Protocol (RSVP): PATH Message. SESSION: IPv4, Destination 1.0.0.1, Protocol RSVP Header. PATH Message.
    +RSVP Header. PATH Message.
    +SESSION: IPv4, Destination 1.0.0.1, Protocol 17, Port 5000.
    +HOP: IPv4, 1.0.0.2
    +TIME VALUES: 30000 ms (refresh interval - perioda zasílání zpráv)
    +SENDER TEMPLATE: IPv4, Sender 1.0.0.2, Port 5000.
    -SENDER TSPEC: IntServ: Token Bucket, 6000 bytes/sec.
        Length: 36
        Class number: 12 - SENDER TSPEC object
        C-type: 1 - Integrated Services
        Message format version: 0
        Data length: 7 words, not including header
        Service header: 1 - Traffic specification
        Length of service 1 data: 6 words, not including header
        -Token Bucket TSpec: Rate=6000 Burst=256 Peak=6000 m=64 M=256 (TSpec parametry)
            Parameter 127 - Token bucket
            Parameter 127 flags: 0x00
            Parameter 127 data length: 5 words, not including header
            Token bucket rate: 6000
            Token bucket size: 256
            Peak data rate: 6000
            Minimum policed unit [m]: 64
            Maximum packet size [M]: 256
    +ADSPEC