UNIX 13. Síťová komunikace © Milan Keršlágerhttp:// Obsah: ● TCP/IP, RFC, BSD socket API ● síťové rozhraní, směrovací tabulka ● DNS, resolver ● diagnostika sítě ● superserver xinetd ● firewall
Historie počítačových sítí ● první pokusy dálkového spojení již 1940 ● ovládání kalkulátoru dálnopisem v USA (Stibitz) ● 60. léta → různé pokusy ● systémy podporující multitasking – 1964 time-sharing systémy ● USA: Dartmouth – pro 300 studentů, Berkeley (Thompson) – 1967 IBM: OS/360 s MFT ● řízení telefonní ústředny počítačem ● 1969 ARPANET – 50kbps – 1975 – počátek vývoje TCP/IP – 1983: ARPANET adoptoval TCP/IP (IPv4)
TCP/IP ● celá rodina protokolů ● základem je IPv4, dnes nástup IPv6 – přenos pomocí datagramů („salámová metoda“) – používání IP adres (např ) ● systém vrstev – vrstvy nezávislé, zaměnitelné, snadnější implementace – definována vzájemná komunikace vrstev (API) ● za přenos neodpovídá síť, ale koncové počítače – zjednodušení propojovacích prvků sítě – využívá se přepojování (přeposílání) datagramů
RFC ● Request Foc Comments ● neformální standardy pro Internet – též žertovná aprílová vydání ● vydává je RFC editor podle pokynů IAB – označována vzestupnou řadou čísel (první 1969) ● již vydané se neruší, jen nahradí novějším RFC ● dostupné na ● nejprve je vydán draft (návrh) – formulují experti na daný problém – osvědčí-li se, dostane přiděleno číslo a je vydáno
Implementace ● 1983: BSD socket API ● de fakto standard pro síťovou komunikaci – socket() → vytvoření socketu – bind() → připojení na lokální port (server) – listen() → zahájení naslouchání (server) – connect() → vytvoření nového spojení (klient) – accept() → přijmutí příchozího spojení (server) – send(), recv(), write(), read(), recvfrom(), sendto() – close() → uzavření spojení – gethostbyname(), gethostbyaddr() → převod IP – DNS – pool() → kontrola stavu socketu – select() → zjištění stavu více socketů (deskriptorů)
TCP/IP stack ● implementace umístěna v jádře OS ● společný kód pro všechny aplikace – snadněji se odstraňují chyby – je možné centrálně opravit chybu, doplnit novou vlastnost – např. DOS neměl, takže každá aplikace vlastní implem. ● velký rozsah řešených situací – ne všechny stavy definovány (pomocí RFC) – odchylky chování na nezvyklé situace → rozpoznání OS ● nástroj nmap ● umí odesílat a přijímat IP datagramy – též zajišťuje vyšší vrstvy pro ICMP, UDP, TCP
Součásti TCP/IP ● ICMP ● signalizace a řízení sítě – povinná součást implementace TCP/IP ● UDP ● systém „otázka → odpověď“, bez záruk ● např. DNS, ale i VoIP (Skype & spol.) ● TCP ● zajišťuje nad „nespolehlivou“ sítí zaručený přenos – tj. zachování pořadí, vyřešení ztrát a duplicit ● přenos ů, WWW,...
Síťové rozhraní ● slouží k realizaci komunikačního rozhraní ● určena IP adresa, maska sítě, MTU ● může být fyzické (síťová karta) nebo virtuální – označeno názvem (eth0, eth1, wlan0,...) – obsluhováno jádrem (resp. TCP/IP stackem) ● konfigurace příkazem ifconfig ifconfig – výpis všech aktivovaných rozhraní ifconfig eth0 up (nebo down ) ifconfig eth netmask
Příklad výpisu ~]$ LANG=C ifconfig lo Link encap:Local Loopback inet addr: Mask: UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets: errors:0 dropped:0 overruns:0 frame:0 TX packets: errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes: (13.1 MiB) TX bytes: (13.1 MiB) wlan0 Link encap:Ethernet HWaddr 00:1F:3B:58:43:EF inet addr: Bcast: Mask: UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets: errors:0 dropped:0 overruns:0 frame:0 TX packets: errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes: (24.8 MiB) TX bytes: (3.3 MiB)
Směrovací tabulka ● routing table ● definuje způsob odeslání IP datagramů – význam zejména u routerů (směrovačů) – koncová stanice jen k rozlišení ● přímý soused (ve stejné podsíti) ● odeslání přes bránu, resp. router („do Internetu“) ● součást TCP/IP stacku route -n route add č.sítě netmask maska gw IPbrány route add default gw Ipbrány route del č.sítě netmask maska
Příklad výpisu ~]$ LANG=C route -n Kernel IP routing table Destination Gateway Genmask Flag Metr Ref Use Iface U wlan UG wlan0
DNS ● Domain Name System ● hierarchický systém doménových jmen ● převod doménové jméno → IP adresa (a zpět) ● na počítači knihovna → resolver – viz dříve zméněné BSD socket API ● realizace DNS servery – pro dotaz používáme co nejbližší → nižší latence – využívá se cachování dotazů ● stanice musí znát IP adresu DNS serveru – typicky 2 různé (jako záložní)
Resolver ● knihovna pro podporu DNS ● převod doménové jméno → IP adresa (a zpět) – tj. odeslání a příjem patřičného UDP datagramu – viz zmíněné funkce gethostbyname()... ● nastavení uloženo v souboru /etc/resolv.conf ● nameserver ● nameserver ● domain mojedomena.cz ● search mojedomena.cz
Nastavení v počítači 1) manuální ● všechny údaje do konfiguračních souborů ● nastavení aktivováno při startu (skriptem) ● používá se typicky na serverech 2) automatické ● rozhraní obsluhuje DHCP klient – získá konfigurační informace z DHCP serveru – typicky pro uživatelské stanice – výhoda: nemusí se nikam nic zapisovat
Postup testování sítě 1) lokální IP adresa (v rámci svého počítače) – test loopbacku ( ping –n ) – test vlastních aktivních síťových rozhraní 2) ve stejné podsíti – schopnost komunikace s přímými sousedy – brána do Internetu je též ve stejné podsíti 3) mimo podsíť – kontakt s routerem a počítači za ním (Internet) – např.: ping –n ) test DNS ping seznam.cz
Příklady testů ping -n ping -n ping -n ping -n ping -n ping seznam.cz seznam.cz telnet telnet seznam.cz 80 GET / HTTP/1.0 {Enter}
Poskytování služeb ● každá služba typicky vlastního démona ● WWW → httpd ● FTP → vsftpd ● DNS → named ● DHCP → dhcpd ● Samba → smbd, nmbd ● atd. ● spouštěno pomocí skriptů ● /etc/init.d/httpd a skript chkconfig
Superserver xinetd ● nahrazuje trvale běžící síťové démony ● někdy nevýhodné mít neustále spuštěného démona – jde o úsporu systémových prostředků ● xinetd obsadí příslušný síťový TCP port ● při příchodu požadavku spustí obslužný program – musí být přizpůsoben funkci přes xinetd – po obsloužení požadavku skončí – není výhodné pro často využívané služby (WWW) ● konfigurace v adresáři /etc/xinetd.d/ chkconfig –-list atd.
Firewall ● firewall filtruje datagramy ● na vstupu, výstupu, procházející (router) – akce: přijme, odmítne, zahodí ● firewall umístěn mezi aplikací a síťovým rozhraním – v jádře (součást TCP/IP stacku) nebo formou aplikace 1) nestavový ● posuzuje jednotlivé datagramy 2) stavový ● posuzuje akci na základě předchozích – součást TCP spojení, limit za jednotku času atd.
Firewall v Linuxu ● iptables ● implementováno jako součást TCP/IP stacku – dostatečně kvalitní, rozšiřitelný ● nastavování stejnojmenným příkazem – nastavení z příkazového řádku – též nastavování přes GUI rozhraní ● je to nestavový i stavový firewall – je možno zapojit i externí aplikaci ● připravuje se náhrada – sjednocení podpory IPv4, IPv6, bridge