TI/Internet od środka

Z Brain-wiki

TCP/IP czyli struktura internetu

Co to jest sieć komputerowa? Tworzą ją komputery i rozciągnięte pomiędzy nimi łącza. Na początku sieć zbudowana była ze zwykłych linii telefonicznych, a dziś „okablowanie” internetu stanowią linie światłowodowe, łącza satelitarne, linie telefoniczne, fale radiowe — właściwie wszystko, co nadaje się do przesyłania informacji. Mechanizmem, dzięki któremu z Internetu mogą korzystać dowolne komputery na całym świecie — niezależnie od marki, systemu operacyjnego, języka i sposobu fizycznego podłączenia do tej globalnej sieci — jest ściśle określony standard wymiany informacji: Protokół Internetu (ang. Internet Protocol, IP).

Definiuje on podstawowe zasady przesyłania informacji w Internecie. Każdy węzeł — komputer w sieci — ma swój własny adres, co pozwala każdemu komputerowi przesyłać informacje do konkretnego odbiorcy. Informacja jest przesyłana w postaci pakietów, z których każdy zawiera, trochę jak zwykly list, adres odbiorcy i nadawacy oraz pewną treść.

Protokół IP stworzony został w latach 60. XX w. na potrzeby Departamentu Obrony USA — dla sieci ARPANET, która miała być odporna na atak jądrowy. Spełnienie tego warunku uzyskano poprzez całkowitą decentralizację i brak stałej struktury. Dzięki temu sieci nie sparaliżuje ani zniszczenie głównego serwera, ani kluczowego łącza (bo takich nie ma). Droga informacji ustalana jest dynamicznie, w zależności od dostępnych i działających w danym momencie komputerów.

Internet.png

Protokół IP ustala tylko bardzo podstawowe zasady przesyłania pakietów — w szczególności komputery pośredniczące w przekazaniu pakietu do ostatecznego odbiorcy mogą różne pakiety wysyłane przez nadawcę do jednego odbiorcy wysyłać różną drogą, nie podejmują też żadnych działań jeśli pakiet ulegnie uszkodzeniu czy zagubieniu i nie zostanie przekazany adresatowi. Internet jest jednak używany do komunikacji dwustronnej, a przesyłana informacja często wymaga wysłania milionów pakietów (i odebrania każdego z nich). Dlatego oprócz IP używa się dodatkowe protokoły które określają zasady komunikacji dwustronnej i zachowania w przypadku zagubienia pakietu.

Najbardziej znany z tych „wyższych” protokołów, to Transmission Control Protocol (TCP, czyli „protokół kontroli transmisji” [danych]). Określa on kiedy należy przyjąć, że pakiet nie dotarł do odbiorcy i wysłać go ponownie. Pozwala on też na wykrycie pakietów, które dotarły w złej kolejności — co może się zdarzyć, jeśli podróżują innymi drogami.

Numer IP

Skoro nie wiadomo, jaką konkretnie drogą ma płynąć informacja, to musi być przynajmniej wiadome, dokąd ma dotrzeć. Dlatego przesyłana Internetem informacja jest dzielona na kawałki zwane pakietami, opatrzone adresem komputera docelowego. Aby była możliwa komunikacja w obie strony, w każdym pakiecie musi się również znajdować adres nadawcy -- dla potwierdzenia poprawności transmisji. Oba te adresy nie mogą się powtarzać nigdzie indziej na świecie. Każdy komputer podłączony do internetu musi mieć własny unikatowy adres, czyli opisany poniżej numer IP.

struktura numeru IP

Adres IP to po prostu liczba pomiędzy 0 a 4294967295, czyli [math]2^{32} - 1[/math]. Aby zapisać takie liczby potrzeba czterech bajtów (każdy ma 8 bitów, czyli łącznie mamy 32 bity, co daje właśnie [math]2^{32}[/math] możliwości). Ze względów historycznych utarło się te liczby przedstawiać w rozbiciu — każdy bajt osobno. Każdy bajt zapisuje się przy podstawie dzisiętnej, a poszczególne bajty oddziela się kropkami: np. 192.0.34.163, czyli 0xc02200a3, to adres 3223453859.

www.fuw.edu.pl: 193.0.80.4
193 0 80 4
1100 0001 0000 0000 0101 0000 0000 0100
8 bitów = 1 bajt 8 bitów = 1 bajt 8 bitów = 1 bajt 8 bitów = 1 bajt
11000001 00000000 01010000 00011100
4 × 8 bitów = 32 bity = 4 bajty

