Unix a Internet 2. Úvod do TCP/IP Obsah: Internet, TCP/IP stack linková a síťová vrstva IP, maska, broadcast ICMP, UDP, TCP, porty © Milan Keršláger http://www.pslib.cz/ke/slajdy 7. 10. 2014 http://creativecommons.org/licenses/by-nc-nd/3.0/
Vznik Internetu původně idea decentralizované sítě vývoj sponzorován agenturou DARPA Agentura pro výzkum pokročilých obranných projektů spadá pod Ministerstvo obrany USA 1969 – zprovozněna síť se 4 uzly → ARPANET 1973 – idea TCP/IP připojena Havaj, Norsko, Londýn 1980 – experimentální provoz TCP/IP IPv4 popisuje RFC 760 1983 – oddělen MILNET, vyvinuto DNS
Co je Internet mnoho samostatných počítačových sítí všechny navzájem propojeny propojena jsou síťová rozhraní typicky síťové karty (též WiFi, sériové porty apod.) existence redundantních spojů zvyšuje robustnost sítě, odolnost vůči výpadkům používá se rodina protokolů TCP/IP umožňuje vzájemnou komunikaci prvků v síti typicky počítače (resp. jejich síťová rozhraní) ale i služební prvky sítě (router, switch), webkamery, ...
TCP/IP a OS 1983 – 4.2BSD unixový systém z univerzitního prostředí snaha o připojení k Internetu komerční unixové systémy následují implementace v operačním systému uvnitř jádra, tzv. TCP/IP stack skrze knihovny poskytuje API, tzv. Internet socket datagram socket stream sockets raw sockets
Systém vrstev rozložení řešení síťové problematiky vznikne několik vrstev každá vrstva řeší dílčí problém síťové komunikace vrstvy lze snadno nahradit (zaměnit) např. vyměnit síťovku, ovladač a vše ostatní může zůstat (tj. knihovní funkce pro TCCP/IP i aplikace) SSL je jen další vsunutá mezivrstva bez vlivu na TCP i aplikaci vrstvy podle ISO/OSI „úřední“ nařízení, složité, neujalo se vrstvy podle TCP/IP jednodušší, existuje funkční implementace
Vrstvy v ISO/OSI a v TCP/IP Aplikační Prezentační Relační Transportní Síťová Linková (spojová) Fyzická Vrstva přístupu k síti OSI TCP/IP Orientováno na přepravu (hardware) orientované (software) Aplikačně
Linková vrstva nejčastěji Ethernet ethernetový rámec (rozumí mu síťová karta) hlavička + data (délka 64 až 1518 oktetů) P DST SRC FT data CRC P Preamble (101010....1011) 8 oktetů DST Destination Address 6 oktetů SRC Source Address 6 oktetů FT Frame Type* 2 oktety data Frame Data 46 - 1500 oktetů CRC Cyclic Redundancy Check 4 oktety
Ethernetový rámec jediné, čemu rozumí ethernetová karta linková vrstva modelu ISO/OSI, formát podle: IEEE 802.2, IEEE 802.3, Ethernet SNAP Ethernet II – průmyslový standard, běžně používán hlavička + přepravovaná data 14 + (48 až 1500) + 4 oktety protokoly vyšších vrstev v datové části síťová karta zachytává vše pokud je určeno pro ni, vyvolá přerušení → ovladač pozná se podle cílové MAC adresy, případně linkový broadcast jinak ignoruje (výjimkou je promiskuitní režim)
Internet Protokol – IP základ rodiny TCP/IP, základem IP adresa datagramová služba, doručení bez záruk hlavička + data (min. délka 60 oktetů) dnes IPv4 jedinečná adresa 32 bitů (4 oktety) zápis desítkově po oktetech, odděleno tečkou 147.230.16.1 nastupuje IPv6 adresa 128 bitů (16 oktetů) → každý atom ve vesmíru zápis hexadecimálně, oddělení dvojtečkami 2001:718:1c01:16::aa
IPv4 adresa 4 oktety, tj. 32 bitů oktety proto, že je vyjádřen přesně počet bitů zápis je dekadicky po oktetech, odděleno tečkami např.: 147.230.16.1 celosvětově přiděluje IANA, vyčerpáno 2011 lokálně vyčerpáno APNIC (2011) RIPE (2012), LACNIC (2014), ARIN (2014), AFRINIC kvůli snadnějšímu zapamatování DNS (1983) oddělovačem je tečka (www.seznam.cz) doménová jména, stromová struktura, jeden kořen
Světové RIR (zdroj: wikipedia.org)
Rezervované IP adresy určeno pro speciální účely (IANA: RFC 3330) typicky filtrováno na firewallu („martian packet“) neví se, kam je doručit (nebo kam odeslat odpověď) privátní sítě: 0.0.0.0/8, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 další použití 127.0.0.0/8 (loopback), 255.255.255.255/32 (broadcast) 5.0.0.0/8 (rezervováno), 240.0.0.0/4 (rezervováno) 169.254.0.0/16 (autokonfigurace), 224.0.0.0/4 (multicast)
IP datagram
Hlavička IP datagramu (1) version verze protokolu → zde je to verze 4 tos Type Of Service total length celková délka flags příznaky
Hlavička IP datagramu (2) fragmentation offset začáteční adresa fragmentu (v původních datech) TTL Time To Live → router snižuje o 1, pak zahození počáteční hodnota je doporučena 64 protocol typ přenášených dat v datové části (číslo protokolu) header checksum kontrolní součet hlavičky
Přeprava IP datagramu datagram cestuje po síti samostatně → datagramová služba předávají si ho routery (směrovače) na routeru je sníženo TTL v hlavičce nese pouze IP adresu odesílatele a cíle když dorazí do cíle, víme kam odpovědět na úrovni IP se neřeší záruka (že dojde k cíli) v některých případech se posílá chybová ICMP zpráva, např. TTL exceeded (čas života datagramu vypršel)
Fragmentace IP datagramu k fragmentaci dojde při překročení MTU přijatý datagram je větší, než je možné odeslat typická velikost MTU je 1500 bajtů (Ethernet) k fragmentaci dochází při tunelování IP datagramů dovnitř IP datagramu vložíme původní IP datagram datagram je rozdělen na menší části hlavička se replikuje → přenosu fragmentů → vyšší režie první a další fragmenty → příznak „more fragments“ k tomu informace o offsetu (vzdálenost od počátku) fragmenty skládá až cílový počítač protože jednotlivé fragmenty mohou jít různými cestami úspěšné útoky na chybnou defragmentaci (MS Windows) některé routery proto fragmenty blokují (hotmail.com)
Manipulace s TCPMSS cílem je vyhnutí se fragmentaci typicky před vstupem datagramů do tunelu o tunelu nemusí mít odesílatel potuchy přinutíme odesílatele, aby použil menší datagramy tzv. MSS Clamping (pro ADSL, PPPoE, PptP, cable) funkční, ale riziko potíží (datagram modifikován cestou) Automatické nastavení menších datagramů: $ iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu Ruční nastavení menších datagramů (zde 1234 bajtů): $ iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1234
Maska sítě bitové vyjádření IP podsítě podsíťě jsou navzájem odděleny routery jedničky označují část IP adresy s číslem sítě nuly vyjadřují část IP adresy s číslem počítače zápis jako IP adresa nebo počet jedniček zleva např: 255.255.255.0 nebo též zápis IP.IP.IP.IP/24 číslo sítě = IP adresa AND maska sítě přidává se jako vlastnost: síťového rozhraní záznamu ve směrovací tabulce například: IP 192.168.1.0, maska 255.255.255.0
Číslo sítě a počítače v IP adrese 147.230.16.1/255.255.255.0 maska je chápána jako binární zápis číslo sítě je tam, kde jsou v masce zleva samé 1 v masce na místě nul je číslo počítače zde tedy je v adrese 147.230.16.1: 147.230.16 je číslo sítě v podsíti (odděluje je router) musí být číslo sítě stejné .1 je číslo počítače správce rozliší počítače (od .1 do .254) 147.230.16.0 → číslo sítě 147.230.16.255 → síťový broadcast
IP broadcast 255.255.255.255 lokální broadcast (pro danou podsíť) odesláno na MAC adresu FF:FF:FF:FF:FF:FF nepřekročí hranici podsítě, tj. neprojde routerem IP adresa se samými 1 na místě čísla počítače síťový broadcast (pro danou podsíť) může cestovat na velkou vzdálenost odesílatel typicky netuší, jaká je maska v cíli ale může to vyzkoušet → broadcast storm typicky filtrováno na routerech (s firewallem)
Dělení na podsítě podsíť → část IP sítě celá podsíť používá stejnou masku všechny IP adresy v podsíti patří do stejné podsítě tj. IP AND maska je pro všechny IP v podsíti stejné pro podsíť stačí ve směrovací tabulce 1 záznam → zjednodušení směrovacích tabulek
CIDR Classless Inter-Domain Routing (1993) variabilní délka masky k IP adrese musí být uvedena vždy MASKA CIDR umožňuje libovolnou masku dříve maska vyplývala z třídy IP adres CIDR umožňuje jemnější dělení sítě
ICMP Internet Control Message Protocol povinná součást implementace TCP/IP služební protokol zapouzdřeno v IP datagramu oznamuje stavy sítě, chyby, k testování, ... nese v sobě typ a kód (dvě čísla) ping: výzva 8,0 a odpověď 0,0 ICMPv4 a ICMPv6
ping ověřování spojení mezi uzly v síti výzva: Žiješ? odpověď: ANO! měří se latence (zpoždění) příchodu odezvy záleží též na délce datagramu (prakticky max 1500 B) $ ping seznam.cz PING seznam.cz (77.75.76.3) 56(84) bytes of data. 64 bytes from www.seznam.cz (77.75.76.3): icmp_req=1 ttl=251 time=8.38 ms 64 bytes from www.seznam.cz (77.75.76.3): icmp_req=2 ttl=251 time=24.9 ms 64 bytes from www.seznam.cz (77.75.76.3): icmp_req=3 ttl=251 time=5.12 ms 64 bytes from www.seznam.cz (77.75.76.3): icmp_req=4 ttl=251 time=81.3 ms 64 bytes from www.seznam.cz (77.75.76.3): icmp_req=5 ttl=251 time=10.5 ms ^C --- seznam.cz ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4006ms rtt min/avg/max/mdev = 5.126/26.065/81.324/28.452 ms
traceroute zobrazení cesty v síti využívá položky TTL v hlavičce IP datagramu každý router snižuje TTL o 1 program vyšle datagram s TTL=1 první router sníží na nulu a pošle zpět ICMP zprávu program vypíše IP adresu prvního routeru program vyšle datagram s TTL=2 ...celý cyklus se opakuje, dokud není dosaženo cíle
UDP User Datagram Protocol datagramová služba systém otázka-odpověď (malá režie) zapouzdřeno v IP datagramu bez záruky (neřeší ztrátu apod.) musí si ohlídat sama aplikace (typicky časovačem) nedojde-li odpověď do limitu, zeptám se znovu nedojde-li víckrát, ohlásím chybu použito pro DNS, VoIP, NFS v LAN atp. ve VoIP znamená ztráta datagramu díky rozložení informace do více datagramů snížení kvality, při větších ztrátách pak výpadek
Síťový port jednoznačná identifikace aplikace v počítači IP adresa rozlišuje jen počítač (síťové rozhraní) používá se pro UDP i pro TCP port je číslo z rozsahu 1 – 65535 (2 bajty) nula se nepoužívá každá komunikace má odlišnou čtveřici hodnot zdrojová IP + zdrojový port, cílová IP + cílový port alespoň 1 hodnota se v různých komunikacích liší nedojde tím k promíchání dat
Well known ports dobře známé porty definuje IANA stačí vědět, jakou službu chceme (cílový port) služby mají přiřazen „standardní port“, kde naslouchají tj. není nutné si pamatovat číslo portu, uvést port na cílovém počítači je nutné jen když je služba správcem umístěna na nestandardním portu, např: http://pluto.pslib.cz:8080 příklady standardních portů: HTTP: 80, HTTPS: 443 SSH: 22, telnet: 23, DNS: 53, SMTP: 25 POP3: 110, POP3S: 995, IMAP: 143, IMAPS: 993 FTP: 21 (řídící spojení), 20 (data), ...
Práce s porty aplikace (resp. proces) chce komunikovat aplikace se připojí na port (otevře si port) port přiděluje jádro OS (TCP/IP stack) → bind() je to výhradní operace → jiný program ho již nezíská aplikace zahájí komunikaci (max. jednu) v hlavičce UDP (TCP) datagramu je uvedeno: zdrojová IP, zdrojový port, cílová IP, cílový port čtveřice jednoznačně identifikuje spojení chce-li další komunikaci, otevře si další (volný) port ve čtveřici se změní alespoň zdrojový port, zbytek může stejný odpověď prohodí zdrojovou a cílovou dvojici nedojde k promíchání dat ani odpovědi z různých spojení cílem je určitý proces a jeho spojení na základě zmíněné čtveřice
TCP Transmition Control Protocol přenos dat „se zárukou“ TCP řeší ztrátu, duplicitu a zachování pořadí zmíněné záruky vyžadují extra režii v datové komunikaci proud bitů bez struktury duplexní spojení data lze přenášet zároveň oběma směry stavový protokol obě strany si pamatují stav, v jakém se nacházejí vhodný pro přenos dat (obrázky, dokumenty) protokoly FTP, SMTP, HTTP, ...
Příznaky v TCP segmentu několik bitů v hlavičce s různým významem: SYN žádost o otevření spojení ACK potvrzení (příjmu) FIN žádost o ukončení (half-close) RST okamžité zrušení spojení ...
Navázání TCP spojení trojcestný handashake A iniciuje spojení zasláním datagramu B se SYN B odpoví ACK + SYN, pak již jen ACK typický útok: SYN flood (zahlcení SYN datagramy) A B SYN seg=x SYN seg=y ACK=x+1 ACK=y+1
Ukončení TCP spojení poloviční uzavření (half-close) jedna strana dá najevo, že si přeje ukončit spojení (FIN), ale dále přijímá protějšek dokončí přenos a pak také pošle FIN například webový klient požádá o data a pošle FIN webový server odešle požadovaná data a pak také FIN okamžité ukončení jedna strana pošle RST obě strany okamžitě skončí možnost útoku na TCP RST (viz dále)
Stavy TCP protokolu
IPv6 Internet Protocol version 6 1992 IETF IPng (RFC 1550) 1998 IPv6 (RFC 2460) hlavně zvětšení adresního prostoru IPv4 adresa má 32 bitů (232= 4 miliardy) IANA nemá od 3.2.2011 regionální správci (RIPE, ARIN, …) a provideři zatím IPv4 mají IPv6 adresa má 128 bitů (2128 = 3,4×1038) počet atomů ve známém vesmíru je 1078 až 10100 počet stavů paměti s 1 GiB RAM je 21GB=21073741824×8=268719476736 zavedení dalších pokročilých vlastností
IPv4 a IPv6 naprosto odlišné protokoly nejsou vzájemně kompatibilní mohou ale koexistovat předpokládá se dlouhodobá koexistence jde o nahrazení síťové vrstvy nemá vliv na vyšší (aplikační) vrstvy HTTP, FTP, SMTP, POP3, IMAP zůstává je však potřeba upravit (rozšířit) aplikace není to tak jednoduché může se projevit mnoho chyb v implementaci hlavní (opensource) aplikace již přizpůsobeny též chyby v nastavení počítačů nebo záznamů v DNS
IPv6 adresa 128bitová délka 64bitový síťový prefix 64bitová část pro adresu počítače může být odvozena od MAC adresy zápis jako 8 skupin 4 hexadecimálních čísel oddělovačem je dvojtečka nuly vynechány zápisem dvou dvojteček (::) slouží pro zkracování zápisu IPv6 adresy maximálně 1× v adrese (kvůli jednoznačnosti)
Zkracování IPv6 adresy níže zapsány stejné IPv6 adresy 2001:0db8:0000:0000:0000:0000:1428:57ab 2001:0db8:0000:0000:0000::1428:57ab 2001:0db8:0:0:0:0:1428:57ab 2001:0db8:0:0::1428:57ab 2001:0db8::1428:57ab 2001:db8::1428:57ab
Speciální adresy ::1/128 localhost (v IPv4 je to 127.0.0.1) adresa interního rozhraní fe80::/10 místní linka (v IPv4 je to 169.254.0.0/16) dosah jen na připojené podsíti ff00::/8 multicast adresy 2001:db8::/32 prefix používaný v příkladech
Použití IPv6 adres v URL zápis IPv6 v hranatých závorkách http://[2001:0db8::0370:7344]/ v URL číslo portu až za závorkou http://[2001:0db8::0370:7344]:443/
IPv6 datagram hlavička (40 oktetů, tj. 320 bitů) tělo (zbytek) verze (4 bity) – tj. verze 6 dopravní třída (8 bitů) pojmenování toku (20 bitů) pro správu QoS délka těla (16 bitů) tj. max. 64 KiB, jumbogramy zde mají nulu následující hlavička (8 bitů) zdrojová a cílová adresa (každá 128 bitů) tělo (zbytek)
Autokonfigurace automatické přidělení IPv6 adresy použití ICMPv6 když není v síti nakonfigurováno DHCPv6 reaguje router, stanice se s ním dohodne cílem je přidělení funkční IPv6 adresy DHCPv6 obdobně jako pro IPv4 default gw → v RFC od 2014
Bezpečnost IPsec používá se pro VPN Virtual Private Network (virtuální privátní sítě) řeší šifrování a autentizaci využívá asymetrickou kryptografii (s veřejným klíčem) povinná součást IPv6 na síťové vrstvě (šifrují se jednotlivé IP datagramy) v IPv4 jako volitelná součást IPsec byl do IPv4 zpětně implementován (backport)
Fragmentace není dovolena na cestě nelze datagram fragmentovat obě strany si zjistí maximální velikost datagramu omezení může být někde na cestě povinnou součástí IPv6 je MTU discovery na začátku spojení zjistíme, jaká je maximální velikost datagramu obě strany nepošlou větší datagram, než je na kompletní cestě datagramu možné fragmentovat tedy může jen odesílatel → tj. přesněji odesílatel rovnou data naseká na příslušně malé fragmenty (dílky, resp. datagramy)
Jumbogramy datagramy až 4 GiB snaha o snížení režie a latence latence je prodleva režie jsou hlavičky + čas na jejich zpracování standardní datagramy 64 KiB přesně 65535 + 40 na hlavičku pokud cesta dovoluje, lze použít jumbogram na cestě nelze datagram fragmentovat fragmentace je dovolena jen u vysílajícího
Kontrolní součet odstraněn kontrolní součet hlavičky průchod přes router snižuje TTL Time To Live router musí v IPv4 přepočítat kontrolní součet v IPv6 není MTU součástí kontrolního součtu chyba bude odhalena na linkové vrstvě např. Ethernetový rámec má CRC na datovou část zvýší se tím průchodnost routerů snížením nároků na CPU routeru
Mobilita mobilní IPv6 (MIPv6) zařízení si zachová svoji „domácí“ IPv6 adresu aktivní prvky dohodnou směrování odstraňuje tak potřebu vytvoření tunelu zachová se tím výkon jako běžné IPv6 tj. není nutné datagram dopravit nejprve do domácí sítě a odtud pak teprve do cíle zatím není implementováno komplikace s bezpečností, výjimky ze směrování
DNS pro IPv6 AAAA záznamy rozšíření současného DNS paralelně k A záznamům (pro IPv4) $ dig seznam.cz ns ;; ANSWER SECTION: ns.seznam.cz. 38208 IN A 77.75.73.77 ns.seznam.cz. 14571 IN AAAA 2a02:598:1::1077 ms.seznam.cz. 38208 IN A 77.75.77.77 ms.seznam.cz. 14571 IN AAAA 2a02:598:2::1077