Narzędzia użytkownika

Narzędzia witryny


bio-psiec:podstawowa_konf_i_l1_l2

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

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: &​lt;​BROADCAST,​MULTICAST,​UP,​LOWER_UP&​gt;​ 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: &​lt;​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>&​gt;​ 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: &​lt;<​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>&​gt;​ 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: &​lt;​BROADCAST,​MULTICAST&​gt;​ 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: &​lt;​BROADCAST,​MULTICAST,​UP,​LOWER_UP&​gt;​ 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: &​lt;​BROADCAST,​MULTICAST,​UP,​LOWER_UP&​gt;​ 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: &​lt;​BROADCAST,​MULTICAST&​gt;​ 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&​lt;​UP,​BROADCAST,​RUNNING,​MULTICAST&​gt; ​ 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&​lt;​UP,​BROADCAST,​RUNNING,​MULTICAST&​gt; ​ 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&​lt;​link&​gt;​
 +        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&​lt;​BROADCAST,​MULTICAST&​gt; ​ 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.
  
bio-psiec/podstawowa_konf_i_l1_l2.txt · ostatnio zmienione: 2025/10/07 21:08 przez jkonczak