Internet jest zdecentralizowany — pomijając wymaganie odporności na kataklizmy, nie ma innego sposobu by obsłużyć rosnącą wykładniczo liczbę użytkowników. W szczególności dotyczy to rownież sposobu przydziału adresów. Główny problem wynika z konieczności takiego rozdziału adresów, aby żadne dwa się nie powtarzały. Światowy centralny bank numerów IP wszystkich komputerów byłby niezgodny z ideą decentralizacji Internetu, postanowiono więc problem rozwiązać w postaci struktury hierarchicznej.


Globalna pula adresów jest dzielona na części, które są przekazywane pod kontrolę jednej z pięci organizacji regionalnych — północnoamerykańskiej, europejsko-bliskowschodniej, afrykańskiej, południowoamerykańskiejaustralijskiej. Te z kolei przekazują część swojej części organizacjom krajowym lub dużym firmom.

W ramach swojego bloku organizacja może wydzielać mniejsze bloki, które przydzieli innym organizacjom itd. — ale zawsze możemy dojść, kto jest odpowiedzialny za dany adres. Na przykład, blok adresów 11000001.00000000.010100__.________ (przy podstawie dwójkowej), czyli wszystkie adresy posiadające pewien ustalony odgórnie początek i dowolną końcówkę, przydzielony jest Wydziałowi Fizyki Uniwersytetu Warszawskiego. Ta właśnie instytucja odpowiada za jednoznaczność adresów od 193.0.80.0 do 193.0.83.255, a jednocześnie może nimi dysponować wedle swoich reguł. Te informacje każdy użytkownik internetu może uzyskać korzystając z serwisów WHOIS, czyli publikowanych w internecie przez poszczególne organizacje spisów przydzielonych adresów. Zaglądając pod http://whois.domaintools.com/193.0.80.4 dowiemy się, że adres www.fuw.edu.pl, czyli 193.0.80.4, jest pod kontrolą Uniwersytetu Warszawskiego, który w ramach swojej wewnętrznej organizacji część swoich adresów przekazał pod kontrolę Wydziału Fizyki.

Adresy i porty

Połączenie w sieci jest identyfikowane przez adresy dwóch komputerów oraz dwa numery portów.

Gdyby między dwoma komputerami w sieci można było zestawić na raz tylko jedno połączenie przez internet, to do komunikacji wystarczałyby adresy IP. Niemniej, takich jednoczesnych połączeń może być wiele, np. gdy ściągamy z serwera stronę WWW celem wyświetlenia przez przeglądarkę, to jednocześnie ten sam klient może z tego samego serwera pobierać dwa obrazki, muzyczkę i treść strony. Aby odbiorca pakietu był w stanie stwierdzić, do którego z tych strumieni pakiet jest przypisany, potrzebna jest dodatkowa informacja. Dlatego połączenia wykonywane zgodnie z protokołem IP są podzielone na tzw. strumienie, z których każdy oprócz adresu źródłowego i docelowego, jest opisany przez dwie jeszcze liczby. Zarówno odbiorca jak i nadawca wybierają pewną liczbę, numer portu, i taka para jest jednoznacznie przypisana do danego strumienia. Dopiero te cztery elementy (adres IP źródłowy, port źródłowy, adres IP docelowy, port docelowy) jednoznacznie identyfikują połączenie.

Wyczerpywanie puli adresów

Długość numeru IP (przypisywanego każdemu podłączonemu do Internetu komputerowi) ustalano wiele lat temu, na potrzeby stosunkowo niewielkiej sieci. Mimo to zarezerwowano na niego aż 32 bity (obowiązujący do dziś standard IPv4), co daje ponad 4 miliardy możliwych adresów. W owych czasach była to liczba zbliżona do liczby ludzi na Ziemi, jednak adresów dość szybko zaczęło brakować.

32 bity podzielono na bloki. Kolejne bloki przydzielane są organizacjom (krajom, firmom etc.), które są odpowiedzialne za jednoznaczność adresów w ich ramach. Problem w tym, że oczywiście każda odpowiedzialna za jakiś większy blok adresów organizacja musi ich mieć przynajmniej trochę na zapas, aby móc nadawać numery nowym komputerom podłączanym do Internetu — a ich liczba rośnie w zastraszającym tempie! No i trzeba zarezerwować duże bloki adresów dla państw, które jeszcze z Internetu nie korzystają.

