Jeden z najfascinujúcejších aspektov počítačových ( ale aj iných ;-) ) systémov je schopnosť spájania sa. Tento článok popisuje jednotlivé kroky, ktoré vedú k úspešnému vytvoreniu sieťového spojenia a spôsoby ako zistiť, kde je pes zakopaný, keď sa vyskytne problém.
Pre niektorých z nás problémy začínajú už pri prenose bitov a bajtov cez telefónnu linku. Ak to nie je váš prípad môžete pár odstavcov preskočiť. Prenos základných dát cez telefónnu linku obstaráva protokol, ktorý sa nachádza tesne pod IP. Aký protokol to konkrétne je, záleží na spôsobe prepojenia. Pre klasickú analógovú telefónnu linku je to PPP (Point-to-Point protokol) rovnako ako pre ISDN. Pre ADSL pripojenie je to PPPoE (PPP over Ethernet). Povedzme si o nich niečo viac:
Tento protokol potrebuje podporu v jadre a tiež pppd
- PPP démon.
Ak používate distribučné jadro, je veľmi pravdepodobné, že túto podporu v ňom
máte zapnutú. Ak si kompilujete vlastné jadro potrebujete mať zapnutú voľbu
Device Drivers -> Networking support -> Network device support
-> [*] PPP (point-to-point protocol) support
Podpora pre PPP môže byť skompilovaná priamo v jadre, alebo ako modul s názvom
ppp_generic. To či túto podporu máte, možno vidieť počas bootovania systému,
alebo vo výpise dmesg:
# dmesg ... PPP generic driver version 2.4.2 ...
Predchodcom PPP je SLIP (Serial Line IP), resp. CSLIP (Compressed SLIP). Aj tento protokol, potrebuje podporu v jadre.
PPP démon je program, ktorý sa spravidla štartuje na strane klienta pomocou
dialera - programu, ktorého starosťou je inicializovanie modemu a vytočenie
telefónneho čísla. Po úspešnom telefónnom spojení s druhou stranou sa na
oboch stranách riadenie odovzdáva PPP démonu. Ten zariadi to, že modem sa tvári
ako ďalšie sieťové rozhranie - sieťová karta. Meno tohoto rozhrania je zvyčajne
ppp0
. A príkaz ifconfig
nám o ňom môže poskytnúť tie
isté údaje, ako o ostatných sieťových rozhraniach:
$ ifconfig ppp0 ppp0 Link encap:Point-to-Point Protocol inet addr:213.81.130.184 P-t-P:213.81.255.185 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:163 errors:0 dropped:0 overruns:0 frame:0 TX packets:177 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:3 RX bytes:56056 (54.7 Kb) TX bytes:15344 (14.9 Kb)
Pri problémoch s pripájaním cez PPP sú hlavným zdrojom informácií logy.
Skriptové dialery často používajú program chat
, ktorý pri použití
prepínača -v
zapisuje komunikáciu s modemom do systémových logov
zvyčajne v adresári /var/log/
. Dialer prostredia KDE sa volá
kppp
a tiež umožňuje zobraziť výpis komunikácie s modemom.
Podobne PPP démon pri použití kľúčových slov debug
, a
kdebug
vo svojom konfiguračnom súbore
/etc/ppp/options
zapisuje množstvo užitočných informácií do
systémových logov. Okrem nesprávneho hesla je asi najčastejším
problémom spôsob výmeny hesla s druhou stranou - PAP (Password Authentification
Protocol)/CHAP (Crypted Handshake Authentification Protocol)/MSCHAP (Microsoft
CHAP)/... čo z toho je správne musí povedať ISP. Častým problémom je tiež nesprávne
nastavenie smerovacích tabuliek, ktoré spravidla obstaráva voľba
defaultroute
. Pri klasických modemoch býva tiež problémom chýbajúce
nastavenie modemu, aby odpovedal na AT príkazy takzvanými 'result codes' -
ATQ0
prípadne zapnuté čakanie na 'dial tones', ktoré
sa v našich krajinách nepoužívajú - ATX3. Pokiaľ máte podozrenie
na chybu v tejto oblasti, najlepším zdrojom informácií je asi príručka s AT
príkazmi pre váš modem.
Vyššie prenosové rýchlosti a komfort ponúka ISDN. Najčastejší spôsob je taký, že máte modem, ktorý sa na jednej strane pripája cez ethernet na lokálnu sieť (hoci i len s jedným počítačom), a na druhej strane cez PPP po ISDN linke. Funguje teda ako jenoúčelový počítač. Nastavenia PPP sú do značnej miery podobné. Lepšie modemy umožňujú takisto logovať informácie cez syslog do systémových logov počítača. Pri takejto konfigurácii prirodzene nie je potrebná podpora pre PPP v počítačí, pretože modem sa tvári na sieti ako samostatný počítač - spravidla vo funkcii brány (gateway).
ADSL je moderná technológia umožňujúca vysoké prenosové rýchlosti. Podobne ako pri ISDN modemoch spojenie ADSL sa spravidla spravidla uskutočňuje ADSL modemom, ktorý sám implementuje protokol PPPoE. To čo bolo povedané o typických problémochh vyššie tu platí tiež. Modemy, s ktorými som sa stretol ja, potrebovali ešte nastavenie VPI/VCI (Virtual PATH Identifier/Virtual Circuit Identifier)- ktoré opäť závisí od ISP.
Všetka komunikácia po TCP/IP sieťach, kam patrí aj prístup na web, ftp, irc, icq, telnet, mail atď atď, sa odohráva posielaním blokov dát po drôtoch (optických vláknach či rádiových vlnách). Týmto blokom dát sa hovorí pakety. Každý paket nesie v sebe informáciu o tom odkiaľ bol poslaný - zdrojová adresa - a o tom, kam bol poslaný - cieľová adresa. Tieto adresy sú v pakete napísané ako štvorice bytov.(To platí pre verziu IP protokolu IPv4. Je pravdepodoné, že sa v budúcnosti prejde na IPv6, kde sa adresa skladá zo ôsmych bytov.)
Sieťové spojenie začína na našej vlastnej sieťovej karte. Pozrieme sa na to čo nám prezrádza:
Vidíme tu vlastnú IP adresu: 192.168.2.4. Slovo UP hovorí, že rozhranie je funkčné. RX a TX hovoria o počte prijatých a poslaných paketov a v tom istom riadku sa dočítame aj o počte chýb pri prijímaní a odosielaní paketov.$ ifconfig eth0 eth0 Link encap:Ethernet HWaddr 00:61:B0:CE:FB:5E inet addr:192.168.1.102 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:354145124 errors:0 dropped:0 overruns:0 frame:0 TX packets:424743936 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:1531811786 (1460.8 Mb) TX bytes:2248271909 (2144.1 Mb) Interrupt:9 Base address:0xfcc0
Keď systém potrebuje poslať paket, musí vedieť kadiaľ. Možností je toľko, koľko
máte sieťových rozhraní. Ku sieťovým kartám treba pripočítať ešte loopback
teda virtuálne rozhranie, cez ktoré počítač posiela pakety sám sebe a tiež
modemy. Modem s rozbehaným PPP/SLIP/CSLIP protokolom sa tvári ako sieťová karta.
O tom, cez ktoré rozhranie paket pôjde, rozhoduje smerovacia tabuľka (routing
table). Je to tabuľka, ktorú si operačný systém udržuje vo svojej pamäti.
Tam sa dostane pri štarte systému. Pri UNIX-u podobných systémoch sa tam dostane
spustením programu route(8)
z bootovacích skriptov. Administrátor
systému ju môže tiež týmto programom meniť za behu. Zobraziť ju môžete
buď programom route
alebo netstat -r
Na mojom systéme vyzerá smerovacia tabuľka takto:
# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface localnet * 255.255.255.0 U 0 0 0 eth0 loopback * 255.0.0.0 U 0 0 0 lo default gw.rastos.org 0.0.0.0 UG 0 0 0 eth0
Trocha iný pohľad môžete dostať ak použijete prepínač -n
:
# route -n Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo 0.0.0.0 192.168.1.100 0.0.0.0 UG 0 0 0 eth0
Dočítame sa tam teda, že ak chceme poslať paket na adresu, ktorá začína číslami
192.168.1
, treba takýto paket poslať cez rozhranie
eth0
.
Meno sieťového rozhrania závisí od zvyklostí na danom operačnom systéme.
Na Linux-e je eth0
ethernetová karta číslo 0, lo
je
loopback. Okrem nich sa môžete stretnúť s ppp0
čo je zvyčajne
modem s rozbehnutými PPP protokolom a podobne.
V smerovacej tabuľke sa môže vyskytnúť destinácia default
, ktorá
sa použije pre pakety, ktorých cieľová adresa nevyhovuje žiadnemu inému riadku
tabuľky. V stĺpci Gateway
je potom zvyčajne IP adresa stroja,
ktorý sprostredkováva pripojenie na Internet či inú sieť. Tento stroj sa tiež
označuje ako default gateway
.
Gateway, ktorý používam má dve sieťové karty. Jedna je pripojená na vnútornú sieť, druhá je pripojená na DSL modem. DSL modem sa tvári ako samostatný počítač a vytvára vlastne minisieť s IP priestorom 10.0.0.0. Smerovacia tabuľka na tomto počítači vyzerá takto:
# netstat -rn Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 0.0.0.0 10.0.0.5 0.0.0.0 UG 0 0 0 eth0
Teda pakety pre vnútornú sieť (192.168.1.0) idú cez eth1, čokoľvek iné ide cez eth0 na adresu 10.0.0.5 - DSL modem.
Keď surfujete po internete, či používate ľubovoľnú inú aplikáciu, ktorá
komunikuje po sieti, nehovoríte jej IP adresy. Poviete www.google.com a
systém musí sám zistiť, akú adresu napísať do paketov. Na to existujú
dva spôsoby. Prvý je použitie súboru (/etc/hosts
), kde sú
povedané IP adresy a zodpovedajúce
mená. Tento spôsob je však použiteľný len pre malý počet adries, ktoré
sa často nemenia. Druhý spôsob je DNS - Domain
Name System. DNS je implementované
pomocou DNS serverov. Strojov, na ktorých beží program, ktorý vie po sieti
prijať paket s otázkou a poslať na ňu odpoveď. Vyhľadanie IP adresy na
základe mena sa v angličtine nazýva lookup
. Vyhľadanie mena podľa
IP adresy sa nazýva reverse lookup
. Niekedy sa tento proces prekladu
mena na IP adresu sa nazýva aj "rezolvovanie".
Prirodzene, keď chceme DNS serveru poslať paket s otázkou akú IP adresu
má www.google.com, musíme vedieť IP adresu DNS serveru samého.Systém môže
používať viacero DNS serverov a na UNIX-u podobných systémoch sú
ich adresy napísané v súbore /etc/resolv.conf
. Na rozhodnutie
či sa použije hosts, alebo DNS, môže mať ešte vplyv súbor
/etc/host.conf
.
Jednoduchou možnosťou, ako si overiť dostupnosť nejakého servera, je použiť programy
ping
a traceroute
. Ako sme už spomínali, programy
komunikujúce po sieti používajú rôzne protokoly. Jedným z nich je protokol ICMP
(internet control message protocol ). Program ping posiela pakety nazývané
echo
protokolom ICMP. Ak server takýto paket dostane, odpovie naň opäť
ICMP paketom; tentokrát paketom echo-reply
. Program ping tento paket
zachytí a vypíše informáciu na obrazovku. Na mojom stroji to vyzerá takto:
$ ping ras PING ras.rastos.org (192.168.1.221) 56(84) bytes of data. 64 bytes from ras.rastos.org (192.168.1.221): icmp_seq=1 ttl=64 time=0.481 ms 64 bytes from ras.rastos.org (192.168.1.221): icmp_seq=2 ttl=64 time=0.221 ms --- ras.rastos.org ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1000ms rtt min/avg/max/mdev = 0.221/0.351/0.481/0.130 ms
To bol ping na moju vlastnú sieťovú kartu. Ping idúci von trvá dlhšie:
$ ping www.google.com PING www.google.akadns.net (66.102.11.104) 56(84) bytes of data. 64 bytes from 66.102.11.104: icmp_seq=1 ttl=236 time=160 ms 64 bytes from 66.102.11.104: icmp_seq=2 ttl=236 time=160 ms 64 bytes from 66.102.11.104: icmp_seq=3 ttl=236 time=161 ms 64 bytes from 66.102.11.104: icmp_seq=4 ttl=236 time=162 ms --- www.google.akadns.net ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3025ms rtt min/avg/max/mdev = 160.739/161.535/162.632/0.862 ms
Program traceroute tiež posiela ICMP pakety. Tieto pakety majú v sebe nastavený príznak, ktorý žiada všetky stroje, cez ktoré paket prechádza, aby nám poslali odpoveď:
$ traceroute ras traceroute to ras.rastos.org (192.168.1.221), 30 hops max, 38 byte packets 1 ras.rastos.org (192.168.1.221) 0.359 ms 0.301 ms 0.177 ms
Prirodzene trocha dlhšie to je, keď treba prejsť cez viacero strojov:
$ traceroute to www.bbc.co.uk traceroute to www.bbc.net.uk (212.58.224.115), 30 hops max, 38 byte packets 1 ras.rastos.org (192.168.1.221) 0.432 ms 0.254 ms 0.247 ms 2 10.0.0.5 (10.0.0.5) 0.984 ms 0.882 ms 0.866 ms 3 ba-sthgw-3.telecom.sk (213.81.255.57) 19.496 ms 11.913 ms 13.170 ms 4 213.81.249.125 (213.81.249.125) 19.596 ms 13.557 ms 12.093 ms 5 ba-igw-1-POS-0-0-251-18.telecom.sk (213.81.251.18) 18.393 ms 13.016 ms 13.125 ms 6 if-3-1.core1.Frankfurt.teleglobe.net (80.231.64.25) 29.828 ms 30.339 ms 29.361 ms 7 if-5-0.core2.Frankfurt.teleglobe.net (80.231.64.2) 29.421 ms 30.110 ms 28.756 ms 8 rt-decix.fft.bbc.co.uk (80.81.192.59) 30.781 ms 30.370 ms 30.043 ms 9 212.58.239.66 (212.58.239.66) 46.914 ms 46.647 ms 45.789 ms 10 www15.thdo.bbc.co.uk (212.58.224.115) 46.620 ms 47.427 ms 45.870 ms
Treba mať na pamäti, že ak použijete ako argument pre ping a traceroute symbolické meno, tak tie musia najprv previesť toto meno na IP adresu a teda musia poslať paket s požiadavko na rezolvovanie DNS serveru a od neho musíme dostať paket s odpoveďou.
Ak máte problém pripojiť sa na nejaký server, overte si, že môžete vyrezolvovať jeho IP adresu. Potom skúste či je ho možné ping-núť. Ak nie skúste traceroute. Ten vám povie, ako ďaleko sa na svoje púti pakety dostali a kde treba hľadať chybu.
Pojmom proxy
sa označuje stroj, alebo aj program, ktorý zachytáva požiadavky
o URL adresy od nášho programu, sám sa pokúsi na ne získať odpovede, a potom tieto
odpovede poskytne nášmu programu. Najbežnejšie sa proxy používa pre protokoly
HTTP a FTP. Cieľom býva zvyčajne:
caching proxy.
To znamená, že ak váš program používa proxy, musí sa vedieť spojiť s proxy a proxy musí byť schopné spojiť sa so serverom špecifikovaným v URL adrese (čo napríklad tiež znamená, že musí cez DNS zistiť jeho adresu a mať správne nastavené routovanie). Posledná poznámka na tému proxy: proxy funguje pre daný protokol. Napríklad proxy pre protokol HTTP môže byť iná ako pre FTP protokol. (Použitie proxy pre HTTP a FTP je najbežnejšie.)
Ďalšou vecou, ktorá nám môže skomplikovať komunikáciu protokolom IP po sieti sú firewally. Ich primárnou úlohou je ochrana siete pred nežiadúcimi paketmi. Inteligentné firewally dokážu najrozmanitejšie veci:
Ak máte do činenia s reštriktívnym, alebo zle nakonfigurovaným firewalom, tak to čo nám povie ping alebo traceroute, nemusí byť tak pravdivé (a tým pádom užitočné), ako by sme chceli.
Ako bolo už spomínané vyššie, nad protokolom IP funguje mnoho vyšších - aplikačných protokolov: SMTP(e-mail), HTTP(web) a podobne. Ak server ako taký, je dostupný IP protokolom a napriek tomu máte problém úspešne vytvoriť sieťové spojenie, môžete skúsiť overiť iným spôsobom - špecifickým pre daný protokol:
$ telnet in.smtp.cz 25 Trying 81.95.97.116... Connected to in.smtp.cz. Escape character is '^]'. 220 in.smtp.cz ESMTP quit 221 in.smtp.cz Connection closed by foreign host.
$ telnet www.rastos.org 80 Trying 192.168.2.1... Connected to ras. Escape character is '^]'. GET / HTTP/1.1 Host: www HTTP/1.1 200 OK ...
$ telnet mail.rastos.org 110 Trying 192.168.2.3... Connected to mail.rastos.org. Escape character is '^]'. +OK quit +OK Connection closed by foreign host.
Informáciu o tom, či vôbec došlo k prenosu nejakých paketov medzi klientom a
serverom môže tiež poskytnúť program tcpdump
. Toto zaznamená pri
jednej požiadavke na DNS server.
22:00:23.688554 IP localhost.32771 > localhost.domain: 38117+ A? sirius.rastos.org. (32) 22:00:23.693054 IP localhost.domain > localhost.32771: 38117* 1/0/0 A sirius.rastos.org (48)
Vidno tu že stroj localhost, dostal požiadavku na sirius.rastos.org v jednom pakete a poslal odpoveď v druhom. Takže komunikácia prebieha v oboch smeroch a všetko je v poriadku. Prajem vám aby to podobne klapalo aj na vašom systéme.