Sieci cz. 1. Jak myślą komputery? System binarny i adres IP w JavaScript.

Zastanawiasz się czasem jak w ogóle działa internet? Może nawet piszesz strony czy aplikacje i w zasadzie nie wiesz co tam się w międzyczasie dzieje? Chcesz w końcu rozwiać te wątpliwości? Jesteś we właściwym miejscu. Dzisiaj o tym jak myślą komputery.

Czego się dzisiaj dowiesz?

To będzie wstęp do całej serii związanej z sieciami i internetem. Wyjaśnię tutaj podstawy działania komputerów czyli jak interpretują dane, opiszę przy tym system binarny i dziesiętny. Następnie pokaże jak wygląda adres IP na podstawie którego rozpoznawane są komputery w sieci. Na końcu napiszę dwa proste algorytmy w JavaScript pozwalające na konwersję liczb między systemem dziesiętnym i binarnym.

Seria Sieci

Ta seria ma na celu zapoznanie z tematem sieci komputerowych i zrozumienia zasad komunikacji między aplikacjami w internecie. Bo Web Dev bez znajomości sieci to jak kierowca bez znajomości zasad ruchu drogowego 🙂

W skład serii wchodzą:

  1. Sieci cz. 1. Jak myślą komputery? System binarny i adres IP w JavaScript.
  2. Sieci cz. 2. Jak komunikują się komputery? Protokół TCP/IP.
  3. Sieci cz. 3. Czym jest internet i jak działa Wi-fi? Trasowanie i DNS.
  4. Sieci cz. 4. Jak komunikują się aplikacje internetowe? Porty i protokół HTTP.
  5. Sieci cz. 5. Sekrety poczty e-mail czyli działanie poczty internetowej.
  6. Sieci cz. 6. Strumieniowanie danych czyli muzyka i video w internecie.
  7. Sieci cz. 7. Chmura. Czym jest i jak zrozumieć tą koncepcje?

Dlaczego o tym piszę?

Internet i komunikacja między aplikacjami to była dla mnie taka czarna skrzynka… No dobra wiedziałem, że są requesty i responsy, GETy czy POSTy ale jak to wszystko tam naprawdę działa w środku?

Temat sieci i internetu jest dobry do pisania rozpraw doktorskich… Próba wyjaśnienia tego fenomenu w kilku wpisach na blogu to zaledwie dotknięcie tematu. Mimo to chcę razem z Wami spróbować poznać ten fascynujący Świat!

Zanim jednak zrozumiemy jak komputery rozmawiają ze sobą dowiedzmy się jak w ogóle mówią

Powrót do szkoły

Pewnie wielu/e z Was pamięta lekcje informatyki w szkole gdzie wbijano nam do głowy czym jest system binarny 🙂 Pytanie było takie: Po co to komu? No nam to się w zasadzie nie przydaje… Ale komputerom już tak!

System dziesiętny – tak myśli człowiek

Nasza cywilizacja przyjęła koncept myślenia w systemie dziesiętnym. Czyli wszelkie operacje matematyczne prowadzimy przy użyciu cyfr 0-9 oraz potęgi liczy 10. Do tego mamy alfabet i używając tego systemu formułujemy wnioski.

System binarny – tak myśli komputer

System binarny składa się z kombinacji tylko 2 cyfr tzn. 0 i 1. Każda cyfra to 1 bit.

Dlaczego komputery używają tego systemu?

Są to maszyny więc nie są one w stanie wyciągać nie jednoznacznych wniosków. Dla nich są tylko dwa stany tzn. tak lub nie / włączony lub wyłączony / 1 lub 0. Na podstawie ciągu takich informacji są w stanie wykonywać określone operacje. Fajnie jest to wytłumaczone w tym video:

Jak działa komputer?

Mózgiem komputera jest procesor i tam właśnie przetwarzane są te wszystkie “myśli” które do niego dochodzą czyli niezliczone kombinacje bitów. Jak szybko jest je w stanie przetworzyć?

Cykl Zegara

Jest to czas w jakim procesor jest w stanie przejść ze stanu 1 do stanu 0 i z powrotem. Czyli przetworzyć 2 bity danych (?… poprawcie mnie jeśli się mylę).

Kolejnym pytaniem jest ile takich cyklów procesor jest stanie przetworzyć w ciągu sekundy? Z fizyki pamiętamy, że 1 cykl na sekundę to 1 Hz czyli np. procesor o parametrach 3GHz jest w stanie wykonać 3 *10^9 takich operacji.

Jednak aby procesor pracował wydajnie musi mieć dostarczane kolejne porcje danych w odpowiednim czasie. Zajmuje się tym pamięć operacyjna RAM i pamięć Cache

Jeśli ktoś chcę się dowiedzieć na temat pracy procesorów coś więcej niż tylko moje pobieżne wyjaśnienia to zapraszam np. TUTAJ

Generalnie chodzi o to, że procesor rozumie wszelkie dane w formacie binarnym i jest w stanie je interpretować. Szczegółowe wyjaśnienie tego zagadnienia wymaga naprawdę zaawansowanej wiedzy. Może innym razem 🙂

