UNIX 13. Síťová komunikace © Milan Keršláger 2018/7/5 http://www.pslib.cz/ke/slajdy http://creativecommons.org/licenses/by-nc-nd/3.0/
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ř. 147.230.16.1) 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 http://www.ietf.org/rfc.html 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 stalo se de fakto standardem pro síťové sokety 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 e-mailů, 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 eth0 10.0.0.5 netmask 255.255.255.0
Příklad výpisu [rene@pitoma ~]$ LANG=C ifconfig lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:231736 errors:0 dropped:0 overruns:0 frame:0 TX packets:231736 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:13748872 (13.1 MiB) TX bytes:13748872 (13.1 MiB) wlan0 Link encap:Ethernet HWaddr 00:1F:3B:58:43:EF inet addr:10.1.0.131 Bcast:10.1.0.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:245440 errors:0 dropped:0 overruns:0 frame:0 TX packets:195654 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:26096332 (24.8 MiB) TX bytes:3478368 (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 [rene@pitoma ~]$ LANG=C route -n Kernel IP routing table Destination Gateway Genmask Flag Metr Ref Use Iface 10.1.0.0 0.0.0.0 255.255.255.0 U 2 0 0 wlan0 0.0.0.0 10.1.0.1 0.0.0.0 UG 0 0 0 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 10.0.0.1 nameserver 10.1.0.1 domain mojedomena.cz search jinadomena.cz
Nastavení v počítači manuální všechny údaje do konfiguračních souborů nastavení aktivováno při startu (skriptem) používá se typicky na serverech 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
Testování lokálně jen v rámci samotného počítače test loopbacku a síťových rozhraní ve stejné podsíti schopnost komunikace s přímými sousedy bez zapojení routeru mimo podsíť kontakt s routerem a počítači za ním (Internet) test DNS
Příklady testů ping -n 127.0.0.1 ping -n 10.1.0.131 ping -n 10.1.0.130 ping seznam.cz dig @10.1.0.1 seznam.cz telnet 127.0.0.1 25 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 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 nestavový posuzuje jednotlivé datagramy 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