Różnice między wybraną wersją a wersją aktualną.
— |
bio-psiec:podstawowa_konf_i_l1_l2 [2025/10/07 21:08] (aktualna) jkonczak utworzono |
||
---|---|---|---|
Linia 1: | Linia 1: | ||
+ | ===== Poruszanie się w konsoli i czytanie pomocy ===== | ||
+ | |||
+ | ==== Powłoka systemowa – szybkie przypomnienie ==== | ||
+ | (Tekstowa) powłoka systemowa (shell), terminal, konsola.\\ | ||
+ | Programy np. ''xfce4-terminal'', ''konsole'' | ||
+ | |||
+ | Zmiana użytkownika – ''su'' \\ | ||
+ | <small> | ||
+ | Wykonania programu na prawach innego użytkownika – ''sudo //polecenie//'' \\ | ||
+ | Użycie ''sudo'' do uruchomienia shella z prawami roota: ''sudo -s'' (lub ''sudo -i'' lub ''sudo su'') | ||
+ | </small> | ||
+ | |||
+ | Historia w konsoli: strzałki góra/dół, ''history'', ctrl+r, ''fc'' | ||
+ | |||
+ | Obsługa polecenia ''less'' (wykonaj dla przykładu: ''convert -h | less'' albo ''man less''): | ||
+ | * przewianie: strzałki, page up / page down | ||
+ | * ''/'' – wyszukuje: | ||
+ | * ''n'' – następne wystąpienie | ||
+ | * ''N'' – poprzednie | ||
+ | * ''g'' – początek dokumentu; ''G'' – koniec | ||
+ | * ''q'' – wyjście | ||
+ | |||
+ | ==== Zapis poleceń ==== | ||
+ | |||
+ | Wzór polecenia ([[https://docs.microsoft.com/pl-pl/windows-server/administration/windows-commands/command-line-syntax-key|zwięzłe wyjaśnienie]]):\\ | ||
+ | ''polecenie {jeden|z|wielu} <argument1> [-opcja1 <argument2>] --długa_opcja=<argument3> [opcja2]'' | ||
+ | |||
+ | Przykład polecenia:\\ | ||
+ | ''polecenie jeden //42// [-opcja1 //foo//] --długa_opcja=//x//'' | ||
+ | |||
+ | Co trzeba wpisać w konsolę:\\ | ||
+ | ''polecenie jeden 44 -oja1 baz --długa_opcja=x'' | ||
+ | |||
+ | ==== Pomoc systemowa ==== | ||
+ | |||
+ | Pomoc wbudowana w polecenia zwykle jest wyświetlana po podaniu opcji ''-h'' (lub ''--help''), np: | ||
+ | * ''tracepath -h'' | ||
+ | * ''netstat -h'' | ||
+ | * ''ip a h'' | ||
+ | * ''ifconfig -h'' | ||
+ | |||
+ | Podręcznik systemowy – komenda ''man'' i towarzyszące, np: | ||
+ | * ''man tracepath'' | ||
+ | * ''man ip'' / ''man 7 ip'' / ''man 8 ip'' | ||
+ | * ''apropos'' – lista stron które w tytule mają podane słowo, np. ''apropos network'' | ||
+ | * ''whatis'' – tytuły stron pod podaną nazwą, np. ''whatis write'' | ||
+ | |||
+ | ----- | ||
+ | |||
+ | ===== Programy używane do konfiguracji i diagnostyki sieci w Linuksie ===== | ||
+ | |||
+ | <small> | ||
+ | **Uwaga:** informacje o narzędziach są podane dla wyjaśnienia dlaczego kilka | ||
+ | komend realizuje to samo zadanie i dla uporządkowania wiedzy. Treści z tej | ||
+ | sekcji (listy komend, nazwy paczek narzędzi, etc.) nie będą w żaden sposób | ||
+ | wymagane na wejściówkach/teście. | ||
+ | </small> | ||
+ | |||
+ | Narzędzia: <html><code><b>omawiane</b> | ważne albo popularne | <small>mocno | ||
+ | przestarzałe, mało znane albo zbędne</small></code></html>. | ||
+ | |||
+ | ==== Narzędzia do konfiguracji sieci ==== | ||
+ | |||
+ | Pakiet narzędzi ''[[https://wiki.linuxfoundation.org/networking/net-tools|net-tools]]'' | ||
+ | powstał w 1983 roku, początkowo w systemie BSD. | ||
+ | Od tego czasu jest utrzymywany, jednak większość jego składników jest uznawana | ||
+ | za przestarzałe. \\ | ||
+ | W skład wchodzą: \\ | ||
+ | <html><code><b>arp</b> <small>dnsdomainname domainname</small> hostname | ||
+ | <b>ifconfig</b> <small>ipmaddr</small> iptunnel <small>mii-tool nameif</small> | ||
+ | netstat <small>nisdomainname plipconfig</small> rarp <b>route</b> | ||
+ | <small>slattach ypdomainname</small></code></html> | ||
+ | |||
+ | Około roku 2000 stworzono pakiet | ||
+ | ''[[https://wiki.linuxfoundation.org/networking/iproute2|iproute2]]'', mający | ||
+ | zastąpić ''net-tools'' (i kilka innych, napisanych by udostępnić nowe możliwości | ||
+ | jądra systemu Linux). \\ | ||
+ | Pakiet ''iproute2'' zawiera następujące polecenia: \\ | ||
+ | <html><code><small>arpd ctstat genl ifcfg ifstat</small> <b>ip</b> <small>lnstat | ||
+ | nstat routef routel rtacct rtmon rtpr rtstat</small> ss tc</code></html> | ||
+ | \\ | ||
+ | Pomoc do komendy ''ip'' jest rozbia na wiele stron podręcznika, np. | ||
+ | ''man ip-link'', ''man ip-address'' | ||
+ | |||
+ | ==== Narzędzia do diagostyki ==== | ||
+ | |||
+ | * ''[[https://wiki.linuxfoundation.org/networking/iputils|iputils]]'' - narzędzia <html> | ||
+ | <code><b>arping</b> <small>clockdiff ipg</small> <b>ping</b> ping6 <small>rarpd | ||
+ | rdisc</small> tftpd <b>tracepath</b> tracepath6 traceroute6</code></html> | ||
+ | * ''[[https://www.remlab.net/ndisc6/|ndisc6]]'' - m. inn. ''rdisc6'' i ''ndisc6'' | ||
+ | * ''[[https://traceroute.sourceforge.net/|traceroute]]'', ''[[https://www.bitwizard.nl/mtr/|mtr]]'' | ||
+ | * ''[[https://www.wireshark.org/|wireshark]]'', ''[[https://www.tcpdump.org/|tcpdump]]'' | ||
+ | |||
+ | ----- | ||
+ | |||
+ | ===== Interfejsy sieciowe – włączanie i konfiguracja IP ===== | ||
+ | |||
+ | Karta sieciowa (//NIC – network interface card//) – fizyczne urządzenie do komunikacji sieciowej. \\ | ||
+ | Interfejs sieciowy (//network interface//) – logiczne urządzenie do komunikacji sieciowej. | ||
+ | |||
+ | Interface'y można podzielić na fizyczne (reprezentują fizyczne urządzenia sieciowe) i wirtualne (reszta). | ||
+ | |||
+ | ==== Wyświetlanie listy urządzeń i adresów ==== | ||
+ | |||
+ | | Lista aktywnych urządzeń | ''ifconfig'' | ''ip link show up'' | | ||
+ | | Lista wszystkich urządzeń | ''ifconfig -a'' | ''ip link [show]'' | | ||
+ | | Lista adresów sieciowych | ''ifconfig [-a]'' | ''ip address [show [up]]'' | | ||
+ | |||
+ | Wszystkie argumenty polecenia ''ip'' można dowolnie skracać, ale jeśli skróty | ||
+ | kolidują, narzędzie wybiera jedno rozwinięcie zamiast wyświetlić komunikat | ||
+ | o błędzie (sic!). \\ | ||
+ | Np. ''ip link show'' można zapisać jako ''ip l sh'', ale ''ip l s'' jest już | ||
+ | traktowane jako ''ip link set'' | ||
+ | |||
+ | Polecenie ''ip'' przyjmuje też opcje (podawane bezpośrednio po ''ip''), wśród | ||
+ | których warto znać opcję ''--brief'' (<small>i ''--json''</small>). | ||
+ | \\ | ||
+ | Porównaj: ''ip link'' i ''ip --brief link'' | ||
+ | |||
+ | ==== [ekstra] Tradycyjne nazwy urządzeń ==== | ||
+ | |||
+ | Tradycyjne nazwy urządzeń (zwykle zakończone kolejnym numerem, jak np. ''eth0'') to m. inn.: | ||
+ | * loopback ''lo'' | ||
+ | * przewodowe karty sieciowe ''eth'' | ||
+ | * bezprzewodowe karty sieciowe ''wlan, ath, wifi, radio'' | ||
+ | * ''firewire'', infiniband ''ib'' | ||
+ | * urządzenia wirtualne: wirtualne karty sieciowe ''veth, dummy'', <html> | ||
+ | </html>mostki ''br'', urządzenia programowe ''tun, tap'', <html> | ||
+ | </html>tunele ''sit, tnl, ppp, vpn, gre'' | ||
+ | |||
+ | Około 2015 roku w systemie Linux zmieniono sposób nadawania nazw urządzeniom. \\ | ||
+ | Stąd dla fizycznych interfejsów można spotkać nazwy: ''eno1, sls1, wwp2s0, wlx78e7d1ea46da'' | ||
+ | |||
+ | <small> | ||
+ | Wcześniej to, która karta sieciowa dostanie który numer (eth0, eth1) było trudne | ||
+ | do przewidzenia (ale stałe dla danej konfiguracji sprzętowej). \\ | ||
+ | Co gorsza, kolejność po dodaniu nowej karty sieciowej lub awarii jednej z kart | ||
+ | mogła ulec zmianie. \\ | ||
+ | Więcej szczegółów: | ||
+ | [[https://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/|[1]]] | ||
+ | [[https://en.wikipedia.org/wiki/Consistent_Network_Device_Naming|[2]]] | ||
+ | </small> | ||
+ | |||
+ | ==== Włączanie / wyłączanie interfejsu ==== | ||
+ | |||
+ | | Włączenie interfejsu | ''ifconfig //eth0// up'' | ''ip link set dev //eth0// up'' | | ||
+ | | Wyłączenie interfejsu | ''ifconfig //eth0// down'' | ''ip link set dev //eth0// down'' | | ||
+ | |||
+ | ==== Ustawianie / dodawanie / usuwanie adresów IP ==== | ||
+ | |||
+ | === ip address === | ||
+ | | Dodanie nowego adresu do interfejsu | ''ip addr add //10.0.0.1/25// dev //eth0//'' \\ ''ip addr add //fd00::1/64// dev //eth0//''| | ||
+ | | Usunięcie adresu z interfejsu | ''ip addr del //10.0.0.1/25// dev //eth0//'' \\ ''ip addr del //fd00::1/64// dev //eth0//''| | ||
+ | | Wyczyszczenie adresów interfejsu (groźne) | ''ip addr flush dev //eth0//'' | | ||
+ | |||
+ | //Uwaga!// Każdy adres bez maski polecenie ''ip'' interpretuje jako adres z maską /32 (IPv4) lub /128 (IPv6) | ||
+ | |||
+ | === ifconfig === | ||
+ | | //Zmiana// bieżącego adresu IPv4 i/lub maski | ''ifconfig //eth0// [//10.0.0.1//] [netmask //255.255.255.128//]'' | | ||
+ | | Dodanie nowego adresu IPv4 do urządzenia \\ (tworząc alias urządzenia) | ''ifconfig //eth0:something// //10.0.0.1// …'' | | ||
+ | | 'Usunięcie' dodatkowego adresu IPv4 z urządzenia \\ (usunięcie aliasu) | ''ifconfig //eth0:something// down'' | | ||
+ | | 'Usunięcie' podstawowego adresu IPv4 z urządzenia | ''ifconfig //eth0// 0'' | | ||
+ | | Dodanie nowego adresu IPv6 | ''ifconfig //eth0// add //fd00::1/64//'' | | ||
+ | | Usunięcie adresu IPv6 | ''ifconfig //eth0// del //fd00::1/64//'' | | ||
+ | |||
+ | //Zauważ:// w poleceniu ''ifconfig'' adres IPv4 i adresy IPv6 konfiguruje się inaczej. \\ | ||
+ | ''ifconfig'' umie ustawić wiele adresów IPv6 na interfejsie, ale tylko jeden adres IPv4. \\ | ||
+ | ''ifconfig'' domyślnie dla IPv4 dobiera maskę pasującą do historycznej klasy adresu, a dla IPv6 /128. | ||
+ | |||
+ | <small> | ||
+ | Polecenie ''ifconfig'' pozwala na zmianę wielu ustawień naraz, dla przykładu | ||
+ | poniższe polecenie ustawi adres i włączy interfejs: \\ | ||
+ | ''ifconfig dummy0 192.168.0.1 netmask 255.255.255.0 up'' | ||
+ | </small> | ||
+ | |||
+ | ==== Sprawdzanie łączności IP ==== | ||
+ | * ''ping <//cel//>'' | ||
+ | * ''traceroute {-I|-T} <//cel//>'' \\ <small>Z uwagi na firewall Politechniki proszę używać opcji ''-I'' lub ''-T'', która go skutecznie omija</small> | ||
+ | * ''mtr <//cel//>'' | ||
+ | <small>Jako cel można podać adres IP (np. ''ping 150.254.30.29'') lub nazwę słowną (przykładowo: ''ping cs.put.poznan.pl'', ''ping lab-net-1'')</small> | ||
+ | |||
+ | Podane programy przyjmują też opcje ''-4'' i ''-6'' to użycia odpowiednio protokołu IPv4 i IPv6, np: | ||
+ | ''traceroute -4 -T //nic.cl//'' | ||
+ | |||
+ | <small> | ||
+ | Używając adresów IPv6 ze specjalnych bloków oznaczonych jako | ||
+ | [[https://en.wikipedia.org/wiki/Link-local_address|link-local]] | ||
+ | należy jeszcze dodać na jakim interfejsie znajduje się cel, używając składni | ||
+ | ''//adres//%//interfejs//'', np. ''ping fe80::d8a8:fbff:fe92:2ddf%eth0''. | ||
+ | </small> | ||
+ | |||
+ | ==== Przykładowe wyniki poleceń ==== | ||
+ | |||
+ | === ifconfig / ip address === | ||
+ | <html><pre> | ||
+ | <b>/ # ip a</b> | ||
+ | 10: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 | ||
+ | link/ether da:a8:fb:92:2d:df brd ff:ff:ff:ff:ff:ff link-netnsid 0 | ||
+ | inet <span title="Adres IPv4 na tym interfejsie" style="background-color:rgba(0,255,0,0.2)">192.168.5.2</span><span title="Maska sieci" style="background-color:rgba(128,0,128,0.2)">/30</span> <span title="Adres rozgłoszeniowy (nie adres komputera!)" style="background-color:rgba(0,0,255,0.1)">brd 192.168.5.3</span> scope link eth0 | ||
+ | valid_lft forever preferred_lft forever | ||
+ | inet <span title="Adres IPv4 na tym interfejsie" style="background-color:rgba(0,255,0,0.2)">172.19.67.0</span><span title="Maska sieci" style="background-color:rgba(128,0,128,0.2)">/19</span> <span title="Adres rozgłoszeniowy (nie adres komputera!)" style="background-color:rgba(0,0,255,0.1)">brd 172.19.95.255</span> scope global eth0:1 | ||
+ | valid_lft forever preferred_lft forever | ||
+ | inet <span title="Adres IPv4 na tym interfejsie" style="background-color:rgba(0,255,0,0.2)">10.42.0.238</span><span title="Maska sieci" style="background-color:rgba(128,0,128,0.2)">/24</span> scope global eth0 | ||
+ | valid_lft forever preferred_lft forever | ||
+ | inet6 <span title="Adres IPv6" style="background-color:rgba(255,255,0,0.2)">fe80::d8a8:fbff:fe92:2ddf</span>/<span title="Długość prefiksu" style="background-color:rgba(255,128,80,0.2)">64</span> scope link | ||
+ | valid_lft forever preferred_lft forever | ||
+ | |||
+ | <b>/ # ifconfig</b> | ||
+ | eth0 Link encap:Ethernet HWaddr DA:A8:FB:92:2D:DF | ||
+ | inet addr:<span title="Adres IPv4 na tym interfejsie" style="background-color:rgba(0,255,0,0.2)">192.168.5.2</span> Bcast:192.168.5.3 Mask:<span title="Maska sieci" style="background-color:rgba(128,0,128,0.2)">255.255.255.252</span> | ||
+ | inet6 addr: <span title="Adres IPv6" style="background-color:rgba(255,255,0,0.2)">fe80::d8a8:fbff:fe92:2ddf</span>/<span title="Długość prefiksu" style="background-color:rgba(255,128,80,0.2)">64</span> Scope:Link | ||
+ | UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 | ||
+ | RX packets:1326 errors:0 dropped:0 overruns:0 frame:0 | ||
+ | TX packets:1063 errors:0 dropped:0 overruns:0 carrier:0 | ||
+ | collisions:0 txqueuelen:1000 | ||
+ | RX bytes:2681637 (2.5 MiB) TX bytes:123670 (120.7 KiB) | ||
+ | |||
+ | eth0:1 Link encap:Ethernet HWaddr DA:A8:FB:92:2D:DF | ||
+ | inet addr:<span title="Adres IPv4 na tym interfejsie" style="background-color:rgba(0,255,0,0.2)">172.19.67.0</span> Bcast:172.19.95.255 Mask:<span title="Maska sieci" style="background-color:rgba(128,0,128,0.2)">255.255.224.0</span> | ||
+ | UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 | ||
+ | </pre></html> | ||
+ | Uwaga: ifconfig w różnych dystrybucjach może mieć nieznacznie inny format wyjścia. | ||
+ | |||
+ | ==== [Ekstra] Windows ==== | ||
+ | |||
+ | Do wyświetlenia listy interfejsów i adresów IP można użyć m. inn. komendy ''ipconfig'', | ||
+ | domyślnie pokazującej tylko aktywne interfejsy; ''ipconfig /all'' pokaże wszystkie | ||
+ | |||
+ | Adresy IP można ustawić z "okienek" [[https://support.microsoft.com/en-us/windows/change-tcp-ip-settings-bd0a07af-15f5-cd6a-363f-ca2b6f391ace]] \\ | ||
+ | Z linii poleceń należy użyć komendy ''netsh'', kontekstu ''netsh interface ip'' | ||
+ | [[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/netsh|https://learn.microsoft.com/…]] \\ | ||
+ | Z PowerShella należy użyć cmdletów modułu NetTCPIP: | ||
+ | [[https://learn.microsoft.com/en-us/powershell/module/nettcpip/?view=windowsserver2025-ps]] | ||
+ | |||
+ | Windows dostarcza z systemem programy ''ping'' (przełączniki nie są zgodne; patrz ''ping /?'') i ''tracert''. | ||
+ | |||
+ | ----- | ||
+ | |||
+ | ===== Warstwa fizyczna Ethernetu ===== | ||
+ | |||
+ | ==== Warstwa fizyczna – ogólnie ==== | ||
+ | |||
+ | Zwykle w całości realizowana przez sprzęt.\\ | ||
+ | Główne zadanie – **pozwala wysyłać i odbierać bity**\\ | ||
+ | Protokoły opisują wszystko potrzebne do przesłania bitów (m. in. medium, synchronizację, kodowanie, detekcję błędów, korekcję)\\ | ||
+ | Całkowity brak interpretacji przesyłanych danych\\ | ||
+ | Udostępnia informacje o stanie i pozwala zmieniać niektóre ustawienia (np. prędkość, dupleks, kanał radiowy) | ||
+ | |||
+ | ==== Wybrane aspekty warstwy fizycznej ==== | ||
+ | |||
+ | Na warstwie fizycznej odbywa się **autonegocjacja** (http://en.wikipedia.org/wiki/Autonegotiation) | ||
+ | która wybiera najlepszy standard wspierany przez obie strony. | ||
+ | \\ | ||
+ | Pozwala to też na **wykrywanie łącza** – określenie czy coś w ogóle jest po drugiej stronie. | ||
+ | |||
+ | [[https://pl.wikipedia.org/wiki/Wake_on_LAN|Wake on Lan]] jest funkcją kart | ||
+ | sieciowych pozwalającą im włączyć komputer po otrzymaniu odpowiedniego pakietu. | ||
+ | |||
+ | Kabel sieciowy można też wykorzystać do zasilania podłączonych urządzeń. Takie | ||
+ | rozwiązanie nazywa się [[https://en.wikipedia.org/wiki/Power_over_Ethernet|PoE]] | ||
+ | i jest popularne np. przy kamerach czy punktach dostępu do sieci bezprzewodowej. | ||
+ | |||
+ | ==== Narzędzia ==== | ||
+ | |||
+ | Diody LED przy porcie ethernetowym przynajmniej wskazują czy nawiązano | ||
+ | połączenie. Producent decyduje jakie funkcje pełnią dodatkowo (np. wskazywanie | ||
+ | kolorem z jaką prędkością działa karta, czy mruganie w trakcie wysyłania | ||
+ | danych). | ||
+ | |||
+ | Narzędzia do zarządzania warstwą fizyczną Ethernetu w Linuksie: <small>''mii-tool''</small> / ''ethtool'' \\ | ||
+ | ''ethtool <//ifname//>'' – wyświetla podstawowe informacje \\ | ||
+ | ''ethtool --identify <//ifname//>'' – prosi kartę o to, by zamrugała diodami tak | ||
+ | żeby można było ją odróżnić od innych((Twórca sterownika lub producent sprzętu | ||
+ | określa jak to mruganie wygląda)) | ||
+ | |||
+ | **Informacje o tym, czy połączenie na warstwie fizycznej zostało nawiązane można sprawdzić przez:**<html><div style="margin-top:-1.2em"></div></html> | ||
+ | | ''ip link'' / ''ip address'' | //brak pozostałych// | karta jest wyłączona | | ||
+ | | ::: | ''<…,**NO-CARRIER**,…,**UP**,…> state DOWN'' | brak połączenia na warstwie fizycznej | | ||
+ | | ::: | ''<…,**UP**,…,**LOWER_UP**,…> state UP'' | jest połączenie na warstwie fizycznej (i łącza danych) | | ||
+ | | ''ifconfig'' | //brak pozostałych// | karta jest wyłączona | | ||
+ | | ::: | ''<…,**UP**,…>'' | brak połączenia na warstwie fizycznej | | ||
+ | | ::: | ''<…,**UP**,…,**RUNNING**,…>'' | jest połączenie na warstwie fizycznej (i łącza danych) | | ||
+ | | ''ethtool'' | ''Link detected: no'' | karta jest wyłączona lub \\ brak połączenia na warstwie fizycznej | | ||
+ | | ::: | ''Link detected: yes'' | jest połączenie na warstwie fizycznej | | ||
+ | | lampka przy porcie | nie świeci | karta jest wyłączona lub \\ brak połączenia na warstwie fizycznej | | ||
+ | | ::: | zapalona | jest połączenie na warstwie fizycznej | | ||
+ | |||
+ | ==== Przykładowe wyniki poleceń ==== | ||
+ | ++++ Wynik ethtool | | ||
+ | <html><pre> | ||
+ | <b>/ # ethtool eth0</b> | ||
+ | Settings for eth0: | ||
+ | Supported ports: [ TP MII ] | ||
+ | Supported link modes: 10baseT/Half 10baseT/Full | ||
+ | 100baseT/Half 100baseT/Full | ||
+ | 1000baseT/Full | ||
+ | <span title="To urządzenie wspiera do 2.5Gbit/s" style="background-color:rgba(0,255,0,0.2)">2500baseT/Full</span> | ||
+ | Supported pause frame use: Symmetric Receive-only | ||
+ | Supports auto-negotiation: Yes | ||
+ | Supported FEC modes: Not reported | ||
+ | Advertised link modes: 10baseT/Half 10baseT/Full | ||
+ | 100baseT/Half 100baseT/Full | ||
+ | 1000baseT/Full | ||
+ | 2500baseT/Full | ||
+ | Advertised pause frame use: Symmetric Receive-only | ||
+ | Advertised auto-negotiation: Yes | ||
+ | Advertised FEC modes: Not reported | ||
+ | Link partner advertised link modes: 10baseT/Half 10baseT/Full | ||
+ | 100baseT/Half 100baseT/Full | ||
+ | <span title="Druga strona ogłasza wsparcie do 1Gbit/s" style="background-color:rgba(255,0,0,0.1)">1000baseT/Full</span> | ||
+ | Link partner advertised pause frame use: Symmetric | ||
+ | Link partner advertised auto-negotiation: Yes | ||
+ | Link partner advertised FEC modes: Not reported | ||
+ | <span title="Wynegocjowano 1Gbit/s, full duplex" style="background-color:rgba(255,255,0,0.2)"> Speed: 1000Mb/s | ||
+ | Duplex: Full | ||
+ | Auto-negotiation: on</span> | ||
+ | master-slave cfg: preferred slave | ||
+ | master-slave status: slave | ||
+ | Port: <span title="Karta twierdzi że połączenie używa skrętki" style="background-color:rgba(0,0,255,0.1)">Twisted Pair</span> | ||
+ | PHYAD: 0 | ||
+ | Transceiver: external | ||
+ | MDI-X: <span title="Karta nie raportuje czy kabel jest prosty czy skrosowany" style="background-color:rgba(0,0,0,0.1)">Unknown</span> | ||
+ | <span title="Z wspieranych trybów WoL aktywny jest g ('magic packet')" style="background-color:rgba(255,0,255,0.2)"> Supports Wake-on: pumbg | ||
+ | Wake-on: g</span> | ||
+ | Link detected: yes | ||
+ | </pre></html> | ||
+ | ++++ | ||
+ | |||
+ | ++++ Stan interfejsu | ''eth0'' włączona i podłączona \\ | ||
+ | ''eth1'' włączona i niepodłączona \\ | ||
+ | ''eth2'' wyłączona | ||
+ | |||
+ | <html><pre> | ||
+ | <b>/ # ip l</b> | ||
+ | 10: eth0: <BROADCAST,MULTICAST,<span style="background-color:rgba(0,255,0,0.4)">UP</span>,<span style="background-color:rgba(0,0,255,0.2)">LOWER_UP</span>> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000 | ||
+ | link/ether da:a8:fb:92:2d:df brd ff:ff:ff:ff:ff:ff link-netnsid 0 | ||
+ | 12: eth1: <<span style="background-color:rgba(255,0,0,0.2)">NO-CARRIER</span>,BROADCAST,MULTICAST,<span style="background-color:rgba(0,255,0,0.3)">UP</span>> mtu 1500 qdisc noqueue state LOWERLAYERDOWN mode DEFAULT group default qlen 1000 | ||
+ | link/ether 4e:b4:72:09:49:fe brd ff:ff:ff:ff:ff:ff link-netnsid 0 | ||
+ | 14: eth2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000 | ||
+ | link/ether 86:c9:1d:eb:7f:48 brd ff:ff:ff:ff:ff:ff link-netnsid 0 | ||
+ | |||
+ | <b>/ # ifconfig -a</b> | ||
+ | eth0 Link encap:Ethernet HWaddr DA:A8:FB:92:2D:DF | ||
+ | inet addr:10.42.0.238 Bcast:10.42.0.255 Mask:255.255.255.0 | ||
+ | inet6 addr: fe80::d8a8:fbff:fe92:2ddf/64 Scope:Link | ||
+ | <span style="background-color:rgba(0,255,0,0.4)">UP</span> BROADCAST <span style="background-color:rgba(0,0,255,0.2)">RUNNING</span> MULTICAST MTU:1500 Metric:1 | ||
+ | RX packets:1321 errors:0 dropped:0 overruns:0 frame:0 | ||
+ | TX packets:1058 errors:0 dropped:0 overruns:0 carrier:0 | ||
+ | collisions:0 txqueuelen:1000 | ||
+ | RX bytes:2681185 (2.5 MiB) TX bytes:123368 (120.4 KiB) | ||
+ | |||
+ | eth1 Link encap:Ethernet HWaddr 4E:B4:72:09:49:FE | ||
+ | <span style="background-color:rgba(0,255,0,0.4)">UP</span> BROADCAST MULTICAST MTU:1500 Metric:1 | ||
+ | RX packets:0 errors:0 dropped:0 overruns:0 frame:0 | ||
+ | TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 | ||
+ | collisions:0 txqueuelen:1000 | ||
+ | RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) | ||
+ | |||
+ | eth2 Link encap:Ethernet HWaddr 86:C9:1D:EB:7F:48 | ||
+ | BROADCAST MULTICAST MTU:1500 Metric:1 | ||
+ | RX packets:0 errors:0 dropped:0 overruns:0 frame:0 | ||
+ | TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 | ||
+ | collisions:0 txqueuelen:1000 | ||
+ | RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) | ||
+ | |||
+ | <b>/ # ethtool eth0 | grep 'Link detected:'</b> | ||
+ | Link detected: yes | ||
+ | <b>/ # ethtool eth1 | grep 'Link detected:'</b> | ||
+ | Link detected: no | ||
+ | <b>/ # ethtool eth2 | grep 'Link detected:'</b> | ||
+ | Link detected: no | ||
+ | </pre></html> | ||
+ | ++++ | ||
+ | |||
+ | ----- | ||
+ | |||
+ | ===== Warstwa łącza danych na przykładzie Ethernetu ===== | ||
+ | |||
+ | ==== Warstwa łącza danych – ogólnie ==== | ||
+ | |||
+ | Pozwala wysłać **ramki** do konkretnego urządzenia (lub urządzeń) do których | ||
+ | nadawca jest połączony bezpośrednio (na warstwie fizycznej) lub za pośrednictwem | ||
+ | urządzeń tej warstwy (np. switchy). | ||
+ | |||
+ | Ostatnia warstwa zależna od sprzętu. Zarządza kto kiedy może wysyłać dane, | ||
+ | wprowadza adresy (adresy MAC), porządkuje bajty w ramki, sprawdza czy ramki | ||
+ | zostały przesłane bez zniekształceń, umieszcza w ramce informację jaką treść | ||
+ | zawierają jej dane. | ||
+ | |||
+ | Urządzenia warstwy łącza danych to **mostki** (bridge) i **przełączniki** (switch). | ||
+ | |||
+ | ==== Adres MAC ==== | ||
+ | |||
+ | [[http://en.wikipedia.org/wiki/MAC_address|Adres MAC]] (adres fizyczny) ma | ||
+ | 48 bitów i jest zapisywany szesnastkowo, w 6 grupach po 8 bajtów oddzielonych | ||
+ | dwukropkiem. | ||
+ | \\ | ||
+ | Przykład adresu: <html><tt>5c:f9:dd:78:3d:88</tt></html>. | ||
+ | |||
+ | === Unikalne adresy MAC === | ||
+ | |||
+ | Domyślnie używany przez karty ethernetowe (i Wi-Fi) adres MAC jest ustawiany w | ||
+ | nienadpisywalnej pamięci karty. | ||
+ | \\ | ||
+ | Taki adres MAC jest podzielony na dwie części: pierwsza połowa to | ||
+ | identyfikator producenta (OUI), druga połowa to numer karty. | ||
+ | \\ | ||
+ | <small> | ||
+ | Producenci sprzętu muszą [[https://standards.ieee.org/products-programs/regauth/|wykupić pulę adresów]]. | ||
+ | Lista zajętych początków adresów jest [[https://standards-oui.ieee.org/|dostępna publicznie]], | ||
+ | razem z informacją kto ma który OUI. | ||
+ | </small> | ||
+ | |||
+ | System operacyjny musi sam wpisać adres MAC do ramki sieciowej, | ||
+ | adres MAC używany przez kartę można zmienić na inny. | ||
+ | |||
+ | === Pozostałe adresy MAC === | ||
+ | |||
+ | Adresy MAC z ustawionym bitem <html><tt>0x01</tt></html> w pierwszym bloku to adresy multicastowe (i adres rozgłoszeniowy, <html><tt>ff:ff:ff:ff:ff:ff</tt></html>). | ||
+ | \\ | ||
+ | <small>Adresy użyte przez IPv4 do multicastu zaczynają się od ''01:00:5e:…'', a IPv6 od ''33:33:…''</small> | ||
+ | |||
+ | Adresy MAC z ustawionym bitem <html><tt>0x02</tt></html> w pierwszym bloku to adresy lokalnie | ||
+ | administrowane (nieunikalne). Można je nadawać np. urządzeniom wirtualnym. | ||
+ | |||
+ | === Wyświetlanie / zmiana adresów MAC === | ||
+ | |||
+ | W Linuksie do zarządzania warstwą łącza danych (data //link// layer) służy komenda ''ifconfig'' (i inne) / ''ip link''. | ||
+ | |||
+ | | odczyt adr. MAC | ''ifconfig [//eth0//]'' | '' ip link [show dev //eth0//]'' | | ||
+ | | zmiana adr. MAC | ''ifconfig //eth0// hw ether //12:34:56:78:90:ab//'' | '' ip link set dev //eth0// address //12:34:56:78:90:ab//'' | | ||
+ | <html><div style="margin-top:-1.2em"></div></html> | ||
+ | <small>Większość sterowników kart pozwala zmieniać MAC tylko na wyłączonych kartach.</small> | ||
+ | |||
+ | ++++ Przykłady poleceń wyświetlających adres MAC: | | ||
+ | <html> | ||
+ | <pre> | ||
+ | <b>/ # ip l</b> | ||
+ | 2: em1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP mode DEFAULT group default qlen 1000 | ||
+ | link/ether <span title="Adres MAC interfejsu em1" style="background-color:rgba(0,255,0,0.2)">5c:f9:dd:78:3d:88</span> brd ff:ff:ff:ff:ff:ff | ||
+ | 3: p4p1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000 | ||
+ | link/ether <span title="OUI (organizationally unique identifier), identyfikator organizacji" style="background-color:rgba(255,0,0,0.2)">90:e2:ba</span>:<span title="24 bity na urządzenia w tym bloku adresów MAC" style="background-color:rgba(0,0,255,0.15)">1a:4d:48</span> brd ff:ff:ff:ff:ff:ff | ||
+ | 5: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000 | ||
+ | link/ether <span style="background-color:rgba(0,0,0,0.1)">0</span><span title="Bit 0x1 w tym bloku oznaczałby adres multicastowy, bit 0x2 oznaczały lokalnie administrowany MAC" style="background-color:rgba(255,0,0,0.25)">8</span><span style="background-color:rgba(0,0,0,0.1)">:ed:b9:4c:31:8b</span> brd ff:ff:ff:ff:ff:ff | ||
+ | |||
+ | <b>/ # ifconfig -a</b> | ||
+ | em1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 | ||
+ | ether <span title="Adres MAC interfejsu em1" style="background-color:rgba(0,255,0,0.2)">5c:f9:dd:78:3d:88</span> txqueuelen 1000 (Ethernet) | ||
+ | RX packets 2702 bytes 355076 (346.7 KiB) | ||
+ | RX errors 0 dropped 0 overruns 0 frame 0 | ||
+ | TX packets 523 bytes 53668 (52.4 KiB) | ||
+ | TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 | ||
+ | device interrupt 20 memory 0xddf00000-ddf20000 | ||
+ | |||
+ | p4p1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 | ||
+ | inet 192.168.1.2 netmask 255.255.255.0 broadcast 0.0.0.0 | ||
+ | inet6 fe80::92e2:baff:fe1a:4d48 prefixlen 64 scopeid 0x20<link> | ||
+ | ether <span title="OUI (organizationally unique identifier), identyfikator organizacji" style="background-color:rgba(255,0,0,0.2)">90:e2:ba</span>:<span title="24 bity na urządzenia w tym bloku adresów MAC" style="background-color:rgba(0,0,255,0.15)">1a:4d:48</span> txqueuelen 1000 (Ethernet) | ||
+ | RX packets 293 bytes 60122 (58.7 KiB) | ||
+ | RX errors 0 dropped 0 overruns 0 frame 0 | ||
+ | TX packets 286 bytes 26478 (25.8 KiB) | ||
+ | TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 | ||
+ | device memory 0xdd420000-dd43ffff | ||
+ | |||
+ | wlan0: flags=4098<BROADCAST,MULTICAST> mtu 1500 | ||
+ | ether <span style="background-color:rgba(0,0,0,0.1)">0</span><span title="Bit 0x1 w tym bloku oznaczałby adres multicastowy, bit 0x2 oznaczały lokalnie administrowany MAC" style="background-color:rgba(255,0,0,0.25)">8</span><span style="background-color:rgba(0,0,0,0.1)">:ed:b9:4c:31:8b</span> txqueuelen 1000 (Ethernet) | ||
+ | RX packets 0 bytes 0 (0.0 B) | ||
+ | RX errors 0 dropped 0 overruns 0 frame 0 | ||
+ | TX packets 0 bytes 0 (0.0 B) | ||
+ | TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 | ||
+ | </pre> | ||
+ | </html> | ||
+ | ++++ | ||
+ | |||
+ | ==== Ethernet ==== | ||
+ | |||
+ | Ethernet opisuje((tzn. jest zbiorem standardów / szczegółów technicznych)) jak | ||
+ | stworzyć lokalną (kablową) sieć komputerową. Określa jak ma wyglądać warstwa | ||
+ | fizyczna i warstwa łącza danych. | ||
+ | |||
+ | Na warstwie łącza danych określa m. inn. jak ma wyglądać pojedyncza | ||
+ | wiadomość (ramka) wysłana przez sieć. | ||
+ | \\ | ||
+ | Ramka ethernetowa zawiera adres MAC nadawcy i odbiorcy, oraz może mieć rozmiar | ||
+ | między 64B a 1500B. | ||
+ | Górna granica na wielkość ramki ma nazwę | ||
+ | [[https://en.wikipedia.org/wiki/Maximum_transmission_unit|MTU]]. | ||
+ | |||
+ | ==== Unicast, multicast, broadcast ==== | ||
+ | |||
+ | Unicast to wysłanie pakietu do jednego, wskazanego odbiorcy. | ||
+ | \\ | ||
+ | Multicast to wysłanie pakietu do grupy zainteresowanych odbiorców. | ||
+ | \\ | ||
+ | Broadcast to wysłanie pakietu do wszystkich (w zasięgu). | ||
+ | \\ | ||
+ | <small>Anycast to wysłanie do najbliższego z grupy odbiorców.</small> | ||
+ | |||
+ | === [Ekstra] Testowanie łączności uni-/multi-/broad-cast === | ||
+ | |||
+ | Domyślnie Linuksy ignorują zapytania generowane przez ''ping'' wysłane na adresy | ||
+ | multicastowe/rozgłoszeniowe IPv4. | ||
+ | \\ | ||
+ | Aby to zmienić, wykonaj z uprawnieniami roota komendę: ''sysctl net.ipv4.icmp_echo_ignore_broadcasts=0'' | ||
+ | |||
+ | Aby wybrany interfejs dołączył do grupy multicastowej, jakiś program musi tego zażądać. Na potrzeby ćwiczeń użyj komend: | ||
+ | \\ | ||
+ | ''socat -u udp4-recv:0,ip-add-membership=//239.1.2.3//://br0// stdio'' \\ | ||
+ | ''socat -u udp6-recv:0,ipv6-join-group=[ff05::fedc:ba98]:br0 stdio'' | ||
+ | \\ | ||
+ | <small>Listę grup do których należą interfejsy można sprawdzić komendą ''ip maddr'' lub ''netstat -ng''</small> | ||
+ | |||
+ | Do przetestowania sposobów adresowania możesz użyć komend: | ||
+ | * unicast: ''ping //<adres IP innego komputera>//'' | ||
+ | * multicast: ''ping //<adres IP grupy multicastowej>//'' | ||
+ | * broadcast: ''ping -b //<adresu IPv4 rozgłoszeniowy sieci>//'' lub ''ping -b //255.255.255.255//'' | ||
+ | <html><div style="margin-top:-1.2em"></div></html> | ||
+ | W tym ćwiczeniu warto dodać do Linuksowego programu ''ping'' jeszcze opcje ''-c2 -w1'' | ||
+ | \\ | ||
+ | <small> | ||
+ | Opcja ''-c //count//'' ograniczy ilość zapytań co //count//, | ||
+ | a opcja ''-w //limit//'' przerwie w momencie wysłania __kolejnego__ zapytania, | ||
+ | jeśli była już odpowiedź na //limit// zapytań. | ||
+ | </small> | ||
+ | |||
+ | W IPv6 nie ma adresów rozgłoszeniowych. Zastąpił je m. inn. adres multicastowy | ||
+ | wszystkie węzły – ''ff02::1'', którego użycie, podobnie jak adresów z sieci | ||
+ | ''fe80::/64'', wymaga podania interfejsu który ma zostać użyty, | ||
+ | np. ''ping ff02::1%br0'' | ||
+ | |||
+ | ==== [Ekstra] Domena rozgłoszeniowa ==== | ||
+ | |||
+ | [[http://en.wikipedia.org/wiki/Broadcast_domain|Domena rozgłoszeniowa]] | ||
+ | i [[https://en.wikipedia.org/wiki/Collision_domain|kolizyjna]] | ||
+ | [[http://soisk.info/index.php?title=Domena_kolizyjna_i_rozg%C5%82oszeniowa|[1]]] | ||
+ | [[http://study-ccna.com/collision-broadcast-domain|[2]]] to zbiór urządzeń | ||
+ | do których dotrze ramka wysłana jako rozgłoszeniowa (domena rozgłoszeniowa) | ||
+ | bądź dowolna (domena kolizyjna). | ||
+ | |||
+ | ----- | ||
+ | |||
+ | ===== Tłumaczenie IP na MAC ===== | ||
+ | |||
+ | Do wysłania pakietu do wybranego urządzenia podaje się jego adres IP. \\ | ||
+ | System operacyjny wysyłając ramkę sieciową (z tym pakietem w środku) musi | ||
+ | ustawić właściwy adres docelowy MAC. | ||
+ | |||
+ | Jeżeli urządzenie S ma wysłać pakiet do urządzenia R o podanym adresie IP i ten | ||
+ | adres IP znajduje się w tej samej sieci co adres IP urządzenia S, to | ||
+ | urządzenie S musi najpierw dowiedzieć się jaki adres MAC ma urządzenie R. | ||
+ | |||
+ | Do znajdowania adresów MAC dla podanego adresu IPv4 służy protokół [[https://en.wikipedia.org/wiki/Address_Resolution_Protocol|ARP]].\\ | ||
+ | Do znajdowania adresów MAC dla podanego adresu IPv6 służy protokół [[https://en.wikipedia.org/wiki/Neighbor_Discovery_Protocol|NDP]]. | ||
+ | |||
+ | Wyświetlanie mapowań IP→MAC: ''ip neighbour'' (działa też pisownia ''ip neighbor''). | ||
+ | \\ | ||
+ | Do wyświetlenia mapowań IPv4→MAC można użyć starszej komendy ''arp''. | ||
+ | |||
+ | <small>Listę znanych mapowań można wyczyścić komendą ''ip neighbour flush {all|dev <//ifname//>}''.</small> | ||
+ | |||
+ | Komenda ''arping'' pozwala wysłać żądanie protokołu ARP:\\ | ||
+ | ''arping -I <//nazwa interfejsu//> <//adres IPv4//>'' \\ | ||
+ | np. ''arping -I br0 150.254.32.129'' | ||
+ | |||
+ | Komenda ''ndisc6'' pozwala wysłać wiadomość //Neighbor Solicitation// protokołu NDP:\\ | ||
+ | ''ndisc6 <//adres IPv6//> <//nazwa interfejsu//>'' \\ | ||
+ | np. ''ndisc6 fd00::5 br0'' | ||
+ | |||
+ | ----- | ||
+ | |||
+ | ===== Przełącznik (switch) ===== | ||
+ | |||
+ | Przełącznik na podstawie adresów źródłowych ramek buduje tablicę adresów MAC | ||
+ | (określającą na którym porcie jest dany adres). | ||
+ | \\ | ||
+ | Jeżeli adres docelowy ramki jest w tej tablicy, to wiadomość wysłana jest tylko | ||
+ | przez port przez który osiągalny jest docelowy adres. | ||
+ | |||
+ | Wiadomości rozgłoszeniowe i wiadomości do nieznanych adresów MAC wysyłane są na | ||
+ | wszystkie porty poza tym z którego zostały otrzymane. | ||
+ | |||
+ | <small>Adresy MAC multicastowe są obsługiwane inaczej – każdy komputer musi | ||
+ | ogłosić że chce dołączyć do wybranej grupy (bądź ją opuścić) wysyłając | ||
+ | odpowiednią wiadomości. | ||
+ | Switch z tych wiadomości [[https://en.wikipedia.org/wiki/IGMP_snooping|uczy się]] | ||
+ | przez które porty należy wysłać wiadomości kierowane do konkretnej grupy. | ||
+ | |||
+ | Jeżeli w domenie rozgłoszeniowej (czyli w połączeniach między switchem / switchami) | ||
+ | powstanie [[https://en.wikipedia.org/wiki/Switching_loop|pętla]], to każdy pakiet | ||
+ | rozgłoszeniowy zacznie krążyć w tej pętli w nieskończoność, powodując powielanie go | ||
+ | na pozostałych portach (czym skutecznie popsuje całą domenę rozgłoszeniową). Jedynym | ||
+ | sposobem na zaradzenie jest zlikwidowanie pętli (np. przez wypięcie kabla). | ||
+ | \\ | ||
+ | Takim sytuacjom mają zapobiegać | ||
+ | [[http://en.wikipedia.org/wiki/Spanning_tree_protocol|protokoły drzewa rozpinającego]] | ||
+ | (STP, RSTP, PVSTP (cisco), MSTP). | ||
+ | </small> | ||
+ | |||
+ | |||
+ | [[https://en.wikipedia.org/wiki/Network_switch#Configuration_options|Przełączniki zarządzalne]] | ||
+ | to przełączniki które można w jakikolwiek sposób konfigurować. | ||
+ | |||
+ | [[http://en.wikipedia.org/wiki/Multilayer_switch|Przełączniki wielowarstwowe]] | ||
+ | to przełączniki które umieją wykonywać niektóre zadania z warstw wyższych niż | ||
+ | łącza danych. | ||