4.4 Lekcja 1
Certifikat: |
Linux Essentials |
---|---|
Wersja: |
1.6 |
Temat: |
4 System operacyjny Linux |
Cel nauki: |
4.4 Komputer w sieci |
Lekcja: |
1 z 1 |
Wstęp
W dzisiejszym świecie wszelkiego rodzaju komputery wymieniają informacje za pośrednictwem sieci. Podstawą każdej sieci komputerowej są fizyczne połączenia między urządzeniami (np. komputerami), czyli tzw. peery. Te połączenia nazywane są linkami i stanowią najbardziej podstawowe połączenia między dwoma różnymi urządzeniami w sieci. Połączenia można nawiązywać za pomocą różnych mediów, takich jak kable miedziane, światłowody, fale radiowe lub lasery.
Każde połączenie odbywa się za pośrednictwem interfejsu w urządzeniu. Każde urządzenie może mieć wiele interfejsów, a tym samym być połączone za pomocą kilku łączy. Poprzez te łącza komputery mogą tworzyć sieć; niewielką grupę urządzeń, które mogą łączyć się bezpośrednio ze sobą. Na całym świecie jest wiele przykładów takich sieci. Aby móc komunikować się poza zasięgiem takiej sieci i warstwy łącza sieci, urządzenia te potrzebują tzw. routerów. Pomyśl o sieciach warstwy łącza jako o wyspach połączonych mostami. Mosty są to właśnie routery, przez które informacje muszą podróżować z urządzenia na jednej wyspie, aby dotrzeć do innego urządzenia znajdującego się na odległej wyspie.
Ten model prowadzi do kilku różnych warstw sieci:
- Link Layer (Warstwa łączy danych)
-
Obsługuje komunikację pomiędzy bezpośrednio podłączonymi urządzeniami.
- Network Layer (Warstwa sieci)
-
Kontroluje routing poza poszczególnymi sieciami i unikalne adresowanie urządzeń poza pojedynczą siecią warstwy łącza.
- Application Layer (Warstwa aplikacji)
-
Umożliwia łączenie się ze sobą poszczególnych programów.
Kiedy po raz pierwszy je wynaleziono, sieci komputerowe wykorzystywały te same metody komunikacji, co telefony, ponieważ połączenia opierały się na komutacji obwodów. Oznacza to, że trzeba było utworzyć dedykowane i bezpośrednie połączenie między dwoma węzłami sieci, aby mogły się komunikować. Ta metoda działała dobrze, ale wymagała pełnej przepustowości łącza, aby tylko te dwa hosty mogły się komunikować.
Od pewnego momentu sieci komputerowe przeszły na tak zwane przełączanie pakietów (komutację pakietów). W tej metodzie dane są opatrzone nagłówkiem, który zawiera informacje o tym, skąd te dane pochodzą i dokąd zmierzają. Rzeczywiste informacje o treści znajdują się w ramce i są wysyłane przez połączenie do odbiorcy określonego w nagłówku ramki. Pozwala to wielu urządzeniom współdzielić jedno łącze i komunikować się prawie jednocześnie.
Warstwa łącza danych (Link Layer Networking)
Zadaniem każdego pakietu jest przesłanie informacji ze źródła do miejsca docelowego za pośrednictwem połączenia między dwoma urządzeniami. Urządzenia te potrzebują sposobu na identyfikację siebie nawzajem i to jest celem adresu warstwy łącza danych. W sieci Ethernet adresy MAC (Media Access Control) służą do identyfikacji poszczególnych urządzeń. Adres MAC składa się z 48 bitów. Nie są one globalne i dlatego nie nadają się do adresowania urządzeń poza bieżącym łączem. Dlatego te adresy nie mogą być używane do przekazywania pakietów do innych łączy. Odbiorca pakietu sprawdza, czy adres docelowy jest zgodny z jego własną warstwą łącza, a jeśli tak, przetwarza pakiet. W przeciwnym przypadku pakiet zostanie odrzucony. Wyjątkiem od tej reguły są pakiety rozgłoszeniowe (broadcast packets). Są to pakiety wysyłane do wszystkich w danej sieci lokalnej, które są zawsze akceptowane przez odbiorców.
Polecenie ip link show
wyświetla listę wszystkich dostępnych interfejsów sieciowych i ich adresów warstwy łącza, a także inne informacje o maksymalnym rozmiarze pakietu:
$ ip link show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 00:0c:29:33:3b:25 brd ff:ff:ff:ff:ff:ff
Powyższe dane wyjściowe pokazują, że urządzenie ma dwa interfejsy: lo
oraz ens33
. Interfejs lo
jest interfejsem zwrotnym (loopback device) i posiada adres MAC 00:00:00:00:00:00
, natomiast interfejs ens33
jest interfejsem ethernet i posiada adres MAC 00:0c:29:33:3b:25
.
Sieci IPv4
Aby odwiedzać strony internetowe, takie jak Google czy Twitter, sprawdzać wiadomości e-mail lub zezwalać firmom na łączenie się ze sobą, pakiety muszą mieć możliwość przemieszczania się z jednej warstwy sieci łącza do innej. Często sieci te są połączone tylko pośrednio poprzez kilka pośrednich sieci, przez które pakiety muszą przejść, aby dotrzeć do miejsca docelowego.
Adresów tej warstwy nie można używać poza tą konkretną siecią warstwy łącza danych. Ponieważ adres ten nie ma znaczenia dla urządzeń w innych sieciach, do realizacji routingu wymagane są globalnie unikalne adresy. Podobnie jak ogólna koncepcja routingu, ten schemat adresowania jest zaimplementowany przy użyciu protokołu internetowego IP (Internet Protocol).
Note
|
Protokół to zestaw procedur i procesów, aby wszystkie strony postępujące zgodnie z protokołem były ze sobą kompatybilne. Protokół można postrzegać jako definicję normy. W informatyce protokół internetowy jest ogólnie przyjętym standardem uzgodnionym przez wszystkich, dzięki czemu różne urządzenia różnych producentów mogą się ze sobą bez problemów komunikować. |
Adresacja IPv4
Adresy IP, podobnie jak adresy MAC, są sposobem określenia, skąd pochodzi pakiet danych i dokąd zmierza. IPv4 był oryginalnym protokołem. Adresy IPv4 posiadają 32 bity, co daje teoretyczną maksymalną liczbę 4 294 967 296 adresów. Jednak liczba tych adresów używanych przez urządzenia jest znacznie mniejsza, ponieważ niektóre zakresy są zarezerwowane dla specjalnych zastosowań, takich jak adresy broadcast (to adresy rozgłoszeniowe, z którymi można dotrzeć do wszystkich urządzeń w danej sieci), adresy multicast (podobne do adresów rozgłoszeniowych, z którymi można dotrzeć do wydzielonej grupy urządzeń w danej sieci) lub adresy zarezerwowane do użytku prywatnego.
W formacie czytelnym dla człowieka, adresy IPv4 są zapisywane jako cztery liczby oddzielone kropką. Każda cyfra może zawierać się w zakresie od 0
do 255
, np.
192.168.0.1
Z technicznego punktu widzenia, każda z tych cyfr reprezentuje osiem pojedynczych bitów. Zatem ten adres można również zapisać w ten sposób:
11000000.10101000.00000000.00000001
W praktyce stosuje się notację dziesiętną, jak pokazano powyżej, ponieważ jest bardziej przyjazna dla ludzi. Jednakże reprezentacja bitowa jest nadal ważna dla zrozumienia działania podsieci.
Podsieci IPv4
W celu obsługi routingu, adresy IP można podzielić na dwie części: część sieciową i część hosta. Część sieciowa identyfikuje sieć, w której znajduje się urządzenie, i służy do przekazywania pakietów do tej sieci. Część hosta służy do identyfikacji określonego urządzenia w sieci i przekazywania pakietu do określonego odbiorcy, gdy tylko będzie on osiągalny w tej sieci.
Ale jak podzielić te adresy na część sieciową i część hosta? Rozwiązaniem jest użycie maski podsieci. Tak zwana maska podsieci określa, gdzie ten podział ma miejsce. Rozważmy ponownie binarną reprezentację adresu IP z poprzedniego przykładu:
11000000.10101000.00000000.00000001
Dla tego adresu IP maska podsieci ustawia każdy bit należący do części sieciowej na 1
, a każdy bit należący do części hosta na 0
:
11111111.11111111.11111111.00000000
W praktyce maska sieci jest zapisywana w notacji dziesiętnej:
255.255.255.0
Oznacza to, że zakres tej sieci wynosi od 192.168.0.0
do 192.168.0.255
. Zauważ, że pierwsze trzy liczby, które mają wszystkie bity ustawione w masce sieci na 1
, pozostają niezmienione w adresach IP.
Wreszcie istnieje alternatywna notacja maski podsieci, która nazywa się bezklasowym routingiem między domenami CIDR (Classless Inter-Domain Routing). Ten zapis wskazuje tylko, ile bitów jest ustawionych w masce podsieci i dodaje tę liczbę do adresu IP. W tym przykładzie 24 z 32 bitów w masce podsieci są ustawione na 1
, co jest wyrażone w notacji CIDR jako 192.168.0.1/24
.
Prywatne adresy IPv4
Jak wspomniano wcześniej, niektóre adresy IPv4 są zarezerwowane dla specjalnych zastosowań. Jednym z tych przypadków użycia jest wykorzystanie ich jako adresów prywatnych. Do prywatnych adresów IP należą sieci:
-
10.0.0.0/8
-
172.16.0.0/12
-
192.168.0.0/16
Adresy z tych podsieci mogą być używane przez każdego. Jednakże adresy z tych podsieci nie mogą być routowane w publicznym Internecie, ponieważ wiele prywatnych sieci korzysta z nich w tym samym czasie.
Obecnie większość sieci używa tych adresów wewnętrznych. Umożliwiają one komunikację wewnętrzną bez przypisywania adresu zewnętrznego. Większość dzisiejszych połączeń internetowych ma tylko jeden zewnętrzny adres IPv4. Podczas przekazywania pakietów do Internetu, wykorzystywane są routery, które mapują wszystkie adresy wewnętrzne na pojedynczy zewnętrzny adres IP. Nazywa się to translacją adresów sieciowych NAT (Network Address Translation). Specjalny przypadek NAT, w którym router odwzorowuje adresy wewnętrzne na pojedynczy zewnętrzny adres IP, jest czasami nazywany maskaradą. Dzięki temu dowolne urządzenie w sieci wewnętrznej może nawiązywać nowe połączenia z dowolnym globalnym adresem IP w Internecie.
Note
|
W przypadku maskarady nie można odwoływać się do urządzeń wewnętrznych z Internetu, ponieważ nie mają one poprawnego globalnego adresu. Nie jest to jednak funkcja zabezpieczająca. Nawet, jeśli używasz maskarady, nadal potrzebna jest zapora ogniowa. |
Konfiguracja adresu IPv4
Istnieją dwa główne sposoby konfiguracji adresów IPv4 na komputerze. Można przypisywać adresy ręcznie lub w sposób automatyczny, wykorzystując Protokoł Dynamicznej Konfiguracji Hosta DHCP (Dynamic Host Configuration Protocol).
Podczas korzystania z protokołu DHCP, to centralny serwer kontroluje, które adresy IP są przekazywane do poszczególnych urządzeń. Serwer może również dostarczać urządzeniom inne informacje o sieci, takie jak adresy IP serwerów DNS, adres IP domyślnego routera lub, w przypadku bardziej skomplikowanych konfiguracji, uruchamiać system operacyjny z sieci. W wielu systemach protokół DHCP jest domyślnie włączony, więc prawdopodobnie masz już adres IP, jeśli jesteś podłączony do sieci.
Adresy IP można również przypisać do interfejsu ręcznie za pomocą polecenia ip addr add
. Tutaj dodajemy adres 192.168.0.5
do interfejsu ens33
. Sieć używa maski sieci 255.255.255.0
, która odpowiada /24
w notacji CIDR:
$ sudo ip addr add 192.168.0.5/255.255.255.0 dev ens33
Teraz użyjemy polecenia ip addr show
, aby sprawdzić, czy adres został przypisany:
$ ip addr show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 25: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:0c:29:33:3b:25 brd ff:ff:ff:ff:ff:ff inet 192.168.0.5/24 192.168.0.255 scope global ens33 valid_lft forever preferred_lft forever inet6 fe80::010c:29ff:fe33:3b25/64 scope link noprefixroute valid_lft forever preferred_lft forever
Powyższe dane wyjściowe pokazują zarówno interfejs lo
, jak i interfejs ens33
z adresem przypisanym powyższym poleceniem.
Aby zweryfikować dostępności urządzenia w sieci, można użyć polecenia ping
. Polecenie to wysyła specjalny typ wiadomości, zwany echo request, w którym nadawca prosi odbiorcę o odpowiedź. Jeżeli połączenie między dwoma urządzeniami może zostać pomyślnie nawiązane, odbiorca odeśle odpowiedź echo, weryfikując w ten sposób połączenie:
$ ping -c 3 192.168.0.1 PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data. 64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=2.16 ms 64 bytes from 192.168.0.1: icmp_seq=2 ttl=64 time=1.85 ms 64 bytes from 192.168.0.1: icmp_seq=3 ttl=64 time=3.41 ms --- 192.168.0.1 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 5ms rtt min/avg/max/mdev = 1.849/2.473/3.410/0.674 ms
Parametr -c 3
powoduje zatrzymanie polecenia ping
po wysłaniu trzech żądań echa. W przeciwnym razie ping
będzie działał w nieskończoność i musi zostać zatrzymany przez naciśnięcie Ctrl+C.
Routing IPv4
Routing to proces, w którym pakiet dociera z sieci źródłowej do sieci docelowej. Każde urządzenie posiada tabelę routingu, która zawiera informacje o tym, jak można dotrzeć do sieci docelowej. Podczas nawiązywania połączenia urządzenie wyszukuje adres IP miejsca docelowego w swojej tablicy routingu. Jeśli wpis jest zgodny z adresem, pakiet jest wysyłany do odpowiedniej sieci warstwy łącza lub przekazywany do routera określonego w tabeli routingu.
W przypadku braku wpisu w tabeli routingu, urządzenie przesyła pakiety do routera z wykorzystaniem trasy domyślnej. Trasa domyślna (default route) określa ścieżkę do routera, który odbiera wszystkie pakiety nie pasujące do żadnej trasy wskazanej przez urządzenie źródłowe.
Routery utrzymują swoje tablice routingu. Podczas odbierania pakietu router wyszukuje adres docelowy we własnej tablicy routingu i wysyła pakiet do następnego routera, co jest powtarzane, aż pakiet dotrze do routera w sieci docelowej. Każdy router biorący udział w tej podróży jest nazywany hop. Ostatni router znajduje bezpośrednie połączenie z adresem docelowym w swojej tablicy routingu i wysyła pakiety do interfejsu docelowego.
Większość sieci domowych ma tylko jedno wyjście. Na ogół jest to pojedynczy router od dostawcy usług internetowych ISP (Internet Service Provider). W takim przypadku urządzenie w sieci domowej po prostu przekazuje wszystkie pakiety, które nie są przeznaczone dla sieci wewnętrznej, bezpośrednio do routera domowego, który następnie wysyła je do routera dostawcy w celu dalszego przekazania. To jest przykład trasy domyślnej.
Polecenie ip route show
wyświetla aktualną tablicę routingu IPv4:
$ ip route show 127.0.0.0/8 via 127.0.0.1 dev lo0 192.168.0.0/24 dev ens33 scope link
Aby dodać trasę domyślną, wystarczy wewnętrzny adres routera, który będzie bramą domyślną. Na przykład, jeśli router ma adres 192.168.0.1
, to poniższe polecenie ustawi ten adres jako trasę domyślną:
$ sudo ip route add default via 192.168.0.1
Aby to sprawdzić, uruchom ponownie polecenie ip route show
:
$ ip route show default via 192.168.0.1 dev ens33 127.0.0.0/8 via 127.0.0.1 dev lo0 192.168.0.0/24 dev ens33 scope link
Sieć IPv6
Protokół IPv6 został zaprojektowany, aby zaradzić niedociągnięciom protokołu IPv4, głównie brakowi adresów IP, ponieważ coraz więcej urządzeń było włączanych do sieci. Jednak IPv6 posiada również inne funkcje, takie jak nowe protokoły do automatycznej konfiguracji sieci. Zamiast 32 bitów na adres, protokół IPv6 używa 128 bitów. Pozwala to na uzyskanie około 2128 adresów (około 340 sekstylionów adresów). Jednak, podobnie jak w przypadku IPv4, liczba globalnie unikalnych adresów użytecznych jest znacznie mniejsza, ponieważ część z nich jest zarezerwowana do innych zastosowań specjalnych. Mimo tego, tak duża liczba adresów IPv6 oznacza, że obecnie i w przyszłości istnieje więcej niż wystarczająca liczba publicznych adresów IP przeznaczonych dla każdego urządzenia podłączonego do Internetu. To z kolei zmniejsza potrzebę maskarady i problemów z nią związanych, takich jak opóźnienie translacji i ograniczenie możliwości bezpośredniego łączenia się z zamaskowanymi urządzeniami.
Adresacja IPv6
Adresy IPv6 składają się z 8 grup po 4 cyfry szesnastkowe, każda oddzielona dwukropkiem:
2001:0db8:0000:abcd:0000:0000:0000:7334
Note
|
Cyfry szesnastkowe mieszczą się w zakresie od |
Aby uprościć protokół, wiodące zera z każdej grupy można usunąć podczas zapisywania, jednak każda grupa musi zawierać co najmniej jedną cyfrę:
2001:db8:0:abcd:0:0:0:7334
Jeśli kilka grup zawierających tylko zera następuje bezpośrednio po sobie, można je całkowicie zastąpić '::':
2001:db8:0:abcd::7334
Jest to jednak dozwolone tylko raz w każdym adresie IPv6.
Prefix IPv6
Pierwsze 64 bity adresu IPv6 nazywane są prefiksem routingu. Prefiks jest używany przez routery do określenia, do której sieci należy urządzenie, a tym samym, którą ścieżką w tablicy routingu mają zostać przesłane dane. Podsieci zawsze wystepują w prefiksie. Dostawcy usług internetowych zwykle przypisują swoim klientom prefiksy /48 lub /58, tak aby pozostało im 16 lub 8 bitów na wewnętrzne podsieci.
Istnieją trzy główne typy prefiksów w IPv6:
- Unikalne Adresy Globalne (Global Unique Address)
-
Prefiks jest przypisywany z bloków zarezerwowanych dla adresów globalnych. Adresy te obowiązują w całym internecie.
- Unikalne Adresy LOkalne (Unique Local Address)
-
Są niedozwolone w Internecie. Mogą jednak być używane wewnętrznie w ramach organizacji. Te adresy są używane w sieci, aby zapewnić urządzeniom adres, nawet jeśli nie są połączone z Internetem. Są one odpowiednikiem zakresów adresów prywatnych IPv4. Pierwsze 8 bitów to zawsze
fc
lubfd
, po których następuje 40 losowo generowanych bitów. - Adresy Lokalne (Link Local Address)
-
Są ważne tylko dla określonego linku. Każdy interfejs sieciowy obsługujący IPv6 ma jeden taki adres, zaczynający się od
fe80
. Adresy te są używane wewnętrznie przez protokół IPv6 do uzyskiwania dodatkowych adresów przy użyciu automatycznej konfiguracji i wyszukiwania innych komputerów w sieci za pośrednictwem protokołu Neighbor Discovery.
Identyfikator interfejsu IPv6
, Podczas gdy prefiks określa, w której sieci znajduje się urządzenie, identyfikator interfejsu służy do wyświetlania listy urządzeń w sieci. Ostatnie 64 bity adresu IPv6 tworzą identyfikator interfejsu, podobnie jak ostatnie bity adresu IPv4.
W przypadku ręcznego przypisywania adresu IPv6, identyfikator interfejsu jest ustawiany jako część adresu. W przypadku korzystania z automatycznej konfiguracji adresu, identyfikator interfejsu jest wybierany losowo lub wyprowadzany z adresu warstwy łącza danych urządzenia. Powoduje to, że w adresie IPv6 pojawia się zmiana adresu warstwy łącza danych.
Konfiguracja adresu IPv6
Podobnie jak w przypadku adresów IPv4, adres IPv6 można przypisać ręcznie lub automatycznie. Jednak protokół IPv6 oferuje dwa różne typy automatycznej konfiguracji: DHCPv6 i bezstanową automatyczną konfigurację adresu SLAAC (Stateless Address Autoconfiguration).
SLAAC to łatwiejsza z dwóch zautomatyzowanych metod. Jest bezpośrednio zintegrowana ze standardem IPv6. Urządzenia wykorzystują nowy protokół NDP (Neighbor Discovery Protocol), który umożliwia wzajemne odnajdywanie się i żądanie informacji dotyczących sieci. Wiadomości te są wysyłane przez routery i mogą zawierać prefiksy IPv6, których urządzenia mogą używać, łącząc je z wybranym przez siebie identyfikatorem interfejsu, o ile wynikowy adres nie jest jeszcze używany. Urządzenia nie przekazują routerowi informacji zwrotnej o faktycznych adresach, które utworzyły.
Z drugiej strony, protokół DHCPv6 to zaktualizowany protokół DHCP, który jest zgodny ze zmianami w IPv6. Pozwala na lepszą kontrolę nad informacjami przekazywanymi klientom, na przykład możliwość przypisywania zawsze tego samego adresu do tego samego klienta i wysyłanie klientowi większej liczby opcji niż SLAAC. W przypadku protokołu DHCPv6 klienci muszą uzyskać wyraźną zgodę serwera DHCP, aby używać adresu.
Procedura ręcznego przypisywania adresu IPv6 do interfejsu jest taka sama, jak w przypadku protokołu IPv4:
$ sudo ip addr add 2001:db8:0:abcd:0:0:0:7334/64 dev ens33
Aby upewnić się, że przypisanie adresu IPv6 się powiodło, używane jest to samo polecenie ip addr show
:
$ ip addr show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 25: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:0c:29:33:3b:25 brd ff:ff:ff:ff:ff:ff inet 192.168.0.5/24 192.168.0.255 scope global ens33 valid_lft forever preferred_lft forever inet6 fe80::010c:29ff:fe33:3b25/64 scope link noprefixroute valid_lft forever preferred_lft forever inet6 2001:db8:0:abcd::7334/64 scope global valid_lft forever preferred_lft forever
Tutaj również widzimy adres link-local fe80::010c:29ff:fe33:3b25/64
.
Podobnie jak w przypadku protokołu IPv4, polecenie ping
może również służyć do potwierdzania dostępności urządzeń za pośrednictwem protokołu IPv6:
$ ping 2001:db8:0:abcd::1 PING 2001:db8:0:abcd::1(2001:db8:0:abcd::1) 56 data bytes 64 bytes from 2001:db8:0:abcd::1: icmp_seq=1 ttl=64 time=0.030 ms 64 bytes from 2001:db8:0:abcd::1: icmp_seq=2 ttl=64 time=0.040 ms 64 bytes from 2001:db8:0:abcd::1: icmp_seq=3 ttl=64 time=0.072 ms --- 2001:db8:0:abcd::1 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 43ms rtt min/avg/max/mdev = 0.030/0.047/0.072/0.018 ms
Note
|
W niektórych systemach Linux |
Aby jeszcze raz zweryfikować adres link-local, ponownie użyj polecenia ping
. Ponieważ jednak wszystkie interfejsy używają przedrostka fe80::/64
, zatem należy podać poprawny interfejs wraz z adresem:
$ ping6 -c 1 fe80::010c:29ff:fe33:3b25%ens33 PING fe80::010c:29ff:fe33:3b25(fe80::010c:29ff:fe33:3b25) 56 data bytes 64 bytes from fe80::010c:29ff:fe33:3b25%ens33: icmp_seq=1 ttl=64 time=0.049 ms --- fe80::010c:29ff:fe33:3b25 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.049/0.049/0.049/0.000 ms
DNS
Adresy IP są trudne do zapamiętania i dlatego nie są efektywne, gdy próbujesz reklamować i sprzedać usługę lub produkt. W tym miejscu do gry wkracza System Nazw Domen DNS (Domain Name System). W najprostszej postaci DNS to rozproszona książka telefoniczna, która przekształca przyjazne, łatwo zapadające w pamięć nazwy domen, takie jak example.com
na adresy IP. Na przykład, gdy użytkownik przechodzi do witryny internetowej, wprowadza nazwę hosta DNS jako część adresu URL. Następnie przeglądarka internetowa wysyła nazwę DNS do dowolnego skonfigurowanego programu rozpoznawania nazw DNS, tzw. resolvera DNS. Ten resolver DNS z kolei znajdzie adres IP, który jest powiązany z tą domeną. Następnie resolver odpowiada tym adresem, a przeglądarka internetowa próbuje połączyć się z serwerem WWW pod tym adresem IP.
Resolvery, których używa system Linux do wyszukiwania danych DNS, są skonfigurowane w pliku konfiguracyjnym /etc/resolv.conf
.
$ cat /etc/resolv.conf search lpi nameserver 192.168.0.1
Kiedy program tłumaczący wyszukuje nazwę, najpierw sprawdza plik /etc/hosts
, aby zobaczyć, czy zawiera on adres dla żądanej nazwy. Jeśli tak, zwraca ten adres i nie kontaktuje się z serwerem DNS. Dzięki temu administratorzy sieci mogą zapewniać rozpoznawanie nazw bez konieczności konfigurowania całego serwera DNS. Każdy wiersz w tym pliku zawiera jeden adres IP, po którym następuje co najmniej jedna nazwa:
127.0.0.1 localhost.localdomain localhost ::1 localhost.localdomain localhost 192.168.0.10 server 2001:db8:0:abcd::f server
Aby przeprowadzić wyszukiwanie w DNS, użyj polecenia host
:
$ host learning.lpi.org learning.lpi.org has address 208.94.166.198
Bardziej szczegółowe informacje można uzyskać za pomocą polecenia dig
:
$ dig learning.lpi.org ; <<>> DiG 9.14.3 <<>> learning.lpi.org ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21525 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ; COOKIE: 2ac55879b1adef30a93013705d3306d2128571347df8eadf (bad) ;; QUESTION SECTION: ;learning.lpi.org. IN A ;; ANSWER SECTION: learning.lpi.org. 550 IN A 208.94.166.198 ;; Query time: 3 msec ;; SERVER: 192.168.0.1#53(192.168.0.1) ;; WHEN: Sat Jul 20 14:20:21 EST 2019 ;; MSG SIZE rcvd: 89
Tutaj widzimy również nazwy typów rekordów DNS, w tym przypadku typ A
dla adresu IPv4.
Gniazda (Sockets)
Gniazdo jest punktem końcowym komunikacji dla dwóch programów, które komunikują się ze sobą. Gdy gniazdo jest połączone przez sieć, programy mogą działać na różnych urządzeniach, takich jak przeglądarka internetowa uruchomiona na laptopie użytkownika i serwer sieciowy pracujący w firmowym centrum danych.
Istnieją trzy główne typy gniazd:
- Gniazda Unix (Unix Sockets)
-
Pozwalają połączyć procesy działające na tym samym urządzeniu.
- Gniazda UDP (User Datagram Protocol Sockets)
-
Pozwalają łączyć aplikacje przy użyciu protokołu, który jest szybki, ale nie jest odporny.
- Gniazda TCP (Transmission Control Protocol Sockets)
-
Są bardziej niezawodne niż gniazda UDP i na przykład potwierdzają odbiór danych.
Gniazda Unix mogą łączyć tylko aplikacje działające na tym samym urządzeniu. Jednak gniazda TCP i UDP mogą łączyć się przez sieć. Protokół TCP umożliwia przesyłanie strumienia danych, które zawsze docierają do odbiorcy w dokładnie takiej samej kolejności, w jakiej zostały wysłane. Protokół UDP jest bardziej zasadą “wyślij i zapomnij”, tzn. pakiet jest wysyłany, ale dostarczenie go do odbiorcy nie jest gwarantowane. Jednak UDP nie ma takiego narzutu w pakietach jak TCP, co czyni go idealnym do wykorzystania w telefonii internetowej VoIP (Voice over IP) lub aplikacjach o małych opóźnieniach, takich jak internetowe gry wideo.
Protokoły TCP i UDP używają portów do adresowania wielu gniazd na tym samym adresie IP. Chociaż port źródłowy połączenia jest zwykle losowy, porty docelowe są ustandaryzowane dla określonej usługi. Na przykład protokół HTTP jest zwykle obsługiwany na porcie 80, a HTTPS na porcie 443. Protokół SSH, służący do bezpiecznego logowania się do zdalnego systemu Linux, znajduje się na porcie 22.
Polecenie ss
umożliwia administratorowi sprawdzenie wszystkich gniazd na komputerze z systemem Linux. Pokazuje wszystko, począwszy od adresu źródłowego, przez adres docelowy, po typ. Jedną z jego najlepszych cech jest użycie filtrów, dzięki którym użytkownik może monitorować gniazda w dowolnym stanie połączenia. Polecenie ss
można uruchomić z wieloma opcjami, a także z wyrażeniem filtrującym, aby ograniczyć wyświetlane informacje.
Jeśli polecenie jest wykonywane bez opcji, wówczas wyświetla listę wszystkich skonfigurowanych gniazd. Używając opcji -p
wyświetlimy informacje o procesie używającym każdego gniazda, a opcja –s
wyświetli podsumowanie gniazd. Jest o wiele więcej dostępnych opcji dla narzędzia ss
, z których -4
oraz -6
należą do najważniejszych, ponieważ zawężają protokół IP odpowiednio do IPv4 i IPv6. Opcje -t
oraz -u
pozwalają administratorowi wybrać gniazda TCP lub UDP, a opcja -l
wyświetla tylko gniazda, które oczekują na nowe połączenia.
Na przykład poniższe polecenie wyświetla listę wszystkich aktualnie używanych gniazd TCP:
$ ss -t State Recv-Q Send-Q Local Address:Port Peer Address:Port ESTAB 0 0 192.168.0.5:49412 192.168.0.1:https ESTAB 0 0 192.168.0.5:37616 192.168.0.1:https ESTAB 0 0 192.168.0.5:40114 192.168.0.1:https ESTAB 0 0 192.168.0.5:54948 192.168.0.1:imap ...
Ćwiczenia z przewodnikiem
-
Inżynier sieciowy jest proszony o przypisanie dwóch adresów IP do interfejsu
ens33
hosta, jednego adresu IPv4 (192.168.10.10/24
) i jednego adresu IPv6 (2001:0:0:abcd:0:8a2e:0370:7334/64
). Jakie polecenia musisz wpisać, aby to osiągnąć? -
Które adresy z poniższej listy są prywatne?
192.168.10.1
120.56.78.35
172.16.57.47
10.100.49.162
200.120.42.6
-
Jaki wpis należy dodać do pliku
hosts
, aby przypisać adres192.168.0.15
do domenyexample.com
? -
Jaki efekt będzie po wykonaniu poniższego polecenia?
sudo ip -6 route add default via 2001:db8:0:abcd::1
Ćwiczenia eksploracyjne
-
Nazwij typ rekordu DNS, który obsługuje następujące zapytania:
-
Dane tekstowe
-
Odwrotne wyszukiwanie adresu IP
-
Domenę, która nie ma własnego adresu i korzysta z innej domeny w zakresie tych informacji
-
Serwer poczty elektronicznej (serwer pocztowy)
-
-
Linux ma funkcję zwaną mostkowaniem (bridging). Do czego służy ta funkcja i jak ją można wykorzystać?
-
Z jaką opcją należy uruchomić polecenie
ss
, aby wyświetlić wszystkie ustanowione gniazda UDP? -
Które polecenie wyświetla podsumowanie wszystkich gniazd działających na urządzeniu z systemem Linux?
-
Poniższe dane wyjściowe są generowane przez polecenie z poprzedniego ćwiczenia. Ile gniazd TCP i UDP jest aktywnych?
Total: 978 (kernel 0) TCP: 4 (estab 0, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 0 Transport Total IP IPv6 * 0 - - RAW 1 0 1 UDP 7 5 2 TCP 4 3 1 INET 12 8 4 FRAG 0 0 0
Podsumowanie
W tej lekcji omówiono połączenie komputera z systemem Linux z siecią. Najpierw dowiedzieliśmy się o różnych poziomach sieci:
-
Warstwa łącza danych, która łączy urządzenia bezpośrednio ze sobą w tej samej podsieci.
-
Warstwa sieciowa, która zapewnia routing między sieciami i globalną przestrzenią adresową.
-
Warstwa aplikacji, w której aplikacje mogą się ze sobą łączyć za pośrednictwem sieci.
Widzieliśmy, jak IPv4 i IPv6 są używane do adresowania poszczególnych komputerów oraz jak protokoły TCP i UDP wykorzystują gniazda używane przez aplikacje do łączenia się ze sobą. Dowiedzieliśmy się również, w jaki sposób DNS jest używany do przekształcania nazw na adresy IP.
Komendy wykorzystywane w ćwiczeniach:
dig
-
Przeszukuje informacje DNS i dostarcza szczegółowych informacji o zapytaniach i odpowiedziach DNS.
host
-
Przeszukuje informacje DNS i dostarcza skondensowane dane wyjściowe.
ip
-
Służy do konfiguracji sieci w systemie Linux, w tym interfejsów sieciowych, adresów i routingu.
ping
-
Testuje połączenie ze zdalnym urządzeniem.
ss
-
Wyświetla informacje o gniazdach.
Odpowiedzi do ćwiczeń z przewodnikiem
-
Inżynier sieciowy jest proszony o przypisanie dwóch adresów IP do interfejsu
ens33
hosta, jednego adresu IPv4 (192.168.10.10/24
) i jednego adresu IPv6 (2001:0:0:abcd:0:8a2e:0370:7334/64
). Jakie polecenia musisz wpisać, aby to osiągnąć?sudo ip addr add 192.168.10.10/24 dev ens33 sudo ip addr add 2001:0:0:abcd:0:8a2e:0370:7334/64 dev ens33
-
Które adresy z poniższej listy są prywatne?
192.168.10.1
X
120.56.78.35
172.16.57.47
X
10.100.49.162
X
200.120.42.6
-
Jaki wpis należy dodać do pliku
hosts
, aby przypisać adres192.168.0.15
do domenyexample.com
?192.168.0.15 example.com
-
Jaki efekt będzie po wykonaniu poniższego polecenia?
sudo ip -6 route add default via 2001:db8:0:abcd::1
Dodaje domyślną trasę do tabeli, która wysyła cały ruch IPv6 do routera z wewnętrznym adresem IPv6
2001:db8:0:abcd::1
.
Odpowiedzi do ćwiczeń eksploracyjnych
-
Nazwij typ rekordu DNS, który obsługuje następujące zapytania:
-
Dane tekstowe
TXT
-
Odwrotne wyszukiwanie adresu IP
PTR
-
Domenę, która nie ma własnego adresu i korzysta z innej domeny w zakresie tych informacji
CNAME
-
Serwer poczty elektronicznej (serwer pocztowy)
MX
-
-
Linux ma funkcję zwaną mostkowaniem (bridging). Do czego służy ta funkcja i jak ją można wykorzystać?
Most łączy wiele interfejsów sieciowych. Wszystkie interfejsy podłączone do mostu mogą komunikować się tak, jakby były podłączone do tej samej podsieci. Wszystkie urządzenia używają adresów IP z tej samej podsieci i nie potrzebują routera do łączenia się ze sobą.
-
Z jaką opcją należy uruchomić polecenie
ss
, aby wyświetlić wszystkie ustanowione gniazda UDP?Opcja
-u
wyświetla wszystkie ustanowione gniazda UDP. -
Które polecenie wyświetla podsumowanie wszystkich gniazd działających na urządzeniu z systemem Linux?
Polecenie
ss -s
wyświetla podsumowanie wszystkich gniazd. -
Poniższe dane wyjściowe są generowane przez polecenie z poprzedniego ćwiczenia. Ile gniazd TCP i UDP jest aktywnych?
Total: 978 (kernel 0) TCP: 4 (estab 0, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 0 Transport Total IP IPv6 * 0 - - RAW 1 0 1 UDP 7 5 2 TCP 4 3 1 INET 12 8 4 FRAG 0 0 0
Aktywnych jest 11 gniazd TCP oraz UDP.