Address Resolution Protocol (ARP)
Tradičním komunikačním protokolem mezi systémy UNIX v Internetu je protokol TCP/IP. TCP/IP verze 4 používá svoje unikátní 32-bitové adresy, není vázán na nějakou fyzickou realizaci a pro transport dat využívá vzájemně propojené lokální sítě (např. Ethernet). Nižší protokol lokální sítě bývá silně hardwarově závislý a používá obvykle jiné adresování paketů. Protokol ARP zajišťuje překlad IP adres na odpovídající fyzické adresy uzlů v lokální síti.
Cvičení: Zjistěte svoji fyzickou (hardwarovou) a IP adresu. Použijte příkaz ifconfig.
Předpokládá se, že každá stanice zná svou IP i fyzickou adresu. Chce-li stanice A s IP adresou IP[A] poslat IP paket stanici B s IP adresou IP[B], potřebuje znát fyzickou adresu HW[B] stanice B, aby mohla dotyčný IP paket zabalit do protokolu fyzické sítě a poslat. Adresu HW[B] získá tak, že pošle fyzickou sítí pomocí protokolu ARP broadcast (všesměrový) paket se žádostí o překlad adresy IP[B]. Zatímco ostatní stanice na lokální síti broadcast ignorují, stanice B rozpozná v došlém dotazu svou IP adresu a odpoví. Stanice A pak použije fyzickou adresu z přijaté odpovědi.
Cvičení: ARP dotazy můžete sledovat příkazem tcpdump arp
.
Nastartujte virtuální stroj FC4. Nakonfigurujte rozhraní eth1
,
ale nesnažte se pomocí něho komunikovat. Zkuste spustit
tcpdump -i eth1 -n arp
zatímco na druhém
terminálu zkusíte komunikovat s nějakým jiným počítačem pomocí rozhraní
eth1
.
ARP cache
Aby před každým paketem nemusel odesilatel žádat pomocí ARP o adresu
adresáta, udržuje si v paměti tabulku často používaných fyzických adres -
ARP cache. Položky ARP cache získává plynule nutnými ARP dotazy a po určitém
čase (timeout) je zapomíná, aby síť pružně reagovala na změny adres.
Cvičení: ARP cache vypíšete příkazem arp
. Položky
označené příznakem C jsou cache a budou po určitém čase automaticky
zrušeny. Příznak M znamená, že položka je pevná (explicitně nastavená)
a nebude nikdy vymazána. Přiznak P (public) znamená, že položka
neslouží jen pro potřebu daného počítače,
ale v případě ARP dotazu na tuto položku ze sítě
tento počítač odpoví hodnotou položky,
ačkoliv může jít i o cizí IP i fyzickou adresu.
Bezpečnost
Protokol ARP není nijak zabezpečen proti zneužití. Pokud některá stanice na
lokální síti pošle ARP odpověď i na adresu, která ji nepřísluší, může tak
přesměrovat tok IP paketů jiným směrem a tím narušit IP provoz na dané
lokální síti. Protokol ARP se přenáší pouze v rámci lokální sítě (jeden
segment Ethernet), není proto možné, aby ARP komunikaci narušoval
někdo z cizí sítě.
Proxy ARP
Tato technika se používá k oddělení dvou sítí směrovačem (routerem), pokud
zároveň chceme, aby se obě sítě chovaly jako síť jediná - tj. např. stejná
brána pro obě poloviny, router není vidět - transparentní.
Pokud ze sítě A přijde ARP dotaz na IP adresu někoho v síti B,
tzn. že na síti A nikdo neodpoví,
pošle router na síť A fingovanou ARP odpověď říkající, že počítač
s požadovanou IP adresou má fyzickou adresu stejnou jako tento router.
Původní stanice si myslí, že odpověděl adresát a že posílá data přímo
adresátovi na jeho fyzickou adresu, ale veskutečnosti posílá data na
fyzickou adresu routeru a ten si pomocí ARP dotazu zjistí fyzickou adresu
cíle v síti B a data tam doručí. Z hlediska stanic se router chová spíše
jako inteligentní bridge. Výhodou je, že jednotlivé stanice můžeme beze
změny jejich konfigurace (IP-adresa, netmask, gateway) přenášet
mezi sítěmi A a B.
Proxy ARP se často používá v souvislosti se sériovou linkou, pokud je nějaký počítač A připojen pouze séroivou linkou (modemem) k počítači (routeru) R, který je na lokální síti (ethernet). Při běžném směrování by sériová linka tvořila z hlediska IP adres jinou síť, než je lokální ethernet, a počítač B by byl gateway do této sítě. Při použití proxy ARP dáme počítači A nějakou volnou IP adresu z rozsahu ethernet sítě a počítač B odpovídá i na ARP dotazy týkající se počítače A. Tím na sebe přesměruje IP provoz pro A, který pak transparentně předává sériovou linkou. Není třeba alokovat další adresní prostor pro sériovou linku, není třeba zasahovat do konfigurace vnějších routerů a může ušetřit i několik ARP paketů.
Sériová linka
Sériová linka je v Linuxu reprezentována speciálními soubory
/dev/ttyS0
, /dev/ttyS1
, atd. Sériovou linkou
realizovanou u PC rozhraním RS-232C lze přímo propojit dva počítače kabelem
(sériový laplink) na vzdálenost několika metrů. S použitím převodníku
RS-232C/RS-485 lze vzdálenost několikanásobně prodloužit. Na velké
vzdálenosti se používá modem, který provádí modulaci signálu. Funkce modemu
se ovládají pomocí speciálních příkazů posílaných jako data (AT příkazy).
Parametry sériové
linky - rychlost, paritu, počet stop bitů atd. - lze nastavit příkazem
setserial
(viz. man setserial), ale většina komunikačních
programů si umí základní parametry nastavit vlastními prostředky.
Základní funkcí linky je přenos znaků. Přenos můžete vyzkoušet programem
minicom
(jde o přepis DOSovského telix.exe do UNIXu). Je
interaktivní, ovládání má stejné jako DOSovský telix, akorát místo řídící
kombinace kláves
<CTRL>-<něco> používá kombinaci
<CTRL>-<A> <něco>. Hlavní menu je <CTRL>-<A>
<Z>. Programy tohoto typu sehrály svou roli v dobách stanic BBS.
Znakový provoz
Propojíte-li si po dvojicích vzájemně počítače sériovou linkou
(9-pinový konektor bývá asociován s /dev/ttyS0
, zatímco
25-pinnový konektor je reprezentován /dev/ttyS1
), můžete na
obou stranách spustit program minicom
, čímž vytvoříte
interaktivní komunikační nástroj - znaky jsou přenášeny linkou a zobrazovány
na protějším počítači. Přenos dat není zajištěn žádným protokolem, používá
se přímé ASCII kódování.
Terminálový provoz
Spustíte-li na jednom z počítačů místo programu minicom
program getty
s parametrem /dev/ttyS0
, můžete se ze
druhého počítače přihlásit na první pomocí programu minicom.
Po sériové lince se nepodaří přihlásit uživateli root, protože
/dev/ttyS0
není vyjmenováno v /etc/securetty.
Z pohledu systému se jedná o externí znakový terminál. Program getty
je vhodné vložit do souboru /etc/inittab, aby se spustil vždy po ukončení
spojení nebo procesů. Pozor, po přihlášení tímto způsobem obvykle není nastavena
proměnná TERM, takže nefungují fullscreenové programy, ani příkaz clear.
Proměnnou TERM můžete vždy po přihlášení dodatečně nastavit podle typu
terminálu, kde spouštíte minicom, nebo nastavovat automaticky např.
z /etc/profile, nebo hodnotu nastavit trvale jako poslední parametr programu
getty.
Cvičení: Virtuální počítač FC4 sériovou linku používá pro přístup ke
konzoli. Z hostitelského počítače na ní přistupujeme pomocí programu
xm console
nebo automaticky po spuštění skriptu
FC4.sh
nebo lze využít i minicom
.
Prohlédněte si soubor /etc/inittab
v počítači FC4 a lokalizujte
konfiguraci sériového portu.
IP provoz
Po sériové lince lze přenášet i IP pakety, sériová linka se může chovat jako
segment lokální sítě. K tomuto účelu je nutné přepnout mód provozu sériové
linky (tzv. serial line discipline), což můžeme učinit např. příkazem
slattach
. Existuje několik rozšířených protokolů pro přenos IP
datagramů po sériové lince - nejjednodušší je SLIP, CSLIP navíc komprimuje
IP hlavičku (nepotřebné bity vypouští), protokol PPP umí přenášet současně
nejen IP ale i IPX či jiné protokoly umí autorizovat spojení a obě stanice
se mohou v rámci PPP dohodnout na tom, jaké IP adresy budou používat.
Program slattach aktivuje na lince IP provoz nějakým protokolem a
alokuje pro ni v jádře interface - v případě SLIP sl0 (resp. sl1, sl2...,
pokud je sl0 již obsazen).
Dokud běží slattach, funguje IP provoz, program tedy spouštíme
na pozadí, nebo na zvláštním terminálu. Slattach však nenastavuje parametry
síťového interface (IP-adresu) ani směrovací tabulky. Proto musíme po
slattach požít ještě příkazy ifconfig a route.
- dip
Realizujeme-li pomocí sériové linky spojení komutovanou telefonní linkou, bývá
před zahájením IP provozu nutné identifikovat se protější stanici (vesměs
textovou komunikací) a teprve potom aktivovat protokol SLIP/CSLIP/PPP.
Lze to udělat třeba shellovým scriptem a příkazy typu echo username >
/dev/ttyS1
a následně použít příkazy slattach, ifconfig a route.
Mnoho starostí ušetří program dip
. Umožňuje inicializovat modem,
vytočit číslo, navázat rozhovor s protistanicí, autorizovat se, zahájit
provoz SLIP, nastavit interface a směrovací tabulky, ale krom toho umožňuje
správně reagovat na nezdařené či přerušené spojení. Umí však přenášet jen IP
protokol pomocí SLIP, CSLIP nebo PPP.
- pppd
Program pppd
patří do stejné kategorie jako dip, ale je mnohem
chytřejší. Umí přenášet i jiné protokoly než IP (IPX), lépe zpracovávat
možné chyby při spojení a je snadněji konfigurovatelný.