Sériový přenos je přenos dat po jedno vodiči, bity jdou za sebou.
Modem je zařízení, které mění digitální signál na analogový pro přenos po jednom nebo dvou párech vodičů, určených pro přenos zvuku. Máme dva druhy přenosů, synchronní vs. asynchronní. Je nutno zabezpečit výlučný přístup k modemu. Všechny programy, které modem používají musí mít stejnou metodu zamykání (flock(2) nebo přes soubor /var/lock/LCK...)
Synchronní přenos (V.35, X.21 ...) se používá nad pevnými linkami (dvou- nebo čtyřdrát), vysílající musí začít vysílat v pevně daném okamžiku, předávají se taktovací informace.
Asynchronní přenos (RS-232, V.34 ...) se zcela běžně používá pro dial-up spojení, rychlost tohoto spojení je běžně 300 - 115 200 bps, nejlepší čipy dosahují dnes 460 kbps. Asynchronní modemy jsou určeny především pro komutované linky (teoretická propustnost 30 kbps), používají různé komprese (MNP5, V.42bis) a korekce dat (V.42, HST, MNP2-4). Volaný modem řídí vyjednávání o přenosových protokolech. Modemy se ovládají pomocí AT příkazů.
SLIP - Serial Line IP, protokol pro přenos IP datagramů na sériovou linkou.
PPP - Point-to-Point Protokol také slouží pro posílání datagramů nad sériovou linkou, avšak odstraňuje spoustu nedostatků (umožňuje počáteční dohodu na parametrech spojení např. IP adresa, max. velikost datagramu, možnost ověření totožnosti klienta). Specifikace PPP se nalézá v RFC 1548 (request for comments).
AT příkazy se používají k ovládání modemu, zde je pouze výpis pár nejužívanějších.
Na nejnižší vrstvě protokolu PPP se nachází HDLC - High-Level Data Link Control Protokol, který definuje pole jednotlivých rámců protokolu PPP a poskytuje 16 bitový kontrolní součet. Narozdíl od SLIPu může rámec PPP obsahovat pakety jiných protokolů než IP, např. IPX, Appletalk apod. Je to dáno tím, že k základnímu rámci HDLC protokolu je přidáno speciální protokolové pole, které identifikuje typ přenášeného paketu daným rámcem.
Nad protokolem HDLC se používá LCP - Link Control Protokol ke sjednávání parametrů datového spojení např. MRU - maximum recieve unit, maximální velikost datagramu.
Dalším důležitým krokem ve fázi konfigurace spojení je ověření totožnosti klienta. Není povinné, ale přesto je u většiny linek nabízejících připojení de facto nezbytné. Server obvykle vyzve klienta k ověření své totožnosti za pomocí nějakého tajného klíče. Není-li volající schopen poskytnout správný klíč, je spojení ukončeno. Stejně může žádat identifikaci i klient. Obě tyto procedury jsou na sobě nezávislé. Pro účely těchto dvou různých způsobů ověřování jsou k dispozici dva protokoly PAP - Password Authentication Protocol a CHAP - Challenge/Cryptographic Handshake Authentication Protocol.
Kromě vlastního posílání IP-datagramů po lince podporuje protokol PPP také Van Jacobsonovu kompresi hlaviček IP-datagramů. Používá se por zmenšení velikosti hlaviček Tcp-paketů až na 3 bajty. I použití VJ komprese hlaviček je možno sjednat při spuštění pomocí protokolu IPCP - Internet Protokol Control Protokol.
V Linuxu je funkce rozdělena na dvě části, na ovladač HDLC, který se nachází v jádru a na démona uživatelského prostoru pppd, který se stará o různé řídící protokoly. Protokol PPP je, stejně jako SLIP, implementován pomocí speciálního režimu linky. Chcete-i používat nějakou sériovou linku jako linku s protokolem PPP, musíte nejprve obvyklým způsobem vytvořit spojení s pomocí modemu a následně převést linku do režimu PPP. Pak budou všechna příchozí data postoupena ovladači PPP, který ověří platnost rámců HDLC, rozbalí je a odešle. Ovladači jádra Linuxu pomáhá démon pppd, který provádí veškerou inicializační fázi a fázi ověřování totožnosti.
auth #požaduj autorizaci usehostname #pro CHAP použij lokální jméno lock #používej zamykání - vytváří soubor /var/lock/LCK..cua3, #pokud se používá zařízení /dev/cua3 domain fi.muni.cz #doména lokálního stroje
pppd conect "chat -f scriptfile" /dev/cua3 38400 -detach crtscts modem defaultroute
Protokol PAP pracuje v podstatě stejně jako klasická přihlašovací procedura. Klient ověří svoji totožnost tak, že serveru pošle jméno uživatele a (volitelně zašifrované) heslo, tato data server porovná se svou tajnou databází. Lze jej obejít prostým odposloucháváním sériové linky.
/etc/ppp/pap-secrets
#uživatel server heslo požadovaná povolená adresa mujlogin mujserver MojeHeslo moje.adresa.cz
Protokol CHAP takové nedostatky nemá. Server pošle klientovi náhodně vygenerovaný řetězec s výzvou a svůj název hostitele. Klient na základě názvu hostitele vyhledá příslušné tajné informace a zkombinuje je s přijatou výzvou, zašifruje tento řetězec s pomocí jednosměrné šifrovací funkce. Výsledek pak společně s názve hostitele klienta pošle zpět serveru. Ten provede stejné výpočet a dojde-li k témuž výsledku, povolí klientovi přístup. CHAP také kontroluje totožnost klienta v pravidelných intervalech, aby se ujistil, že klienta někdo nenahradil např. přepnutím tel. linek. Implicitně se démon pppd snaží používat tento protokol pro ověření totožnosti.
/etc/ppp/chap-secrets
#klient server tajemství adresa #pole adresa může být prázdné = jakýkoliv požadavek na IP adresu bude úspěšný, #nebo obsahovat '-' = žádný požadavek neprojde, #nebo specifikovat adresy na než bude požadavek IP adresy úspěšný jsuklient.cz jsuserver.cz "blablabla a jeste bla" jsuserver.cz jsuklient.cz "este neco hloupeho" - * jsuserver2.cz "dalsi hloupe heslo" public.jsuserver2.cz
chat - program pro komunikaci s modemem, navázání spojení apod.
ABORT RING ABORT BUSY ABORT ERROR ABORT "NO CARRIER" REPORT CONNECT '' ATZ OK ATDT12345 CONNECT '' ogin: ppp word: PpPogin: ppp word: PpP - program chat čeká na řetězec ogin:, aby nevadilo velké či malé písmeno "L" a poté odešle ppp a opět čeká na word:, pak odešle PpP, jako naše heslo
Teoreticky je nutné vytvořit speciální účet ppp, přidělit mu nějaký skript, jakožto přihlašovací příkazový interpreter. Do souboru /etc/passwd přidáme například:
ppp:*:500:200Public PPP Account:/tmp:/etc/ppp/ppploginDále je potřeba nastavit nějaké heslo pro tento účet pomocí passwd.
#!/bin/bash # mesg n #zabrání zápisu na tty např. pomocí write stty -echo exec pppd -detach slient modem crtscts auth
stty - nastavení terminálové linky, bez parametrů vypíše některé informace o lince a linkové disciplíně