Dlatego numerów IP zaczęło brakować już w latach 90. XX w. W 1995 r. zaproponowano 128-bitowy standard IPv6, oferujący [math]2^{128}[/math] czyli ok. 34000000000000000000000000000000000000 adresów. Niestety, ten standard nie jest kompatybilny z IPv4. Dlatego jego zastosowanie wymagałoby albo jednoczesnego przeprogramowania (w przypadku wielu urządzeń wiążacego się w praktyce z wymianą) wszystkich korzystających z Internetu urządzeń, albo doprowadziłoby do powstania nowej sieci której komunikacja z Iternetem nie byłaby prosta i bezpośrednia.

Prace w tym kierunku trwają, ale w międzyczasie powstały "doraźne" sposoby na upychanie nowych komputerów w przyciasnej przestrzeni adresów.

IPv4 exhaustion.svg

Pierwszym z nich była zmiana ilości w jakich adresy IP były przydzielane. Moment zmiany wyraźnie widać na wykresie obok około roku 1995. Wcześniej adresy przydzielano w tak zwanych klasach — po 256, 65636 lub 16777216 adresów. Innymi słowy, organizacja otrzymywała blok adresów w którym ostatni bajt był całkowicie pod jej kontrolą, lub dwa, a nawet trzy bajty. Dla dużej międzynarodowej firmy 65 tysięcy adresów to nie jest tak dużo — jeśli się uwzględni, że komputer każdego pracownika będzie potrzebował podłączenia do sieci. Jeśli się popatrzy na listę głównych przypisań to okazuje się, że m.in. IBM, Ford, Xerox, HP, AT&T, General Electric, Prudential Securities Inc. czy Eli Lily „potrzebowały” po 16 milionów adresów do własnej dyspozycji. Każdy taki blok to 1/256 globalnej puli adresów. Kiedy zdano sobie sprawę, że taka polityka doprowadzi do wyczerpania adresów pod koniec lat dziewiędziesiątych, zaczęto adresy przyznawać w blokach będących dowolną potęgą dwójki — po 1, 2, 4… Jednocześnie przestano przyznawać adresy „na zaś”, na wypadek gdyby firma czy organizacja się rozrosła. Zgodnie z nową polityką, jeśli będzie taka potrzeba to przekaże się następny blok.

Jednocześnie podjęto inne kroki.

Dynamiczne IP

Najpierw okazało się, że wielu użytkowników podłącza się do Internetu tylko od czasu do czasu — przez łącze telefoniczne. Dlatego nie trzeba każdemu z nich rezerwować osobnego, stałego adresu IP — zamiast tego są one przydzielane dynamicznie, z puli przyznanej dostawcy usług internetowych. Każdy numer IP jest w danym momencie globalnie unikatowy, jednak co pewien czas zmienia się jego użytkownik.

Adresy prywatne i NAT

Klasa Pula adresów prywatnych
A 10.0.0.0 – 10.255.255.255
B 172.16.0.0 – 172.31.255.255
C 192.168.0.0 – 192.168.255.255

Mimo wykorzystania adresów dynamicznych, liczba komputerów podłączanych do Internetu na stałe wciąż rosła. Wtedy zwrócono uwagę na fakt, że większość z komputerów korzysta z Internetu wyłącznie biernie — do przeglądania stron WWW czy łączenia się z serwerami pocztowymi. A skoro nie ma na nich stron WWW ani innych serwisów dostępnych z zewnątrz, to może nie potrzebują one własnego numeru IP? Niestety, do przesłania każdego pakietu musi być znany zarówno adres komputera docelowego, jak i adres nadawcy. Każda strona, którą oglądamy w przeglądarce, jest wysyłana z serwera w postaci pakietów, zaadresowanych specjalnie dla naszego komputera. Wyglądało na to, że nawet do biernego korzystania z Internetu potrzebny był chociaż chwilowy numer IP.

Ale i tu znalazło się obejście — nazywa się NAT (Network Address Translation). Ogólnie wygląda to tak, że np. w firmie do Internetu jest podłączony jeden komputer (router NAT), a do niego (siecią lokalną) pozostałe komputery firmy. Jeśli któryś z komputerów potrzebuje ustanowić połączenie z serwerem internetowym (np. WWW) na zewnątrz, lokalny router NAT występuje w jego imieniu i przesyła mu otrzymane pakiety. W ten sposób jeden adres internetowy (routera NAT) może obsłużyć nawet bardzo dużo komputerów, korzystających jednocześnie z Internetu. Dzięki temu dysponując tylko jednym adresem IP, można nadać adres IP wielu komputerom. Nie są to "prawdziwe" adresy internetowe, tylko adresy w sieci lokalnej firmy — mówi się o nich "adresy z klasy prywatnej", w odróżnieniu od prawdziwych IP "z klasy publicznej".

Jak działa NAT od strony technicznej?

