CSLIP
CSLIP (Compressed SLIP) je linkový protokol vycházející z protokolu SLIP s možností komprese TCP+IP záhlaví. Protokol slouží k přenosu dat na sériové lince. Protokol CSLIP komprimuje 40 bajtů záhlaví protokolů TCP a IP (přesněji 20 bajtů z TCP-záhlaví a 20 bajtů z IP-záhlaví), na velikost 3 až 16 bajtů. Ke komprimaci dochází u TCP a IP záhlaví, nikoliv u dat.
Význam slova komprese záhlaví neznamená kompresi, jak si ji představujme (např. pomocí programu ZIP). Autor CSLIP (Van Jacobson) si uvědomil, že mnoho údajů v IP a TCP záhlaví během TCP spojení zůstává stejná nebo se mění nepatrně, takže je dostačující přenášet změněné položky IP a TCP záhlaví nebo jen přírůstky těchto položek. Ke změně položek dochází:
- identifikace IP-datagramu
- pořadové číslo odesílaného bajtu
- pořadové číslo přijatého bajtu
- délka okna
- kontrolní součet TCP záhlaví
- ukazatel naléhavých dat
Změna ostatních položek je výjimečná. Položky celková délka IP-datagramu a kontrolní součet IP-záhlaví jsou nepotřebné.
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | ||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Verze IP | Délka záhlaví | Typ služby | Celková délka IP-datagramu | ||||||||||||||||||||||||||||||||
Identifikace IP-datagramu | Příznaky(flags) | Posunutí fragmentu od počátku | |||||||||||||||||||||||||||||||||
Doba života datagramu(TTL) | Protokol vyšší vrstvy | Kontrolní součet z IP-záhlaví | |||||||||||||||||||||||||||||||||
IP-adresa odesílatele | |||||||||||||||||||||||||||||||||||
IP-adresa příjemce | |||||||||||||||||||||||||||||||||||
Zdrojový port | Cílový port | ||||||||||||||||||||||||||||||||||
Pořadové číslo odesílaného bajtu | |||||||||||||||||||||||||||||||||||
Pořadové číslo přijatého bajtu | |||||||||||||||||||||||||||||||||||
Délka záhlaví | Rezerva | URG | ACK | PSH | RST | SYN | FIN | Délka okna | |||||||||||||||||||||||||||
Kontrolní součet | Ukazatel naléhavých dat |
Ke komprimování záhlaví dochází u TCP protokolu a v záhlaví se změní pouze výše uvedené položky. V opačném případě (např. pokud se jedná o ICMP paket, UDP datagram či fragment IP-datagramu, nebo je-li nastaven některý z příznaků RST,SYN,FIN ,nedojde ke kompresi a přenese se nekomprimovaný rámec.
Komprese-dekomprese
Posílá-li odesílatel TCP/IP paket, pak je paket na straně odesílatele předán kompresoru. Kompresor paket zkomprimuje nebo jej pustí bez změny. Na straně příjemce dekompresor sestaví paket do původní podoby. Kompresor komprimuje postupně jednotlivé datové toky (spojení). Všechny důležité informace ze záhlaví TCP a IP nutné pro kompresi a dekompresi si udržuje kompresor ve slotu.
Při odesílání paketu projde odesílatelův paket kompresorem. Kompresor analyzuje, zda je paket komprimovaný či ne. Pokud je paket nekomprimovaný nebo byl odeslán paket ICMP, UDP datagram, fragment IP-datagramu nebo má paket nastaven některý z příznaků RST,SYN,FIN, je paket poslán bez komprese. V opačném případě je spuštěn proces komprimace záhlaví. Kompresor prohledá své sloty, zdali nemá uložené informace z TCP/IP záhlaví konkrétního paketu.
- Mohou nastat dvě situace
- Žádný slot kompresoru neobsahuje informace TCP+IP záhlaví, tudíž se jedná o první komprimovatelný paket nového spojení (první paket nového TCP spojení má nastaven příznak SYN). Dojde k vložení záhlaví TCP a IP tohoto paketu do prvního volného slotu. Není-li žádný slot volný, použije se nejdéle nepoužívaný slot. Kompresor tento paket nekomprimuje a následovně dojde v poli Protokol vyšší vrstvy(Protocol) ke změně hodnoty na číslo použitého slotu.
- Kompresor našel ve slotu číslo Č záhlaví IP a TCP, které náleží předchozímu spojení. Kompresor provede okamžitou kompresi paketu.
Komprimované záhlaví
Komprimované záhlaví obsahuje v prvním bajtu tzv.masku. Pomocí jednotlivých bitů masky lze zjistit, které položky v záhlaví originálního paketu se změnily.
- | Č | I | P | S | A | W | U | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
číslo slotu(číslo spojení)-Č | |||||||||||||||||||||||||||||||
kontrolní součet TCP | |||||||||||||||||||||||||||||||
ukazatel naléhavých dat-U | |||||||||||||||||||||||||||||||
přírůstek velikosti okna-W | |||||||||||||||||||||||||||||||
přírůstek potvrzených dat-A | |||||||||||||||||||||||||||||||
přírůstek odeslaných dat-S | |||||||||||||||||||||||||||||||
přírůstek identifikace IP-datagramu-I | |||||||||||||||||||||||||||||||
data |
- Jednotlivé bity masky
- Č - značí číslo slotu. Číslo slotu není povinné. Pokud číslo slotu není uvedeno, pak se předpokládá že číslo slotu je shodné s číslem slotu předchozího komprimovaného paketu. Číslo slotu je reprezentováno hodnotou jeden bajt, protože číslo slotu se přenáší mezi kompresorem a dekompresorem v poli Protokolu vyšší vrstvy, které je dlouhé právě jeden bajt.
Proto je možné komprimovat zároveň max. 255 připojení.
- U - ukazatel naléhavých dat. Oznamuje, že je v paketu vyplněno pole obsahující ukazatel naléhavých dat.
- W - přírůstek velikosti okna. U komprimovaného záhlaví nedochází k přenosu celkové velikosti okna ale jen přírůstku. Pokud by přírůstek přesahoval velikost 64K nebo byl záporný, nedošlo by ke komprimaci paketu.
- A - přírůstek potvrzených dat.
- S - přírůstek odeslaných dat.
- I - přírůstek identifikace IP-datagramu.
- P - příznak PUSH.
TCP spojení je duplexní, ale komprimace záhlaví se provádí pro každý směr zcela samostatně.
Protokol CSLIP je popsán v RFC-1144. Celý mechanismus a problematika komprese IP záhlaví je již možné přenést i na jiné protokoly (např. UDP, IPv6) a specifikace se nachází pod RFC-2507 až 2509.
Reference
- Alena Kabelová,Libor Dostálek: Velký průvodce protokoly TCP/IP a systémem DNS, CP Books, 2005; ISBN 80-7226-675-6