przejście do zawartości
Jan Kończak
Narzędzia użytkownika
Zaloguj
Narzędzia witryny
Narzędzia
Pokaż stronę
Poprzednie wersje
Odnośniki
Ostatnie zmiany
Menadżer multimediów
Indeks
Zaloguj
Ostatnie zmiany
Menadżer multimediów
Indeks
Jesteś tutaj:
start
»
bio-sk
»
lacza_danych
bio-sk:lacza_danych
Ta strona jest tylko do odczytu. Możesz wyświetlić źródła tej strony ale nie możesz ich zmienić.
====== Wireshark ====== [[https://www.wireshark.org|Wireshark]] to narzędzie, które pozwala między innymi wyświetlić i analizować wiadomości wysłane przez karty sieciowe. \\ W tym celu, po uruchomieniu należy wybrać kartę i rozpocząć przechwytywanie. Następnie wyświetli się lista przechwyconych wiadomości. Zaznaczenie jednej z nich spowoduje wyświetlenie jej w postaci rozkodowanej – rozwijalnego drzewa dla każdego z kolejnych użytych na różnych warstwach sieci protokołów. <small>Dodatkowo treści wiadomości pokazywana jest szesnastkowo</small>. ====== Warstwa łącza danych ====== ===== Warstwa łącza danych ===== 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 obejmuje zarówno warstwę fizyczną jak i łącza danych [[http://en.wikipedia.org/wiki/Ethernet_frame|Budowa ramki]] typu Ethernet II <small>i IEEE 802.2 LLC</small>, adresy, pole długość ramki / typ ramki, [[http://en.wikipedia.org/wiki/EtherType|EtherType]], suma kontrolna. [[https://en.wikipedia.org/wiki/Maximum_transmission_unit|MTU]] Ethernetu - 1500B. ===== 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> === 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 komendy: \\ ''socat udp4-recv:0,ip-add-membership=//239.1.2.3//://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 IP 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> ===== Domena rozgłoszeniowa ===== [[http://en.wikipedia.org/wiki/Broadcast_domain|Domena rozgłoszeniowa]] <small>i [[https://en.wikipedia.org/wiki/Collision_domain|kolizyjna]]</small> [[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) <small>bądź dowolna (domena kolizyjna)</small>. ====== 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.</small> 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]] (<small>STP, RSTP, PVSTP (cisco), MSTP</small>). [[https://en.wikipedia.org/wiki/Network_switch#Types|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. ====== Mierzenie prędkości ====== Do mierzenia prędkości na jednym urządzeniu musi działać program czekający na połączenie (serwer), na drugim należy uruchomić program który łączy się z serwerem i mierzy prędkość (klient). Przykładowe programy: * [[https://github.com/HewlettPackard/netperf|netperf]] [[https://hewlettpackard.github.io/netperf/doc/netperf.html|[1]]] * serwer: ''netserver -N'' * klient: ''netperf -H <//cel//>'' * [[https://iperf.fr/|iperf]] * serwer: ''iperf3 -s'' * klient: ''iperf3 -c <//cel//>'' <small> Opcje programu netperf: * ''netperf -h'' – pomoc ogólna * ''netperf [-t {TCP_STREAM|…}] -- -h'' – pomoc dla wybranego testu * ''netperf -D //1// …'' – wyniki pośrednie co 1 sekundę * ''netperf -l //15// …'' – test o długości 15 sekund * ''netperf -t UDP_STREAM …'' – test wykorzystujący protokół UDP * ''netperf -t UDP_STREAM -H <cel> -- -m //1400//'' – test "dużych" wiadomości * ''netperf -t UDP_STREAM -H <cel> -- -m //22//'' – test "małych" wiadomości </small> Przepustowość można mierzyć na różnych warstwach: * //Bandwidth// to przepustowość na warstwie fizycznej. * //Throughput// to przepustowość na warstwie sieci bądź transportu. * //[[https://en.wikipedia.org/wiki/Goodput|Goodput]]// to przepustowość na warstwie aplikacji. <html><div style="margin-top:-1.2em"></div></html> bandwidth ≥ throughput ≥ goodput Przepustowość można mierzyć w bajtach na sekundę (bps) lub pakietach na sekundę (pps). \\ Niektóre urządzenia (np. routery czy firewalle z dużą ilością reguł, stare kiepskie switche) nie są w stanie wykorzystać całego pasma wysyłając małe pakiety. \\ <small>Zwykle producenci reklamują się że ich sprzęt dla typowego w internecie rozkładu wielkości pakietów ([[https://en.wikipedia.org/wiki/Internet_Mix|IMIX]]) daje radę wykorzystać pełne pasmo.</small>
bio-sk/lacza_danych.txt
· ostatnio zmienione: 2024/10/17 18:27 przez
jkonczak
Narzędzia strony
Pokaż stronę
Poprzednie wersje
Odnośniki
Złóż / rozłóż wszystko
Do góry