Tak jak to zostało wcześniej opisane w części o adresach i portach, każde połączenie jest identyfikowane przez cztery liczby — (adres IP źródłowy, port źródłowy, adres IP docelowy, port docelowy). Wiemy już, że router NAT udaje, że połączenia od wielu komputerów w sieci lokalnej pochodzą z jednego globalnego adresu IP. Czemu się one nie mieszają? Można je nadal odróżnić po numerach portów! Przy przysyłaniu pakietu na zewnątrz, router zamienia adres źródłowy na adres globalny. Jednocześnie zapamiętuje, że ten numer portu jest używany przez dany komputer w sieci lokalnej. Przy odbieraniu pakietu z zewnątrz, router otrzymuje wszystkie pakiety z tym samym adresem globalnym. Ale patrząc na listę używanych portów, znajduje informację dla jakiego komputera w sieci lokalnej pakiet jest przeznaczony. Po odwrotnej podmianie adresu, pakiet jest przesyłany do komputera docelowego.

NAT.png

Na czym polega różnica w praktyce? Otóż do komputera korzystającego z NAT nie można dostać się z zewnątrz. Oznacza to m.in., że na takim komputerze nie możemy umieścić ogólnodostępnego serwisu WWW (ani żadnego innego), bo nie ma on widocznego na zewnątrz adresu. Dla większości użytkowników jest to wręcz zaletą, gdyż ogranicza możliwości przynajmniej niektórych włamań. A własne strony WWW (i skrzynki pocztowe) i tak trzymamy na dedykowanych serwerach — przecież nasze komputery czasem wyłączamy, a serwis powinien być dostępny non-stop…

Skąd się wzięła względna anonimowość w Internecie?

Opisane w poprzednim rozdziale mechanizmy wprowadziły zasadniczą zmianę w porównaniu z początkowym okresem istnienia Internetu, kiedy każdy podłączony do niego komputer miał na stałe przypisany numer IP. W takim układzie nie było mowy o anonimowości. Za każdy adres IP odpowiadała jakaś organizacja, a za komputer, któremu ten IP przypisano — jego administrator. Użytkownik nie mógł otrzymać konta bez wiedzy administratora, który wymagał przy jego zakładaniu identyfikacji użytkownika. Ponieważ każdy przesyłany Internetem pakiet informacji zawiera adres komputera, z którego został wysłany, połączenie go z konkretnym człowiekiem, czyli użytkownikiem posiadającym na danym komputerze konto, było proste.

Wprowadzenie dynamicznie przydzielanych adresów IP oraz NAT, opisanych w poprzednim rozdziale, zmieniło tę sytuację — choć nie do końca. Dotarcie do właściciela komputera, podłączonego do Internetu, jest możliwe i teraz. Na przykład na podstawie zapisów połączeń telefonicznych dostawcy usług internetowych można ustalić, z jakiego numeru telefonu łączono się w danej chwili poprzez dany numer IP. Ale jest to już znacznie bardziej skomplikowane, szczególnie w przypadku telefonów komórkowych i korzysta się z tych możliwości wyłącznie w przypadku uzasadnionych podejrzeń związanych z naruszeniem prawa. Można powiedzieć, że z podpisu, którym był kiedyś opatrzony w Internecie każdy pakiet informacji, pozostał dziś tylko odcisk palca.

Droga informacji w Internecie

Droga, którą płynie informacja w Internecie, nie jest ustalona "na sztywno". Nie znaczy to jednak, że jest nam zupełnie nieznana — możemy sprawdzić, przez które komputery popłyną w danej chwili internetowe pakiety np. z Warszawy do USA, do yahoo.com. Przedstawione listy to wynik działania uniksowej komendy traceroute, podającej listę komputerów pośredniczących w połączeniu o określonym celu:

 1  bbone-R-wman.fuw.edu.pl (193.0.80.10)  1.187 ms   1.113 ms   1.789 ms
 2  193.0.64.117  7.247 ms   9.113 ms   2.580 ms
 3  z-ochoty.poznan-gw.10Gb.pol34.pl (212.191.224.33)  21.150 ms   21.021 ms   15.886 ms
 4  hbg-b2-pos0-0-0.telia.net (213.248.77.213)  26.987 ms   27.188 ms   25.817 ms
 5  hbg-bb2-pos0-1-0.telia.net (213.248.65.181)  25.867 ms   26.792 ms   27.805 ms
 6  kbn-bb2-pos4-0-0.telia.net (213.248.65.126)  31.824 ms   30.724 ms   30.805 ms
 7  nyk-bb2-pos5-0-0.telia.net (213.248.64.34)  122.110 ms   124.416 ms   122.089 ms
 8  nyk-i1-pos3-0.telia.net (213.248.82.22)  119.133 ms   117.781 ms   117.735 ms
 9  so-0-1-0.edge1.NewYork1.Level3.net (209.244.160.161)  122.349 ms   122.060 ms   122.281 ms
 10  ge-2-1-0.bbr2.NewYork1.Level3.net (64.159.4.149)  118.000 ms   119.448 ms   119.324 ms
 11  ge-0-1-0.bbr2.SanJose1.Level3.net (64.159.1.130)  193.191 ms   194.529 ms   193.598 ms
 12  ge-10-1.ipcolo3.SanJose1.Level3.net (64.159.2.105)  193.125 ms   194.446 ms   193.130 ms
 13  unknown.Level3.net (64.152.69.30)  193.668 ms   193.082 ms   192.951 ms
 14  UNKNOWN-66-218-82-230.yahoo.com (66.218.82.230)  194.370 ms 193.399 ms   193.333 ms
 15  w1.rc.scd.yahoo.com (66.218.71.112)  194.635 ms   193.658 ms   193.125 ms

