VŠB TU OSTRAVA 10.1.2007 Semestrální projekt do předmětu Technologie počítačových sítí Analýza a praktické ověření možností protokolu IPCP Vypracovali : Luboš Hejduk hej044, Petr Sedlář sed165 1
Analýza protokolu IP Control Protocol (IPCP) Při posílání IP datagramu po lince si musí nejprve oba hostitelé protokolem PPP dohodnout, jakou IP adresu bude každý z nich používat. Řídicím protokolem, který se k tomuto účelu používá, je právě protokol IPCP, neboli protokol na řízení internetového protokolu. Protokol IPCP je protokol NCP pro protokol IP verze 4. Formát rámce IPCP protokolu je vyjádřen na obrázku níže na straně 3(obr.1). IP Control Protocol (IPCP) je zodpovědný za konfiguraci, povolení a zakázání parametrů (IP adresy, komprese hlaviček) pro přenos IP protokolu na obou koncích point-to-point linek. Řídící zprávy IPCP se nesmí vyměňovat do té doby, než Link Control Protocol (LCP) dohodne vlastnosti linky (velikost rámce, autentizační protokol, atd.) Před dosáhnutím tohoto stavu, by měly být všechny přijaté řídící zprávy protokolu IPCP bez výstrahy zahazovány. Protokol IPCP je podobný jako Link Control Protocol (LCP). Více o protokolu LCP je uvedeno v [2] - Projekt Antonína Plucnary s názvem,,studium a analýza protokolu LCP (PPP) nebo také v RFC 1331. Protokol IPCP používá stejného mechanismu pro výměnu řídících zpráv jako (LCP), ale obsahuje určité vyjímky: Pole protokol Každý IPCP paket je zabalen v rámci PPP a je označen v poli,,protokol číslem 8021H (IP Control Protocol). Pole kód Pouze kódy 1 až 7 ((Configure-Request, Configure-Ack, Configure-Nak, Configure-Reject, Terminate-Request, Terminate-Ack and Code-Reject) jsou používány. Ostatní kódy jsou považovány za neznámé a měly by být zamítnuty. Pole volba Toto pole obsahuje kódy 2, 3, 129, 131, které jsou určené k nastavení IPCP požadavku a podrobněji jsou popsány níže na straně 4. Timeout Implementace IPCP by měla být připravena čekat na autentifikaci a dohodnutí vlastností linky, před tím než vyprší čekací doba (time out) na Configure ACK nebo jiné odpovědi. Předpokládá se, že implementace se ukončí pouze zásahem uživatele nebo uplynutím nastavitelné doby spojení. 2
Obr.1 Protokol IPCP zdroj: Velký průvodce protokoly TCP-IP a systémy DNS [3] Osmibitové pole kód specifikuje typ příkazu (resp. odpovědi) protokolu IPCP: Kód Název kódu Význam 1 Configure-Request Konfigurační paket nesoucí požadavky o změně parametrů (komprese IP hlaviček) a informaci o IP adrese. Pokud je IP adresa 0.0.0.0, požaduje přidělení IP adresy od protějšího směrovače. 2 Configure-Ack Konfigurační paket s kladným potvrzením požadavků na změnu implicitních parametrů. Tj. všechny požadované změny parametrů jsou akceptovány. 3 Configure-Nak Konfigurační paket s odpovědí. Avšak protější strana neakceptuje všechny požadavky na změnu parametrů linky. Ty které neakceptuje, jsou v tomto paketu specifikovány. Ostatní požadavky jsou akceptovány (tj. požadavky nespecifikované v paketu Configure-Nak jsou akceptovány). 4 Configure-Reject Konfigurační paket odmítající všechny požadavky. Může být i důsledkem chybného kódu požadavku. 5 Terminate-Request Požadavek na ukončení logického spojení 6 Terminate-Ack Potvrzení požadavku na ukončení logického spojení 7 Code-Reject Odmítnutí požadavku z důvodu neznámého kódu. Může být způsobeno i tím, že protější stanice používá jinou verzi protokolu. Osmibitové pole ID je identifikace požadavku. Odesílatel výplní nějaký údaj do tohoto pole a adresát jej zkopíruje do své odpovědi. Pomocí tohoto pole se určuje příslušnost odpovědi k požadavku. Šestnáctibitové pole délka obsahuje číslo udávající součet délek polí: kód, ID, délka a volby. Pole volby obsahuje jednotlivé požadavky (resp. odpovědi) na změnu implicitních parametrů linky. Toto pole se skládá z jedné nebo více voleb. Jednotlivé volby jsou ukládány 3
sekvenčně za sebou. Pole volba a délka jsou jednobajtové, jejich formát je obdobný formátu voleb protokolu LCP (viz obr.2). Obr.2 Struktura voleb zdroj: Velký průvodce protokoly TCP-IP a systémy DNS [3] Možností nastavení IPCP Volba Název kódu Význam 2 IP-Compression-Protocol Komprese TCP/IP záhlaví (viz. RFC-1144). Pole data obsahuje 002d H. Délka je 6, protože další 2 bajty obsahují parametry komprese Max-Slot-Id a Comp-Slot-Id (viz. RFC 1332). 3 IP Address Předání IP adresy protějšku. Takto je možno dynamicky přidělovat IP-adresy. Chce-li protějšek použít jinou IP adresu, pak odpoví paketem Configure-Nak, kde tuto adresu specifikuje. Pole data obsahuje čtyřbajtovou IP-adresu a délka je 6. 129 Primary-DNS-Address Specifikace primárního jmenného serveru.pole data obsahuje čtyřbajtovou IP-adresu primarního jmenného serveru, délka je (RFC-1877). 131 Secondary-DNS-Address Specifikace sekundárního jmenného serveru, pole data obsahuje čtyřbajtovou IP-adresu primárního jmenného serveru, délka je 6 (RFC-1877). Van Jacobsonova komprese Ke kompresi TCP/IP hlaviček se používá komprese zvaná Van Jacobson. Umožňuje komprimovat TCP záhlaví a redukovat tak velikost TCP hlaviček až na 3 byty. Toto může být významné zlepšení na pomalých sériových linkách. Pokud požadujeme obousměrnou kompresi, pak každý konec linky musí odděleně požadovat Van Jacobsonovu kompresi. 4
V rámci protokolu PPP bez komprese se pro přenos datových paketů s protokolem IP verze 4 použije identifikace protokolu jen 0021 H. V případě komprese je situace komplikovanější, protože ne všechny pakety mají komprimované záhlaví (ne všechny IP pakety nesou protokol TCP, např. pakety ICMP se nekomprimují). Je tedy nutné rozlišovat v přenášených paketech pakety s komprimovaným TCP/IP záhlavím a pakety s nekomprimovaným záhlavím. Proto v záhlaví PPP-rámce v poli protokol mají nekomprimované pakety identifikaci 0021 H a pakety s komprimovaným IP záhlavím identifikaci 002d H. Podrobný popis a ukázka implementace Van Jacobsonovi komprese je uvedena v RFC 1144. Praktické ověření možností IPCP protokolu Základní konfigurace Příklad rámců protokolu IPCP (Configure Request a Configure Ack) jsme odchytili ve školní laboratoři na dvou směrovačích Cisco. Směrovače jsme zapojili podle schématu zapojení (obr.3) Obr.3 Schéma zapojení, Na směrovačích RA, RB jsme přiřadili IP adresy na sériové rozhraní. U DCE strany je potřeba nastavit frekvenci hodinového signálu určující bitovou rychlost, dále jsme nastavili, že protokolem spojové vrstvy bude PPP a na závěr povolíme interface. Základní konfigurace směrovačů, které jsme použili jsou uvedeny níže. Základní nastavení směrovače RA: Hostname RA Ip address 10.0.0.1 255.255.255.0 Clock rate 64000 Encapsulation ppp No shutdown 5
Základní nastavení směrovače RB: Hostname RB Ip address 10.0.0.2 255.255.255.0 Encapsulation ppp No shutdown Konfigurace protokolu IPCP přidělení IP adresy Po nastavení základní konfigurace směrovače RA a RB, jsme na sériovém rozhraní směrovače RB nastavili, aby si vyžádala ip adresu od druhého konce (směrovače RA) přes IPCP protokol. Naopak u směrovače RA jsme na sériovém rozhraní nastavili, aby při požádání přidělil IP adresu 10.0.0.5 druhému konci. Nastavení přidělení IP adresy na směrovači RA: Peer default ip address 10.0.0.5 Nastavení vynucení IP adresy na směrovači RB: Ip address negotiated Na směrovači RA jsme zapnuli zobrazování průběhu sestavování spojení a vypnuli sériové rozhraní S0. debug ppp negotiation shutdown Při navázání nového spojení (po zadání příkazu no shutdown ) směrovač RA vypíše: *Jan 15 13:00:16.239: %LINK-3-UPDOWN: Interface Serial0/1/0, changed state to up *Jan 15 13:00:16.239: Se0/1/0 PPP: Using default call direction *Jan 15 13:00:16.239: Se0/1/0 PPP: Treating connection as a dedicated line *Jan 15 13:00:16.239: Se0/1/0 PPP: Session handle[d8000003] Session id[2] 6
*Jan 15 13:00:16.239: Se0/1/0 PPP: Phase is ESTABLISHING, Active Open *Jan 15 13:00:16.239: Se0/1/0 LCP: O CONFREQ [Closed] id 2 len 10 *Jan 15 13:00:16.239: Se0/1/0 LCP: MagicNumber 0x175F02A0 (0x0506175F02A0) *Jan 15 13:00:16.239: Se0/1/0 LCP: I CONFREQ [REQsent] id 88 len 10 *Jan 15 13:00:16.239: Se0/1/0 LCP: MagicNumber 0x17F978C9 (0x050617F978C9) *Jan 15 13:00:16.239: Se0/1/0 LCP: O CONFACK [REQsent] id 88 len 10 *Jan 15 13:00:16.239: Se0/1/0 LCP: MagicNumber 0x17F978C9 (0x050617F978C9) *Jan 15 13:00:16.243: Se0/1/0 LCP: I CONFACK [ACKsent] id 2 len 10 *Jan 15 13:00:16.243: Se0/1/0 LCP: MagicNumber 0x175F02A0 (0x0506175F02A0) *Jan 15 13:00:16.243: Se0/1/0 LCP: State is Open *Jan 15 13:00:16.243: Se0/1/0 PPP: Phase is FORWARDING, Attempting Forward *Jan 15 13:00:16.247: Se0/1/0 PPP: Phase is ESTABLISHING, Finish LCP *Jan 15 13:00:16.247: Se0/1/0 PPP: Phase is UP *Jan 15 13:00:16.247: Se0/1/0 IPCP: O CONFREQ [Closed] id 1 len 10 *Jan 15 13:00:16.247: Se0/1/0 IPCP: Address 10.0.0.1 (0x03060A000001) *Jan 15 13:00:16.247: Se0/1/0 CDPCP: O CONFREQ [Closed] id 1 len 4 *Jan 15 13:00:16.247: Se0/1/0 PPP: Process pending ncp packets *Jan 15 13:00:16.247: Se0/1/0 IPCP: I CONFREQ [REQsent] id 1 len 10 *Jan 15 13:00:16.247: Se0/1/0 IPCP: Address 0.0.0.0 (0x030600000000) *Jan 15 13:00:16.247: Se0/1/0 IPCP: O CONFNAK [REQsent] id 1 len 10 *Jan 15 13:00:16.247: Se0/1/0 IPCP: Address 10.0.0.5 (0x03060A000005) *Jan 15 13:00:16.247: Se0/1/0 CDPCP: I CONFREQ [REQsent] id 1 len 4 *Jan 15 13:00:16.247: Se0/1/0 CDPCP: O CONFACK [REQsent] id 1 len 4 *Jan 15 13:00:16.251: Se0/1/0 IPCP: I CONFACK [REQsent] id 1 len 10 *Jan 15 13:00:16.251: Se0/1/0 IPCP: Address 10.0.0.1 (0x03060A000001) *Jan 15 13:00:16.255: Se0/1/0 CDPCP: I CONFACK [ACKsent] id 1 len 4 *Jan 15 13:00:16.255: Se0/1/0 CDPCP: State is Open *Jan 15 13:00:16.255: Se0/1/0 IPCP: I CONFREQ [ACKrcvd] id 2 len 10 *Jan 15 13:00:16.255: Se0/1/0 IPCP: Address 10.0.0.5 (0x03060A000005) *Jan 15 13:00:16.255: Se0/1/0 IPCP: O CONFACK [ACKrcvd] id 2 len 10 *Jan 15 13:00:16.255: Se0/1/0 IPCP: Address 10.0.0.5 (0x03060A000005) *Jan 15 13:00:16.255: Se0/1/0 IPCP: State is Open *Jan 15 13:00:16.259: Se0/1/0 IPCP: Install route to 10.0.0.5 *Jan 15 13:00:16.259: Se0/1/0 IPCP: Add link info for cef entry 10.0.0.5 *Jan 15 13:00:17.247: %LINEPROTO-5-UPDOWN: Line protocol on Interface Serial0/1/0, changed state to up *Jan 15 13:00:18.259: Se0/1/0 IPCP: Install route to 10.0.0.5 *Jan 15 13:00:18.259: Se0/1/0 IPCP: Add link info for cef entry 10.0.0.5 --ukončení fáze, která dohodla vlastnosti linky (velikost rámce ). Múžou se začít posílat IPCP pakety --Configure Request od RA, který žádá o povolení adresy 10.0.0.1 -- Configure Request od RB, který žádá o povolení adresy 0.0.0.0, což znamená že chce přidělit od RA IP adresu --Configure Non Acknowledge od RA obsahuje informace se kterými nesouhlasí a které si má router RB pokud možno změnit (RA posílá paket, že RB má adresu 10.0.0.5) -- Configure Acknowledge od RB který potvrzuje že souhlasí s adresou 10.0.0.1 --Configure Request od RB, který žádá o povolení adresy 10.0.0.5 -- Configure Acknowledge od RB který potvrzuje že souhlasí s adresou 10.0.0.5 Při odpojení rozhraní směrovač RA vypíše: *Jan 15 12:59:42.195: %LINK-3-UPDOWN: Interface Serial0/1/0, changed state to down *Jan 15 12:59:42.195: Se0/1/0 PPP: Sending Acct Event[Down] id[3] *Jan 15 12:59:42.195: Se0/1/0 CDPCP: State is Closed *Jan 15 12:59:42.195: Se0/1/0 IPCP: Remove link info for cef entry 10.0.0.5 *Jan 15 12:59:42.195: Se0/1/0 IPCP: State is Closed *Jan 15 12:59:42.195: Se0/1/0 PPP: Phase is TERMINATING *Jan 15 12:59:42.195: Se0/1/0 LCP: State is Closed *Jan 15 12:59:42.195: Se0/1/0 PPP: Phase is DOWN *Jan 15 12:59:42.199: Se0/1/0 IPCP: Remove route to 10.0.0.5 *Jan 15 12:59:42.199: Se0/1/0 IPCP: Remove default route thru 10.0.0.5 *Jan 15 12:59:43.195: %LINEPROTO-5-UPDOWN: Line protocol on Interface Serial0/1/0, changed state to down Po obdržení výpisů jsme přidělení a vyžádání IP adresy u obou směrovačů zakázali a nastavili směrovače podle základní konfigurace. 7
Konfigurace protokolu IPCP komprese TCP hlaviček V protokolu IPCP lze také provádět kompresi TCP záhlaví. Jedná se o kompresi nazvanou,,van Jacobson, která provádí pouze komprimaci TCP hlaviček. Jiné protokoly (ICMP, UDP, atd.) v tomto případě komprimovány nejsou. Nastavení komprese na směrovači RA a RB: Ip tcp header-compression Výpis směrovače RA při navazování spojení: *Jan 15 13:20:07.475: %LINK-3-UPDOWN: Interface Serial0/1/0, changed state to up *Jan 15 13:20:07.475: Se0/1/0 PPP: Using default call direction *Jan 15 13:20:07.475: Se0/1/0 PPP: Treating connection as a dedicated line *Jan 15 13:20:07.475: Se0/1/0 PPP: Session handle[c100000a] Session id[9] *Jan 15 13:20:07.475: Se0/1/0 PPP: Phase is ESTABLISHING, Active Open *Jan 15 13:20:07.475: Se0/1/0 LCP: O CONFREQ [Closed] id 9 len 10 *Jan 15 13:20:07.475: Se0/1/0 LCP: MagicNumber 0x17712FEB (0x050617712FEB) *Jan 15 13:20:07.479: Se0/1/0 LCP: I CONFREQ [REQsent] id 95 len 10 *Jan 15 13:20:07.479: Se0/1/0 LCP: MagicNumber 0x180BA604 (0x0506180BA604) *Jan 15 13:20:07.479: Se0/1/0 LCP: O CONFACK [REQsent] id 95 len 10 *Jan 15 13:20:07.479: Se0/1/0 LCP: MagicNumber 0x180BA604 (0x0506180BA604) *Jan 15 13:20:07.479: Se0/1/0 LCP: I CONFACK [ACKsent] id 9 len 10 *Jan 15 13:20:07.483: Se0/1/0 LCP: MagicNumber 0x17712FEB (0x050617712FEB) *Jan 15 13:20:07.483: Se0/1/0 LCP: State is Open *Jan 15 13:20:07.483: Se0/1/0 PPP: Phase is FORWARDING, Attempting Forward *Jan 15 13:20:07.483: Se0/1/0 PPP: Phase is ESTABLISHING, Finish LCP *Jan 15 13:20:07.483: Se0/1/0 PPP: Phase is UP *Jan 15 13:20:07.483: Se0/1/0 IPCP: O CONFREQ [Closed] id 1 len 16 *Jan 15 13:20:07.483: Se0/1/0 IPCP: CompressType VJ 15 slots CompressSlotID (0x0206002D0F01) *Jan 15 13:20:07.483: Se0/1/0 IPCP: Address 10.0.0.1 (0x03060A000001) *Jan 15 13:20:07.483: Se0/1/0 CDPCP: O CONFREQ [Closed] id 1 len 4 *Jan 15 13:20:07.483: Se0/1/0 PPP: Process pending ncp packets *Jan 15 13:20:07.487: Se0/1/0 IPCP: I CONFREQ [REQsent] id 1 len 16 *Jan 15 13:20:07.487: Se0/1/0 IPCP: CompressType VJ 15 slots CompressSlotID (0x0206002D0F01) *Jan 15 13:20:07.487: Se0/1/0 IPCP: Address 10.0.0.2 (0x03060A000002) *Jan 15 13:20:07.487: Se0/1/0 IPCP: O CONFACK [REQsent] id 1 len 16 *Jan 15 13:20:07.487: Se0/1/0 IPCP: CompressType VJ 15 slots CompressSlotID (0x0206002D0F01) *Jan 15 13:20:07.487: Se0/1/0 IPCP: Address 10.0.0.2 (0x03060A000002) *Jan 15 13:20:07.487: Se0/1/0 CDPCP: I CONFREQ [REQsent] id 1 len 4 *Jan 15 13:20:07.487: Se0/1/0 CDPCP: O CONFACK [REQsent] id 1 len 4 *Jan 15 13:20:07.491: Se0/1/0 IPCP: I CONFACK [ACKsent] id 1 len 16 *Jan 15 13:20:07.491: Se0/1/0 IPCP: CompressType VJ 15 slots CompressSlotID (0x0206002D0F01) *Jan 15 13:20:07.491: Se0/1/0 IPCP: Address 10.0.0.1 (0x03060A000001) *Jan 15 13:20:07.491: Se0/1/0 IPCP: State is Open *Jan 15 13:20:07.491: Se0/1/0 IPCP: Install route to 10.0.0.2 *Jan 15 13:20:07.495: Se0/1/0 CDPCP: I CONFACK [ACKsent] id 1 len 4 *Jan 15 13:20:07.495: Se0/1/0 CDPCP: State is Open *Jan 15 13:20:07.495: Se0/1/0 IPCP: Add link info for cef entry 10.0.0.2 *Jan 15 13:20:08.483: %LINEPROTO-5-UPDOW --Configure Request od RA, který žádá o povolení adresy 10.0.0.1, a dále žádá o povoleni VJ komprese hlaviček. --Configure Request od RB, který žádá o povolení adresy 10.0.0.2, a dále žádá o povoleni VJ komprese hlaviček. -- Configure Acknowledge od RA který potvrzuje že souhlasí s adresou 10.0.0.2 a kompresi hlaviček -- Configure Acknowledge od RB který potvrzuje že souhlasí s adresou 10.0.0.1 a kompresi hlaviček 8
Závěr Provedli jsme analýzu protokolu IPCP a prakticky odzkoušeli možnosti jeho využití mezi dvěma směrovači Cisco propojených sériovou linkou. U přidělení IP adresy přes protokol IPCP jsme zjistili, že i když jsme nastavili na směrovačích RA a RB statické IP adresy sériových rozhraní a na směrovači RA nechali zapnuté přidělení IP adresy, tak smerovač RA přiřadil směrovači RB IP adresu, kterou měl nastavenou pro přidělování a ten si ji přenastavil, což by podle RFC 1332 měl udělat jen, když mu směrovač RB pošle adresu 0.0.0.0. Jinak vše ostatní probíhalo podle očekávání. Použitá literatura [1] RFC 1332 - The PPP Internet Protocol Control Protocol (IPCP) http://www.faqs.org/rfcs/rfc1332.html [2] Plucnara A., Studium a analýza protokolu LCP (PPP) http://www.cs.vsb.cz/grygarek/tps/projekty/0405z/ppp/lcp.pdf [3] Dostálek L.,Kabelová A., Velký průvodce protokoly TCP-IP a systémy DNS, nakladatelství Computer Press, Praha 2000 9