===== 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'' \\ 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'') 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} [-opcja1 ] --długa_opcja= [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 ===== **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. Narzędzia: omawiane | ważne albo popularne | mocno przestarzałe, mało znane albo zbędne. ==== 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ą: \\ arp dnsdomainname domainname hostname ifconfig ipmaddr iptunnel mii-tool nameif netstat nisdomainname plipconfig rarp route slattach ypdomainname 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: \\ arpd ctstat genl ifcfg ifstat ip lnstat nstat routef routel rtacct rtmon rtpr rtstat ss tc \\ 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 arping clockdiff ipg ping ping6 rarpd rdisc tftpd tracepath tracepath6 traceroute6 * ''[[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'' (i ''--json''). \\ 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'', mostki ''br'', urządzenia programowe ''tun, tap'', 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'' 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]]] ==== 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. 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'' ==== Sprawdzanie łączności IP ==== * ''ping '' * ''traceroute {-I|-T} '' \\ Z uwagi na firewall Politechniki proszę używać opcji ''-I'' lub ''-T'', która go skutecznie omija * ''mtr '' 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'') Podane programy przyjmują też opcje ''-4'' i ''-6'' to użycia odpowiednio protokołu IPv4 i IPv6, np: ''traceroute -4 -T //nic.cl//'' 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''. ==== Przykładowe wyniki poleceń ==== === ifconfig / ip address ===
/ # ip a
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 192.168.5.2/30 brd 192.168.5.3 scope link eth0
       valid_lft forever preferred_lft forever
    inet 172.19.67.0/19 brd 172.19.95.255 scope global eth0:1
       valid_lft forever preferred_lft forever
    inet 10.42.0.238/24 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::d8a8:fbff:fe92:2ddf/64 scope link 
       valid_lft forever preferred_lft forever

/ # ifconfig
eth0      Link encap:Ethernet  HWaddr DA:A8:FB:92:2D:DF  
          inet addr:192.168.5.2  Bcast:192.168.5.3  Mask:255.255.255.252
          inet6 addr: fe80::d8a8:fbff:fe92:2ddf/64 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:172.19.67.0  Bcast:172.19.95.255  Mask:255.255.224.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
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: ''mii-tool'' / ''ethtool'' \\ ''ethtool '' – wyświetla podstawowe informacje \\ ''ethtool --identify '' – 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:**
| ''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 |
/ # ethtool eth0 
Settings for eth0:
        Supported ports: [ TP    MII ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
                                2500baseT/Full
        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
                                             1000baseT/Full
        Link partner advertised pause frame use: Symmetric
        Link partner advertised auto-negotiation: Yes
        Link partner advertised FEC modes: Not reported
        Speed: 1000Mb/s
        Duplex: Full
        Auto-negotiation: on
        master-slave cfg: preferred slave
        master-slave status: slave
        Port: Twisted Pair
        PHYAD: 0
        Transceiver: external
        MDI-X: Unknown
        Supports Wake-on: pumbg
        Wake-on: g
        Link detected: yes
++++ ++++ Stan interfejsu | ''eth0'' włączona i podłączona \\ ''eth1'' włączona i niepodłączona \\ ''eth2'' wyłączona
/ # ip l
10: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> 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: <NO-CARRIER,BROADCAST,MULTICAST,UP> 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

/ # ifconfig -a
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
          UP BROADCAST RUNNING 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  
          UP 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)

/ # ethtool eth0 | grep 'Link detected:'
        Link detected: yes
/ # ethtool eth1 | grep 'Link detected:'
        Link detected: no
/ # ethtool eth2 | grep 'Link detected:'
        Link detected: no
++++ ----- ===== 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: 5c:f9:dd:78:3d:88. === 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. \\ 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. 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 0x01 w pierwszym bloku to adresy multicastowe (i adres rozgłoszeniowy, ff:ff:ff:ff:ff:ff). \\ Adresy użyte przez IPv4 do multicastu zaczynają się od ''01:00:5e:…'', a IPv6 od ''33:33:…'' Adresy MAC z ustawionym bitem 0x02 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//'' |
Większość sterowników kart pozwala zmieniać MAC tylko na wyłączonych kartach. ++++ Przykłady poleceń wyświetlających adres MAC: |
/ # ip l
2: em1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP mode DEFAULT group default qlen 1000
    link/ether 5c:f9:dd:78:3d:88 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 90:e2:ba:1a:4d:48 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 08:ed:b9:4c:31:8b brd ff:ff:ff:ff:ff:ff

/ # ifconfig -a
em1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 5c:f9:dd:78:3d:88  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 90:e2:ba:1a:4d:48  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 08:ed:b9:4c:31:8b  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
++++ ==== 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). \\ Anycast to wysłanie do najbliższego z grupy odbiorców. === [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'' \\ Listę grup do których należą interfejsy można sprawdzić komendą ''ip maddr'' lub ''netstat -ng'' Do przetestowania sposobów adresowania możesz użyć komend: * unicast: ''ping ////'' * multicast: ''ping ////'' * broadcast: ''ping -b ////'' lub ''ping -b //255.255.255.255//''
W tym ćwiczeniu warto dodać do Linuksowego programu ''ping'' jeszcze opcje ''-c2 -w1'' \\ 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ń. 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''. Listę znanych mapowań można wyczyścić komendą ''ip neighbour flush {all|dev }''. Komenda ''arping'' pozwala wysłać żądanie protokołu ARP:\\ ''arping -I '' \\ np. ''arping -I br0 150.254.32.129'' Komenda ''ndisc6'' pozwala wysłać wiadomość //Neighbor Solicitation// protokołu NDP:\\ ''ndisc6 '' \\ 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. 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). [[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.