Po drodze mamy aż piętnaście komputerów! Na szczęście nie powoduje to wielkich opóźnień: pojawiające się za nazwami kolejnych komputerów liczby określają (w tysięcznych częściach sekundy) czas oczekiwania paczek informacji na dalsze połączenie. W tym przypadku cała droga zajmuje niewiele ponad sekundę. Ani szybkość połączenia, ani też liczba czy adresy biorących w nim udział komputerów nie są regułą. Szczególnie szybkość połączenia może ulegać dużym zmianom.

Druga lista to droga do witryny polska.pl:

 1  bbone-R-wman.fuw.edu.pl (193.0.80.10)  1.207 ms   1.182 ms   1.511 ms
 2  193.0.64.117  100.051 ms   98.751 ms   83.254 ms
 3  icm-r1-193-219-28-237.rtr.net.icm.edu.pl (193.219.28.237)  3.368 ms   4.142 ms   4.955 ms
 4  uw-gw-at1-0-103.warman.nask.pl (194.181.0.125)  4.436 ms   4.475 ms   6.933 ms
 5  pw-gw0-at2-0-0-4.core.nask.pl (195.187.254.221)  8.252 ms   7.631 ms   7.248 ms
 6  kabaty-gw-at2-0-1.warman.nask.pl (195.187.254.154)  6.265 ms   4.692 ms   10.045 ms
 7  helm-fa0-0.nask.waw.pl (194.92.0.166)  11.500 ms   6.034 ms   7.990 ms
 8  polska.pl (193.59.201.35)  8.857 ms   11.404 ms   11.415 ms

Jak widać, nawet bliskie połączenia mogą się odbywać za pośrednictwem kilku komputerów — wybieranych w danej chwili zależnie od zajętości łącz. Odziedziczony po sieci wojskowej spadek, który miał zapewnić odporność na atak jądrowy, sprawdza się wspaniale w dzisiejszym Internecie. Dzięki niemu awarie nawet bardzo ważnych serwerów lub łączy nie paraliżują całej Sieci — mogą co najwyżej bardzo spowolnić niektóre połączenia, automatycznie zestawiane w sytuacji awaryjnej wolniejszą drogą.

Żeby ten schemat działał, każdy komputer w Internecie musi mieć zupełnie unikalny i jednoznaczny adres — dla komputerów najwygodniejsze są numery. Numerem komputera docelowego (i wysyłającego) musi być opatrzony każdy wysyłany Internetem pakiet.


Co się dzieje po wpisaniu w przeglądarce adresu strony do jej wyświetlenia?

W skrócie i w ogromnym uproszczeniu:

  1. przeglądarka za pośrednictwem systemu operacyjnego (obsługującego niskopoziomowe protokoły TCP/IP) łączy się z serwerem DNS, który podaje numer IP przypisany do adresu symbolicznego który wpisaliśmy
  2. na otrzymany adres IP zostaje wysłane, sformatowane zgodnie z protokołem HTTP, zapytanie do serwera WWW ew. działającego pod tym adresem
  3. jeśli serwer WWW działa, na adres nadawcy są wysyłane pakiety, zawierające kolejne fragmenty kodu strony w języku HTML
  4. jeśli sumy kontrolne się zgadzają, z pakietów odpakowywany jest kod HTML, który przeglądarka interpretuje i wyświetla
  5. jeśli w którymś pakiecie nie zgadza się suma kontrolna, do serwera wysyłane jest żądanie ponownego przesłania tego pakietu