System dziesiętny vs binarny

Tak czy inaczej cały kod, tekst, grafiki itp. na którymś etapie muszą być przekonwertowane na zapis binarny. Jak to działa?

Tekst

W tym wypadku sprawa jest łatwiejsza bo każda litera/znak ma odpowiednik w zapisie ASCI (dziesiętny) i binarny składający się z 8 bitów. Tabla kodami binarnymi dla znaków jest np. TUTAJ

Liczby

No ale każdy symbol ma swój kod ASCI który jest konwertowany na zapis binarny. Więc jak konwertować liczby dziesiętne na binarne? Fajnie jest to przedstawione poniżej:

10 na 2

Mając liczbę dziesiętną można odjąć najbliższą potęgę liczby 2. Jeśli jest wynik jest pozytywny to pierwsza cyfra zapisu binarnego to 1, jeśli nie to 0 i schodzimy potęgę niżej. Powtarzamy ten schemat aż dojdziemy do 0:

149 – 256 = xx, b = 0

149 -128 = 21, b = 1

21 – 64  = xx, b = 0

21 – 32 = xx, b = 0

21 – 16 = 5, b = 1

5 – 8 = xx, b = 0

5 – 4 = 1, b = 1

1 – 2 = xx, b = 0

1 – 1 = 0, b = 1

Czyli 149 = 10010101 (zapis 8-bitowy bo 8 cyfr)

2 na 10

Jeśli chcemy wykonać operację w odwrotnym kierunku należy zacząć od końca i mnożyć przez kolejne potęgi liczby 2 tzn:

10001001 =

1 * 2^0 = 1

0 * 2^1 = 0

0 * 2^2 = 0

1 * 2^3 = 8

0 * 2^4 = 0

0 * 2^5 = 0

0 * 2^6 = 0

1 * 2^7 = 128

Czyli 10001001 (zapis 8-bitowy czyli oktet) = 1 + 8 + 128 = 137

Adres IP komputera

W komunikacji sieciowej komputery identyfikują się po zestawie unikalnych adresów. Jednym z podstawowych adresów jest adres IP który jest przypisany do konkretnego komputera.

Twórcy sieci wykorzystali fakt, że za pomocą 8 bitów można zapisać numery od 0 do 255 i na tej podstawie stworzyli pierwotny system adresów sieciowych. Dla przykładu typowy adres IPv4 (czyli klasycznej wersji) wygląda tak:

192.168.0.1

A komputer widzi ten adres w ten sposób:

11000000 10101000 00000000 00000001

Są to więc 4 oktety bitów czyli łącznie 32 bity. W podobny sposób są zapisywane pozostałe adresy sieciowe o czym więcej w kolejnych częściach serii.

Bit vs Bajt

O ile bit jest jednostką określającą ilość znaków/danych o tyle bajt już jest określa ilość pamięci. Te dwie jednostki są bezpośrednio skorelowane i najczęściej spotykaną proporcją jest 8/1 czyli:

8 bitów = 1 Bajt

8 b = 1 B

Idąc tą logiką adres IP składa się z 4 Bajtów a jedna litera alfabetu to 1 Bajt.

Napewno znacie takie jednostki pojemności pamięci jak KB, MB czy GB. Albo przepustowości łącza internetowego jak 10Mb/sek. czy 100Mb/sek.

Algorytmy w JavaScript

Przy okazji poznawania formatu danych pobawimy się też trochę JSem. Poniżej dwa algorytmy ( hehe w tym wypadku to chyba za duże słowo 🙂 ) konwersji liczb dziesiętnych i binarnych:

Dziesiętne do binarnych

function decToBin(a){
    return Number(a.toString(2));
}

decToBin(156) // 10011100

Jak widać mamy tu wbudowaną metodę .toString() która znakomicie sobie radzi z konwersją…

Binarne do dziesiętnych

function binToDec(a){
    return parseInt(a, 2);
}

binToDec(10011100) // 156

Konwersja w drugą stronę jest równie banalna. JavaScript zwalnia nas od pisania specjalnych algorytmów do konwersji od podstaw 🙂

Podsumowanie

W dzisiejszym wpisie zaledwie dotknąłem tematu sieci komputerowych jednak zrozumienie zapisu binarnego jest ważne. Dane są wysyłane przez sieć w formacie binarnym więc jest to dobry wstęp do zagadnienia.

W następnym wpisie w serii będzie już o sieciach właściwych i protokole TCP/IP! O, i o ile uważasz, że walnąłem gdzieś jakąś gafę to pisz w komentarzu 🙂


Bartek Cis

Piszę dla was tego bloga bo lubię aplikacje internetowe. Mogę je projektować, kodować a potem o nich pisać czując dreszczyk ekscytacji za każdym razem gdy trafię na coś nowego. Bo uczymy się całe życie. Prawda?
  • Oh, dzięki za wpis nie wiedziałem, że można skonwertować string z liczbą binarną do typu number.