Sieć w piętnaście minut
Po tej lekcji: kursant rozumie, czym są adres IP, maska, brama, DNS, DHCP, port, TCP i UDP, IPv4 i IPv6 oraz adresy prywatne, i umie odczytać te rzeczy na własnym komputerze.
Wstęp
Najczęstsze zgłoszenie w historii informatyki. Trzy wykrzykniki, zero szczegółów. Czasem to kabel. Czasem DNS. Czasem ktoś wpisał zły adres trzy lata temu i dopiero dziś to wyszło.
Żeby to naprawić, musisz umieć przeczytać trzy linijki. Tak wygląda sieć mojej maszyny do nagrań:
ip -br a
ip r
cat /etc/resolv.conflo UNKNOWN 127.0.0.1/8
eth0 UP 192.0.2.2/24
default via 192.0.2.1 dev eth0
nameserver 8.8.8.8
nameserver 8.8.4.4Adres, maska, brama, DNS. Cztery rzeczy. Po tej lekcji każdą z nich wytłumaczysz babci przy obiedzie. Za piętnaście minut, jak obiecuje tytuł. No, może dwadzieścia, jak przy obiedzie.
Adres IP — adres mieszkania
Każde urządzenie w sieci ma adres. Tak jak mieszkanie: bez adresu kurier nie przyniesie paczki, a serwer nie odeśle strony.
Adres IPv4 to cztery liczby od 0 do 255 oddzielone kropkami. Na przykład 192.168.1.37. Każda liczba to osiem bitów, razem trzydzieści dwa. Trzydzieści dwa bity dają nieco ponad cztery miliardy adresów. Dokładnie 4 294 967 296. Brzmi jak dużo. Na planecie, gdzie każdy ma telefon, laptop, telewizor i lodówkę, która chce aktualizacji, to bardzo mało. Za chwilę do tego wrócimy.
Maska — która część to ulica, a która numer mieszkania
Adres 192.168.1.37 ma dwie części. Początek to ulica, czyli sieć. Koniec to numer mieszkania, czyli konkretne urządzenie. Gdzie przebiega granica? Mówi to maska.
Maska 255.255.255.0 znaczy: trzy pierwsze liczby to ulica, ostatnia to mieszkanie. Krócej zapisuje się to jako /24, bo pierwsze 24 bity to sieć. Ten zapis z ukośnikiem nazywa się CIDR i spotkasz go wszędzie.
Policz to bez kalkulatora w głowie, programem ipcalc:
sudo apt install ipcalc # [Ubuntu]
ipcalc 192.168.1.37/24Address: 192.168.1.37 11000000.10101000.00000001. 00100101
Netmask: 255.255.255.0 = 24 11111111.11111111.11111111. 00000000
=>
Network: 192.168.1.0/24 11000000.10101000.00000001. 00000000
HostMin: 192.168.1.1 11000000.10101000.00000001. 00000001
HostMax: 192.168.1.254 11000000.10101000.00000001. 11111110
Broadcast: 192.168.1.255 11000000.10101000.00000001. 11111111
Hosts/Net: 254 Class C, Private InternetZobacz tę spację w zerach i jedynkach. To jest granica. Na tej ulicy mieści się 254 mieszkańców. Czemu nie 256? Bo dwa numery są zajęte. Pierwszy, z samymi zerami, to nazwa całej ulicy. Ostatni, z samymi jedynkami, to broadcast, czyli megafon: co tam wyślesz, słyszą wszyscy na ulicy.
Zmień /24 na /16 i ulica robi się miastem na 65 534 adresy. Im mniejsza liczba po ukośniku, tym większa sieć. Tak, to odwrotnie, niż podpowiada intuicja. Witaj w sieciach.
[RHEL] ipcalc też jest, ale to inny program o tej samej nazwie i wynik wygląda inaczej. Liczby wyjdą te same.
Brama — portiernia osiedla
List do sąsiada z tej samej ulicy zanosisz sam. A list do Gdańska? Oddajesz na poczcie i nie interesuje Cię, którędy pojedzie.
Brama, po angielsku gateway, to właśnie ta poczta. Komputer patrzy na adres docelowy. Moja ulica? Wysyłam bezpośrednio. Nie moja? Oddaję bramie. W domu bramą jest zwykle router od internetu. To linijka default via 192.0.2.1 z haka: „wszystko, czego nie znam, wysyłaj przez 192.0.2.1”.
Nie ma bramy? Rozmawiasz tylko z sąsiadami. Internet dla Ciebie nie istnieje.
DNS — biuro numerów
Ludzie nie pamiętają liczb. Pamiętają nazwy. Wpisujesz google.com, a komputer potrzebuje adresu IP. Kto tłumaczy? DNS, Domain Name System. To takie biuro numerów: dzwonisz, mówisz „pizzeria Pod Kogutem”, dostajesz numer telefonu.
Adres biura numerów, z którego korzysta system, jest w /etc/resolv.conf.
[Ubuntu] Zobaczysz tam zwykle nameserver 127.0.0.53. To nie jest prawdziwy serwer DNS w internecie. To lokalny pośrednik, systemd-resolved, który siedzi w Twoim komputerze, pamięta odpowiedzi i dopiero sam pyta prawdziwe serwery. Recepcjonistka, która zna numer do biura numerów.
[RHEL] Zwykle zobaczysz od razu prawdziwe adresy serwerów DNS, wpisane tam przez NetworkManagera.
Jak to podejrzeć i zmienić na stałe, będzie w lekcji 70. Jak diagnozować, w lekcji 71.
DHCP — biuro najmu krótkoterminowego
Skąd Twój laptop wie, jaki ma adres, maskę, bramę i DNS? Nikt mu tego nie wpisywał. Dostał to od serwera DHCP.
Wyobraź sobie biuro najmu mieszkań. Wchodzisz i krzyczysz do całej sali: „Czy ktoś ma wolne mieszkanie?”. Biuro odpowiada: „Mam numer 37”. Ty: „Biorę 37”. Biuro: „Potwierdzam, 37 jest Twoje na 24 godziny”. Cztery kroki, po angielsku Discover, Offer, Request, Acknowledge. Admini mówią na to DORA, jak bajka dla dzieci.
Te „24 godziny” to dzierżawa, po angielsku lease. Przed końcem komputer sam ją przedłuża. Dlatego laptop zwykle ma ten sam adres codziennie, choć nikt go nie przypisał na stałe.
Serwer to inna historia. Serwer ma mieć adres stały, bo ludzie i inne serwery go szukają. Pizzeria, która codziennie zmienia adres, długo nie pociągnie.
Port — numer okienka w urzędzie
Adres IP mówi, do którego budynku iść. Ale w budynku działa wiele usług naraz: strona WWW, poczta, SSH. Skąd wiadomo, do której? Z portu.
Pamiętasz urząd? Port to numer okienka. Okienko 22 to SSH, czyli zdalne logowanie. 80 to strona WWW. 443 to strona WWW szyfrowana. 53 to DNS. Numerów jest 65 536, od 0 do 65535.
Spis najpopularniejszych okienek system trzyma w pliku /etc/services:
grep -wE '^(ssh|http|https|domain)' /etc/servicesssh 22/tcp # SSH Remote Login Protocol
domain 53/tcp # Domain Name Server
domain 53/udp
http 80/tcp www # WorldWideWeb HTTP
https 443/tcp # http protocol over TLS/SSL
https 443/udp # HTTP/3To tylko spis, jak tablica informacyjna w holu. Nic nie otwiera i niczego nie blokuje. Kto naprawdę słucha na którym porcie, sprawdzisz w lekcji 72.
Zauważ te dopiski: tcp i udp. To dwa różne sposoby rozmowy przy okienku.
TCP kontra UDP — rozmowa telefoniczna i pocztówka
TCP to rozmowa telefoniczna. Najpierw się łączysz: „Halo?” — „Halo, słyszę” — „To słuchaj”. Potem mówisz, a druga strona potwierdza, że dotarło. Coś się zgubiło? Powtarzasz. Kolejność jest zachowana. Wolniej, ale pewnie. Na TCP działają strony WWW, SSH, poczta, bazy danych. Wszystko, gdzie zgubiony kawałek to katastrofa. Nikt nie chce pliku z umową, w którym brakuje co dziesiątego zdania.
UDP to pocztówka. Wrzucasz do skrzynki i idziesz. Nie wiesz, czy doszła. Za to bez ceremonii i szybko. Na UDP działa zwykle DNS, rozmowy głosowe, gry, transmisje na żywo. W rozmowie wideo lepiej zgubić jedną klatkę, niż czekać, aż przyjdzie ponownie, kiedy rozmówca już dawno powiedział coś innego.
IPv4 kontra IPv6 — skończyły się numery
Cztery miliardy adresów. Wydawało się, że wystarczy na zawsze. 3 lutego 2011 roku IANA, organizacja rozdzielająca adresy dla całego świata, oddała regionalnym rejestrom ostatnie wolne bloki. 25 listopada 2019 roku RIPE NCC, rejestr dla Europy, a więc i dla Polski, przydzielił swój ostatni zwykły blok. Numery się skończyły, jak bilety na koncert w pierwszej minucie.
Odpowiedź to IPv6. Adres ma 128 bitów zamiast 32. To tyle adresów, że można by przydzielić osobny adres każdemu ziarnku piasku na plaży i jeszcze zostałoby na całe pustynie. Zapisuje się go szesnastkowo, z dwukropkami:
2001:db8::80Podwójny dwukropek znaczy „tu same zera, nie chciało mi się pisać”. ::1 to IPv6-owy odpowiednik 127.0.0.1. Adresy zaczynające się od fe80: to adresy lokalne, które karta sieciowa nadaje sobie sama.
W praktyce dziś działają oba naraz. Serwer często ma adres IPv4 i IPv6, a programy wybierają, którym jechać. Admin musi znać oba, bo awaria „działa po IPv4, nie działa po IPv6” to klasyk.
Adresy prywatne — numery wewnętrzne w biurowcu
Skoro adresów brakuje, jak to możliwe, że w domu masz dziesięć urządzeń? Bo używasz adresów prywatnych.
Pomyśl o biurowcu z centralą telefoniczną. Na zewnątrz firma ma jeden numer. W środku każde biurko ma numer wewnętrzny: 101, 102, 103. Te same numery wewnętrzne ma firma obok i nikomu to nie przeszkadza, bo z zewnątrz nikt ich nie wybiera bezpośrednio.
Adresy prywatne opisuje dokument RFC 1918 z lutego 1996 roku. Są trzy pule:
10.0.0.0/8— od 10.0.0.0 do 10.255.255.255,172.16.0.0/12— od 172.16.0.0 do 172.31.255.255,192.168.0.0/16— od 192.168.0.0 do 192.168.255.255.
Te adresy nie wychodzą do internetu. Router w domu podmienia je na swój jeden publiczny adres. Ta podmiana nazywa się NAT i ma swój lekcja, 74. To ten router jest centralą, która przełącza rozmowy z numerów wewnętrznych na zewnętrzny.
I jeszcze jeden specjalny adres: 127.0.0.1, czyli localhost. Rozmowa z samym sobą. Komputer wysyła pakiet i sam go odbiera, nic nie wychodzi z kabla. Bardzo ważne w lekcji 72, zapamiętaj.
Jak to działa pod spodem
Wpisujesz w przeglądarce adres strony. Co się dzieje?
- DNS: system pyta biuro numerów o adres IP nazwy.
- Tablica tras: jądro sprawdza, czy ten adres jest na mojej ulicy. Jeśli nie, pakiet pójdzie do bramy.
- Sąsiad: żeby wysłać cokolwiek po kablu, trzeba znać fizyczny adres karty sieciowej odbiorcy, adres MAC. Jądro pyta całą ulicę: „Kto ma adres 192.0.2.1?”. To pytanie nazywa się ARP. Odpowiedź zapisuje w tablicy sąsiadów.
- Połączenie: przeglądarka łączy się z portem 443 serwera przez TCP.
To „Halo? Halo, słyszę. To słuchaj” z TCP da się podejrzeć. Tak wygląda w moim laboratorium połączenie ze stroną na porcie 80, złapane programem tcpdump, który poznasz w lekcji 75:
192.168.50.20.58330 > 192.168.50.10.80: Flags [S], seq 3342843175, ...
192.168.50.10.80 > 192.168.50.20.58330: Flags [S.], seq 231731881, ack 3342843176, ...
192.168.50.20.58330 > 192.168.50.10.80: Flags [.], ack 1, ...
192.168.50.20.58330 > 192.168.50.10.80: Flags [P.], ... HTTP: GET / HTTP/1.1S to SYN, „halo?”. S. to SYN-ACK, „halo, słyszę”. Sama kropka to ACK, „to słuchaj”. Dopiero czwarty pakiet niesie prośbę o stronę. Ten trzykrokowy uścisk dłoni to three-way handshake. Zobacz też, że klient mówi z portu 58330. Okienko klienta jest losowe i jednorazowe, jak numerek z automatu w urzędzie.
Pocztówka UDP do tego samego serwera w tcpdumpie to jedna linijka. Bez powitań:
192.168.50.20.53861 > 192.168.50.10.5514: UDP, length 5Ściąga flag
| Komenda | Flaga | Co robi |
|---|---|---|
ip a | -br | adresy w skrócie, jedna karta w linijce |
ip a | -4 / -6 | tylko adresy IPv4 / IPv6 |
ip r | — | trasy, w tym brama (default via) |
cat /etc/resolv.conf | — | z jakiego DNS korzysta system |
ipcalc | adres/maska | zakres sieci, broadcast, liczba adresów |
grep -w | /etc/services | numer portu dla nazwy usługi |
getent services | 53/udp | to samo przez bazę systemu |
ss | -tuln | zapowiedź: kto słucha na portach (lekcja 72) |
⚠ Typowy błąd
Dwa komputery w tym samym pokoju, w tym samym przełączniku, a ping nie przechodzi. Sprawdzam w moim laboratorium. Serwer ma 192.168.50.10/24. Klientowi ktoś wpisał ręcznie:
ip -br a show enp1s0
ping -c2 192.168.50.10enp1s0@if2 UP 192.168.51.20/24
ping: connect: Network is unreachableJedna cyfra. 50 i 51. Przy masce /24 to dwie różne ulice. Klient patrzy: „192.168.50.10 nie jest na mojej ulicy, muszę iść przez bramę”. A bramy nie ma, więc jądro od razu się poddaje. Kable są dobre, przełącznik działa, ktoś po prostu pomylił numer ulicy.
Naprawa: popraw adres albo maskę tak, żeby oba komputery były w tej samej sieci. Sprawdzisz to ipcalc po obu stronach: jeśli linijki Network: się różnią, to są dwie różne ulice. Ten błąd kosztuje ludzi więcej godzin niż wszystkie awarie sprzętu razem.
✎ Zadanie
Na swojej maszynie lub VM:
- Odczytaj swój adres IP i maskę, adres bramy i serwer DNS.
- Policz
ipcalc, jaki jest zakres Twojej sieci i ile urządzeń się w niej zmieści. - Sprawdź, czy Twój adres jest prywatny, i z której z trzech pul pochodzi.
- Sprawdź w
/etc/services, jakie porty i protokoły mająntpiimaps.
Pokaż rozwiązanie
Cztery pytania, kilka komend. Na mojej maszynie:
ip -br -4 a # adres i maska
ip r | grep default # brama
cat /etc/resolv.conf # DNS
ipcalc 192.0.2.2/24 | tail -2 # zakres i liczba adresów
grep -wE '^(ntp|imaps)' /etc/serviceslo UNKNOWN 127.0.0.1/8
eth0 UP 192.0.2.2/24
default via 192.0.2.1 dev eth0
nameserver 8.8.8.8
nameserver 8.8.4.4
Hosts/Net: 254 Class C
ntp 123/udp # Network Time Protocol
imaps 993/tcp # IMAP over SSLU mnie 254 adresy. Czy prywatny? ipcalc sam to podpowiada: dla adresu z puli prywatnej dopisuje na końcu Private Internet. U mnie tego dopisku nie ma, bo 192.0.2.2 to pula do dokumentacji, nie prywatna. U Ciebie w domu najpewniej wyszło 192.168.cokolwiek i dopisek jest.
Czas zegarowy, czyli ntp, jedzie na UDP, port 123. Poczta imaps na TCP, port 993. Zegar może zgubić jedną pocztówkę, za sekundę przyjdzie następna. Poczta z fakturami zgubić się nie może, bo księgowa zgubi cierpliwość.
[Ubuntu] Jeśli w resolv.conf zobaczyłeś 127.0.0.53, prawdziwe serwery DNS pokaże resolvectl status. O tym w następnej lekcji.
Co dalej
Wiesz już, co to adres, maska i brama. W następnej lekcji bierzemy do ręki narzędzie, które to wszystko pokazuje i zmienia: komendę ip. Adresy, trasy, karty sieciowe i sąsiedzi. I dlaczego ifconfig z tutoriali sprzed dekady czasem po prostu kłamie.