Portál AbcLinuxu, 4. června 2024 21:21

Čo keď nechodí sieť?

23. 9. 2004 | Rastislav Stanik
Články - Čo keď nechodí sieť?  

Vysvětlení základních pojmů týkajících se síťové komunikace. Pakety a IP adresy, směrování (routování), DNS, ping a traceroute, proxy, firewall.


Pakety a IP adresy

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.)

Smerovanie (Routovanie)

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 UNIXu 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 Linuxe 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.

DNS

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. Tento proces prekladu mena na IP adresu sa volá 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émcho 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.

Ping a traceroute

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 vyzera 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

Program traceroute tiež posiela ICMP pakety. Tieto pakety majú v sebe nastavený indikátor, ktorý žiada všetky stroje, cez ktoré paket prechádza, aby nám poslali odpoveď:

traceroute tos
traceroute to tos.rastos.org (192.168.1.200), 30 hops max, 38 byte packets
 1  ras.rastos.org (192.168.1.221)  0.517 ms  0.329 ms  0.231 ms
 2  tos.rastos.org (192.168.1.200)  0.518 ms  0.346 ms  0.277 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 DNS serveru.

Ak máte problém pripojiť sa na nejaký server, overte si, že môžete vyrezolvovať jeho IP adresu. Potom skústem, či je ho možné pingnúť. Ak nie, skúste traceroute. Ten vám povie, ako ďaleko sa na svoje púti pakety dostali a kde treba hľadať chybu.

Proxy

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. Cieľom býva zvyčajne:

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. 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.)

Firewall

Poslednou vecou, ktorá nám môže skomplikovať komunikáciu 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.

Související články

Linuxové DMZ
Domácí síť
Soukromá síť
Nastavení DNS

Další články z této rubriky

PowerDNS – přívětivý a jednoduchý DNS server
Bootování ze sítě: pxelinux a kořenový adresář na NFS
Těžký život Do Not Track
OpenAFS – servery
Architektura IPv6 – konfigurace adres a objevování sousedů (2)

Diskuse k tomuto článku

Vašek Lorenc avatar 23.9.2004 09:52 Vašek Lorenc | skóre: 27
Rozbalit Rozbalit vše traceroute
Odpovědět | Sbalit | Link | Blokovat | Admin
Myslím, že pročtení si manuálové stránky k traceroute by neškodilo. Ne že by ICMP pakety posílat neuměl, to on umí (traceroute -I), ale třeba verze u mě na systému posílá UDP datagramy. Také postupně zvyšuje TTL flag, aby při putování datagramu sítí dostal ICMP odpověď "Time to live exceeded" (TIME_EXCEEDED), často od dalšího stroje po cestě v síti. Pozor, jsou ale i takové stroje, které TTL nemění a ve výpisu traceroute se tedy neobjeví.

A to, že to posílá defaultně UDP datagramy je také důvodem, proč to zvnitřku různě zafirewallovaných sítí často nefunguje..

To jen pro upřesnění..
...včetně majestátného loosa
24.9.2004 22:59 Michal Kubeček
Rozbalit Rozbalit vše Re: traceroute
Chybějící stroje ve výpisu traceroute jsou způsobeny spíš neposíláním TTL exceeded nebo filtrem, který ty message (nebou už pakety, které je mají vyvolat) zahazuje. Odeslat paket s hodnotou TTL větší nebo rovnou té, se kterou přišel, je přeci jen už hodně silná káva a udělat něco takového (ano, vím, že takové stroje existují, vím jak to zařídit a vím, jaké k tomu mohou být důvody), aniž bych měl absolutní jistotu, že ten paket někdy uvidím znovu, by zasluhovalo exemplární trest.
23.9.2004 14:00 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Zkušenost
Odpovědět | Sbalit | Link | Blokovat | Admin
Po nedávné zkušenosti s nefungující sítí musím říci, že nejlepší začít pořádným zastrčením síťovky do slotu ;-)
23.9.2004 15:52 jm
Rozbalit Rozbalit vše Re: Zkušenost
Pripadne vymenou kabelu. :-D
23.9.2004 14:45 eagle
Rozbalit Rozbalit vše no...
Odpovědět | Sbalit | Link | Blokovat | Admin
čekal bych, že v odstavci věnovanému směrování a route bude uvedeno, co se stane, když jsou v routovací tabulce uvedeny záznamy se stejnou cílovou adresou.

dál jsem to ani nečetl, zklamání :-/

nejvíc práce dá vždycky zjistit, proč to najednou přestalo chodit. a v tom případě je na vině buď HW, nebo kolega, který něco změnil a ostatním to neřekl (např. ip adresu proxy, dns, ...).
23.9.2004 23:54 Fena
Rozbalit Rozbalit vše Re: no...
no.. ono ukazovat routovaci tabulku kde GW je 0.0.0.0 take neni to prave "sitove" ze...
Jiří Svoboda avatar 24.9.2004 19:52 Jiří Svoboda | skóre: 37 | blog: cat /dev/mind | Prostějov
Rozbalit Rozbalit vše Re: no...
Nechapu. Ty routovaci tabulky jsou prece v naprostem poradku.
23.9.2004 23:10 Spock
Rozbalit Rozbalit vše 8 vs. 16 bytů
Odpovědět | Sbalit | Link | Blokovat | Admin
Já měl dojem, že adresa IPv6 by se měla skládat ze 16 bytů, neboť je 128 bitová, opravte mě jestli se pletu.
24.9.2004 23:01 Michal Kubeček
Rozbalit Rozbalit vše Re: 8 vs. 16 bytů
Ne, nepletete.
28.10.2005 01:39 meleanor
Rozbalit Rozbalit vše Re: Čo keď nechodí sieť?
Odpovědět | Sbalit | Link | Blokovat | Admin
Sqely clanek... presne neco takoveho mi chybelo... zaklad.

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.