Internet & Sítě (1. přednáška)
Trocha historie 1877 Tivadar Puskás vyrobil první telefonní ústřednu (při práci pro Edisona) 1918 Průměrná doba, než byl spojen dálkový hovor: 15 minut 1940 George Stibitz: vzdálená “kalkulačka”: New York — Dartmouth College 1957 ARPA (později DARPA, pak ARPA a nyní zase DARPA) založena jako reakce na Sputnik 1961 L. Kleinrock (MIT), první článek o teorii packet switching 1962 Licklider (MIT, později ředitel DARPA): článek “Galactic Network” o sociálních důsledcích sítí
Trocha historie 1965 T. Merill, L. Roberts: Massachusetts — Kalifornie, první dialup spojení 1969 spuštění ARPANETu (předchůdce Internetu), spojeny 4 univerzity na západě spojených států (UCLA, Stanford Research Institute, UCSB, University of Utah) dodavatelem byla firma Bolt Beranek & Newman z Massachusetts Ted Kennedy (zástupce Massachusetts v Kongresu), firmě, vyrábějící Interface Message Processory pogratuloval: “for their ecumenical spirit in winning the ’interfaith message processor’ contract” :-) 1970 Do ARPANETu se připojily MIT, Harvard, firma BBN a SDC 1971 Připojují se Stanford, MIT’s Lincoln Labs, Carnegie-Mellon, Case-Western Reserve University, NASA, Mitre, Univ. of Illinois a další
Trocha historie 71 e-mail, RFC (tzv. Request for Comment, standardizační dokumenty, http://www.faqs.org/rfcs/) spuštěn projekt Gutenberg (gutenberg.org) 15 sítí, 23 počítačů 72 objevuje se znak ’@’ v e-mailových adresách, telnet, chat 73 první mezinárodní spojení s UCL v Londýně, objevuje se ethernet (Bob Metcalfe), první “voice conference” cca 2000 uživatelů, 75% provozu je e-mail o vánocích “spadl internet” kvůli chybné konfiguraci na Harvardu 73 pod vedením B. Kahna a V. Cerfa vzniká TCP 76 Alžběta II, britská královna, posílá svůj první e-mail 78 Protokol TCP se dělí na TCP/IP, první spam 82 Začínají se používat emotikony (:-) ) 84 k internetu je připojeno přes 1000 počítačů, vzniká DNS 85 symbolics.com je první registrovanou doménou
Trocha historie
87 první e-mail mezi Německem a čínou, 10 000 počítačů 88 první vir šířící se internetem, 60 tis. počítačů, z toho 6 tis. infikováno 90 Československo se připojuje k internetu s doménou .cs 91 Tim Berners-Lee z CERNu vypouští WWW 93 první webový prohlížeč Mosaic (NSCA — National Center for Supercomputing Applications) 94 provoz www poprvé překonává telnet 95 provoz www poprvé překonává ftp a dostává se na první místo, vznik jazyka Java
Trocha historie
Zdroje www.internetsociety.org/internet/internet-51/ history-internet/brief-history-internet www.zakon.org/robert/internet/timeline/ walthowe.com/navnet/history.html Wikipedie
Spojení: Spínání okruhů (Circuit switching) motivováno telefonním systémem když spolu dva počítače komunikují, je pro ně vytvořen jeden komunikační kanál není nutné, mít jeden drát pro každé spojení, na jednom drátě může být přenášeno více spojení tak, že se určitý časový úsek rozdělí na intervaly a v každém intervalu komunikuje jiné spojení (time-shifting) garantuje prostupnost (každé spojení má vyhrazenou kapacitu, kterou nemůže používat nikdo jiný) konceptuálně velmi jednoduché Nevýhody špatná degradace: all-or-nothing, buď je garantované rychlé spojení, nebo žádné neefektivita: přetížení (výkyvy v “trafficu” se chovají “fraktálně” nikoliv podle poissonova rozdělení), každé spojení má vyhrazenu kapacitu i když jí třeba nevyužívá robustnost: pokud některý mezičlánek v komunikaci přestane fungovat, celé spojení spadne
Spojení: Packet switching motivováno “poštovním systémem” data jsou z místa na místo posílána po jednotlivých balíčcích každý balíček má zdrojovou a cílovou adresu a obsah příjemce / odesílatel se musí postarat o to, že všechny balíčky dojdou a dojdou ve správném pořadí Nevýhody hůře se pracuje, příjemce odesílatel musí udělat více práce negarantuje prostupnost
Výhody mezičlánky nemusí uchovávat žádný stav, mají méně práce robustnost: pokud mezičlánek přestane fungovat, spojení se nepřeruší, ztracené pakety se pošlou znovu jinou cestou dobrá degradace: není třeba garantovat rychlé spojení, proto při přetížení akorát klesne rychlost
Jak postavit “okruh” z “balíčků” — TCP
TCP — transport control protocol simuluje chování okruhu za použití “paketů” spojení: source address, source port, destination address, destination port
TCP z “uživatelského” hlediska — volající import socket # socket . AF_INET - pouzivame IP ( v4 ) adresy , socket . SOCK_STREAM - pouzivame TCP s = socket . socket ( socket . AF_INET , socket . SOCK_STREAM ) # "" - zdrojova adresa , 9234 - zdrojovy port s . bind (( " " , 9234 ) ) # 74 . 125 . 232 . 192 - cilova adresa , 80 - cilovy port s . connect (( " 74 . 125 . 232 . 192 " , 80 ) ) # posleme nejaka data s . send ( " GET / HTTP / 1 . 1 \ n " ) s . send ( " Host : www . google . cz \ n \ n " ) # pockame na nejvyse 8192 bytu odpovedi a vytiskneme je print s . recv ( 8192 )
TCP z “uživatelského” hlediska — volaný import socket s = socket . socket ( socket . AF_INET , socket . SOCK_STREAM ) s . bind (( " " , 80 ) ) # cekej na prichozi spojeni s . listen ( 1 ) conn , addr = s . accept () # pockej , nez jsou data k dispozici # a pak nacti nejvyse 100 bytu data = conn . recv ( 100 ) # dokud je spojeni otevrene ... while data : do_something_ ( data ) data = conn . recv ( 100 ) conn . close ()
Služby postavené na TCP
22 ssh 25 e-mail 53 DNS (ve skutečnosti používá jednodušší UDP protokol) 80 HTTP (www) 110 protokol POP3 pro přístup k e-mailové schránce 143 protokol IMAP pro přístup k e-mailové schránce
Jak to funguje — ethernet
každý počítač má svou hardwarovou adresu (MAC adresa), 6 bytů, zapisuje se ve tvaru 00:1c:c0:3e:1f:f0 speciální, tzv. broadcast, adresa ff:ff:ff:ff:ff:ff určená pro všechny posílají se tzv. “ethernet frame” každý počítač připojený do stejné sítě vidí všechny poslané framy pokud se dva počítače pokusí poslat “frame” najednou, dojde ke kolizi každý z počítačů, který poslal frame ho pošle s krátkým náhodným zpožděním praktické pouze pro “malé sítě”
Jak to funguje — ethernet Ethernet Frame
Příklad Ethernetového Framu
cílová adresa
ff ff ff ff ff ff
zdrojová adresa
00 00 aa ad 0b df
protokol
08 06 00 02 4e 0b 00 00 00
DATA
01 00 80 df 00 00 00
08 00 ce 4e 00 00 00
00 aa 78 80 00 00
06 ad 00 ce 00 00
04 0b aa 78 00 00
00 df ad 00 00 00
Malá ethernetová síť
00 00 aa ad 0b df
00 23 eb fd 3f bf
00 1c c0 3e 1f f0
00 c0 ee 36 c4 3a
00 09 43 3b 77 c3
Jak to funguje — IP (Internet Protocol)
IP byl navržen, aby umožnil propojení různých sítí zavádí jednotné adresy — IP adresy, každý počítač ve všech propojených sítích má unikátní IP adresu (ve skutečnosti je to trochu složitější) je nezávislý na použité síťové technologii (lze propojovat ethernetové sítě se sítěmi založenými na jiných technologiích) nezaručuje doručení paketů ani doručení ve správném pořadí, může se i stát, že paket dorazí dvakrát různé technologie mohou mít různé MTU (maximum transmission unit), do kterého se musí vejít jeden paket, IPv4 to řeší fragmentací paketů
IP — adresy velikost IP adresy jsou 4 byty, zapisuje se obvykle ve formátu 78.128.207.18, části oddělené tečkou odpovídají jednomu bytu (0-255) v dekadickém zápise IP adresa se sestává ze dvou částí: 1. část určuje síť, 2. část určuje počítač v dané síti toto rozdělení se označuje počtem bitů, které zabírá adresa sítě, uvádí se s lomítkem za adresou, např. takto: 78.128.207.18 / 25 (prvních 25 bitů určuje síť, zbývajících 7 bitů určuje počítač) v této síti tedy může být max 27 = 128 různých počítačů,s adresami od 0 do 127,adresa 78.128.207.201 je v jiné síti. další způsob označení síťové části adresy je tzv. síťová maska (netmask): je to speciální adresa, která v má v síťové části jedničky, v zbylé části 0. Předcházející příklad má síťovou masku 255.255.255.128
IP — vyhrazené adresy
Obecně přiděluje adresy organizace IANA (Internet Assigned Numbers Authority) Některé adresy jsou “speciální” / rezervované 192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8 — soukromé sítě nepřipojené (přímo) k internetu 127.0.0.0/8, adresa tohoto počítače (nejčastěji 127.0.0.1) Problém IPv4: adresy brzy dojdou (částečné řešení NAT — viz dále, nicméně i tak brzy dojdou)
IP — směrování (routing)
Jak se doručují pakety? pokud je paket určen pro počítač ve stejné síti, pak se použije tzv. ARP (address resolution protocol) k překladu IP adresy na MAC adresu, paket se zabalí do ethernetového framu a pošle se (podobně i pro neethernetové sítě) pokud je paket určen pro počítač v jiné síti, pošle se tzv. bráně (gateway), která musí být v lokální sítí (a jejíž adresa se opět zjistí pomocí ARP), která ho přepošle dál funguje to podobně jako pošta: pokud hodím dopis do schránky a adresa je místní, pošťák ho prostě doručí, pokud je adresa v jiném městě, nebo státě, pošťák ho přepošle na centrální poštu (bránu), která ví, jak si s ním dále poradit
IP — směrovací tabulky (routing tables) každý počítač má tzv. routovací tabulku, která určuje, kam se mají pakety posílat každý řádek tabulky sestává z kolonek: adresa cílové sítě (destination) IP adresa, kam se mají pakety do této sítě posílat (gateway) síťová maska cílové sítě (genmask/netmask) síťové rozhraní/síťová karta, po kterém se mají adresy posílat (interface) další technické kolonky
v routovací tabulce je navíc řádka, která má místo adresy cílové sítě hodnotu default (nebo 0.0.0.0) — určuje, kam se mají směřovat pakety, u kterých není řečeno jinak * v kolonce gateway znamená, že ip adresa je lokální (na win je místo * uložena adresa daného počítače)
IP — směrovací tabulky (routing tables)
Na linuxu lze routovací tabulku vypsat příkazem route, na windowsech z příkazového řádku příkazem route print jonathan@tinuviel:/usr/share/man$ route Kernel IP routing table Destination Gateway Genmask default 78.128.207.1 0.0.0.0 10.0.0.2 * 255.255.255.255 78.128.207.0 * 255.255.255.128 link-local * 255.255.0.0 192.168.3.0 * 255.255.255.0
Flags UG UH U U U
Metric 0 0 1 1000 0
Ref 0 0 0 0 0
Use 0 0 0 0 0
Iface eth0 tun0 eth0 eth0 tun0
IP — fragmentace paketů
různé sítě mají různou maximální velikost paketů (ethernet typicky 1500 bytů) IP pakety mají max. velikost 65,536 (= 21 6) bytů pokud se jeden IP paket nevejde do ethernetového paketu, je třeba ho rozdělit (fragmentovat) každý paket má v sobě informaci, zda je fragmentovaný a pokud ano, tak informaci, jakou částí původního nefragmentovaného paketu je když pakety dorazí do cíle, cílový počítač je musí opět složit (defragmentovat)
IP — příklad IP paketu
IP: 91.198.174.234
Ethernet Frame cílová adresa zdrojová adresa protokol
DATA
DATA
IP HLAVIČKA
IP Fragment verze velikost hlavičky DSCP ECN celková délka id nastavení fragmentace pozice fragmentu TTL (time to live) protokol kontrolní součet hlavičky zdrojová IP adresa cílová IP adresa
Příklad IP Fragmentu 4 5 00 01 f1 e4 80 4 0 00 40 06 2c 43 4e 80 cf 12 5b c6 ae ea
= IPv4
= Nefragmentuj
Internet
= 78.128.207.18 = 91.198.174.234
e1b600507a484914d27df03680180391609000000101080a1ac5ad724 04b2f89474554202f77696b6970656469612f656e2f7468756d622f36 2f36632f57696b695f6c65747465725f772e7376672f343070782d576 96b695f6c65747465725f772e7376672e706e6720485454502f312e31 0d0a486f73743a2075706c6f61642e77696b696d656469612e6f72670 d0a436f6e6e656374696f6e3a206b6565702d616c6976650d0a557365 722d4167656e743a204d6f7a696c6c612f352e3020285831313b204c6 96e7578206936383629204170706c655765624b69742f3533342e3334 20284b48544d4c2c206c696b65204765636b6f292072656b6f6e71205 361666172692f3533342e33340d0a526566657265723a20687474703a 2f2f656e2e77696b6970656469612e6f72672f77696b692f495076345 f6865616465725f636865636b73756d0d0a4163636570743a202a2f2a 0d0a4163636570742d456e636f64696e673a20677a69702c206465666 c6174652c20782d677a69702c20782d6465666c6174650d0a41636365 70742d436861727365743a207574662d382c2a3b713d302e350d0a416 3636570742d4c616e67756167653a20656e2d55532c20656e2d55533b 20713d302e382c20656e3b20713d302e360d0a0d0a
00:23:eb:fd:3f:bf IP: 78.128.207.1
00 00 aa ad 0b df
00 1c c0 3e 1f f0 IP: 78.128.207.18
00 c0 ee 36 c4 3a
Síť 78.128.207.0/18
00 09 43 3b 77 c3
Jak to funguje — TCP
TCP garantuje doručení všech paketů a to ve správném pořadí. Toho se docílí tím, že doručení každého paketu je příjemcem potvrzováno a pakety jsou číslované (pomocí tzv. sekvenčního čísla), aby se zajistilo správné pořadí.
Jak to funguje — TCP nejprve se vytvoří spojení (obě strany se musí dohodnout na počátečních sekvenčních číslech) volající pošle tzv. SYN packet a náhodné počáteční sekvenční číslo SEQN-V naslouchající odpoví tzv. SYN-ACK packetem, kde potvrdí přijetí SEQN-V a pošle vlastní náhodné SEQN-N volající odpoví tzv. ACK packetem, kde potvrdí přijetí SEQN-N
pak se posílají data data se uloží do mezipaměti (kdyby se cestou ztratily, je třeba je poslat znovu) a nastaví se budík (Retransmission Timer) pak se zabalí do jednoho nebo více TCP paketů, každému paketu se nastaví odpovídající sekvenční číslo a pakety se odešlou pokud dorazí potvrzení přijetí nějakého paketu, všechny pakety s menším sekvenčním číslem se zahodí z mezipaměti a znovu se nastaví budík pokud zazvoní budík (t.j. v určitém časovém intervalu nedošlo potvrzení), data z mezipaměti (resp. jejich část) se pošlou znovu
Zdroje ...
WireShark RFC 791 (Internet Protocol) RFC 793 (Transmission Control Protocol) en.wikipedia.org/wiki/Ethernet_frame en.wikipedia.org/wiki/IPv4 en.wikipedia.org/wiki/Transmission_Control_Protocol www.ssfnet.org/Exchange/tcp/tcpTutorialNotes.html