Różnice między wybraną wersją a wersją aktualną.
Both sides previous revision Poprzednia wersja Nowa wersja | Poprzednia wersja | ||
sk1:ip_icmp_dhcp [2018/04/02 18:07] jkonczak [Pomiędzy warstwą łącza danych a warstwą sieci] |
sk1:ip_icmp_dhcp [2018/04/05 13:17] (aktualna) jkonczak [Pomiędzy warstwą łącza danych a warstwą sieci] |
||
---|---|---|---|
Linia 1: | Linia 1: | ||
===== Protokół IPv4 ===== | ===== Protokół IPv4 ===== | ||
- | IPv4 = Internet Protocol version 4 <html><small></html>([[https://tools.ietf.org/html/rfc791|RFC 791]])<html></small></html> | + | IPv4 = Internet Protocol version 4 <html><small></html>([[https://tools.ietf.org/html/rfc791|RFC 791]]); czasami skracane do inet<html></small></html> |
- | Budowa [[https://pl.wikipedia.org/wiki/IPv4#Nag.C5.82.C3.B3wek_IP|nagłówka IP]]: \\ | + | Budowa nagłówka IP [[https://tools.ietf.org/html/rfc791#section-3.1|[1]]] [[https://pl.wikipedia.org/wiki/IPv4#Nag.C5.82.C3.B3wek_IP|[2]]]: \\ |
* długość całego pakietu (z nagłówkiem), długość nagłówka <html><small> i opcje</small></html> | * długość całego pakietu (z nagłówkiem), długość nagłówka <html><small> i opcje</small></html> | ||
- | * adresy IP | + | * adresy IP: źródłowy i docelowy |
* protokół warstwy wyższej | * protokół warstwy wyższej | ||
* http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml | * http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml | ||
* ''less /etc/protocols'' | * ''less /etc/protocols'' | ||
* fragmentacja | * fragmentacja | ||
- | * numer ifentyfikacyjny | + | * numer identyfikacyjny, flaga MF i offset |
- | * flaga MF i offset | + | |
* flaga DF | * flaga DF | ||
* TTL | * TTL | ||
- | * <html><small></html> [[https://en.wikipedia.org/wiki/Differentiated_services|DiffServ (wcześniej ToS)]] i [[https://en.wikipedia.org/wiki/Explicit_Congestion_Notification#Operation_of_ECN_with_IP|ECN]]<html></small></html> | + | * <html><small></html> [[https://en.wikipedia.org/wiki/Differentiated_services|DiffServ]] i [[https://en.wikipedia.org/wiki/Explicit_Congestion_Notification#Operation_of_ECN_with_IP|ECN]] (wcześniej ToS)<html></small></html> |
+ | |||
+ | <html><small></html> | ||
+ | Dla przetestowania fragmentacji spróbuj zmienić rozmiar pakietu ping: ''ping -s <rozmiar> <cel>'', np: \\ | ||
+ | ''ping -s 5000 1.1.1.1'' | ||
+ | <html></small></html> | ||
<html><!-- | <html><!-- | ||
Linia 21: | Linia 25: | ||
===== ICMP i IGMP ===== | ===== ICMP i IGMP ===== | ||
+ | ==== ICMP ==== | ||
Protokół IP nie przewiduje informowania nadawcy o problemach. | Protokół IP nie przewiduje informowania nadawcy o problemach. | ||
Linia 27: | Linia 32: | ||
* testowanie łączności (ping) | * testowanie łączności (ping) | ||
- | Do zarządzanie przynależnością do grup multicastowych w IPv4 służy IGMP. | + | Aby zaobserwować komunikaty ICMP, można wykonać: |
- | + | ||
- | Aby zaobserwować komunikaty ICMP, można: | + | |
* ''ping <//cel//>'' | * ''ping <//cel//>'' | ||
* ''traceroute [-q 1] -T <//cel//>'' (porównaj z ''traceroute -I <//cel//>'') | * ''traceroute [-q 1] -T <//cel//>'' (porównaj z ''traceroute -I <//cel//>'') | ||
- | * połączenie do nieużywanego portu, np: ''tftp lab-net-1 -c get readme.txt'' | + | * połączenie do nieużywanego portu, np: ''host pl. lab-net-1'' (z lab-net) |
- | * połączenie do nieosiągalnego (np. nieistniejącego) adresu, np. http://lab-sec-1/ (z lab-net) | + | * połączenie do nieosiągalnego (np. nieistniejącego) adresu, np. ''host pl. lab-sec-33'' (z lab-net) |
+ | <html><!-- | ||
+ | (lub ''tftp lab-net-1 -c get readme.txt'') | ||
+ | (lub ''tftp lab-sec-33 -c get readme.txt'') | ||
+ | --></html> | ||
+ | |||
+ | ==== IGMP ==== | ||
+ | |||
+ | Do zarządzanie przynależnością do grup multicastowych w IPv4 służy IGMP [[https://en.wikipedia.org/wiki/Internet_Group_Management_Protocol|[1]]]. | ||
+ | |||
+ | <html><small></html> | ||
+ | Dzięki IGMP urządzenia sieciowe wysyłają wiadomości multicastowe tylko zainteresowanym odbiorcom [[https://en.wikipedia.org/wiki/IGMP_snooping|[2]]], a urządzenia końcowe mogą przyjmować tylko ramki z interesujących ich grup multicastowych. \\ | ||
+ | Wyświetlenie grup do których należy komputer [IP]: ''netstat -g'' \\ | ||
+ | Wyświetlenie grup do których należy komputer [MAC]: ''cat /proc/net/igmp''\\ | ||
+ | Oczekiwanie na wiadomość multicastową: ''socat udp-recvfrom:2222,ip-add-membership=239.1.2.3:br0 -'' | ||
+ | ++++ Przykładowy wynik poleceń: | <html><pre> | ||
+ | # netstat -ng | ||
+ | IPv6/IPv4 Group Memberships | ||
+ | Interface RefCnt Group | ||
+ | --------------- ------ --------------------- | ||
+ | br0 1 <span title="Adres 224.0.0.251 odpowiada adresowi MAC 01:0E:00:00:FB" style="background-color:rgba(128,0,128,0.2)">224.0.0.251</span> | ||
+ | br0 1 224.0.0.1 | ||
+ | |||
+ | # cat /proc/net/igmp | ||
+ | Idx Device : Count Querier Group Users Timer Reporter | ||
+ | 3 wlan0 : 2 V3 | ||
+ | <span title="Adres 224.0.0.251 odpowiada adresowi MAC 01:0E:00:00:FB, stąd FB0000E0" style="background-color:rgba(128,0,128,0.2)">FB0000E0</span> 1 0:00000000 0 | ||
+ | 010000E0 1 0:00000000 0 | ||
+ | </pre></html> | ||
+ | ++++ | ||
+ | <html></small></html> | ||
===== Trasowanie ===== | ===== Trasowanie ===== | ||
Linia 41: | Linia 74: | ||
Jeśli cel nie jest bezpośrednio połączony, dane (pakiety) trzeba wysłać **przez** inne urządzenie, tj. trzeba wybrać dalszą **trasę** pakietu.\\ | Jeśli cel nie jest bezpośrednio połączony, dane (pakiety) trzeba wysłać **przez** inne urządzenie, tj. trzeba wybrać dalszą **trasę** pakietu.\\ | ||
Stąd urządzenie działające na warstwie sieci to trasownik (router). | Stąd urządzenie działające na warstwie sieci to trasownik (router). | ||
+ | |||
+ | Adresy IP i MAC na drodze pakietu od źródła do celu | ||
===== Pomiędzy warstwą łącza danych a warstwą sieci ===== | ===== Pomiędzy warstwą łącza danych a warstwą sieci ===== | ||
- | ARP - http://en.wikipedia.org/wiki/Address_Resolution_Protocol | + | Protokół ARP - http://en.wikipedia.org/wiki/Address_Resolution_Protocol |
- | * wyświetlanie znanych odwzorowań ''arp'' / ''ip neigh'' | + | |
- | * czyszczenie wszystkich odwzorowań ''ip n flush all'' | + | Narzędzia: |
+ | * wyświetlanie znanych odwzorowań ''arp'' / ''ip neigh'' | ||
+ | * <html><small></html>ręczne dodanie odwzorowania \\ ''arp -i //br0// -s //1.0.0.0// //02:de:ad:00:be:ef//'' \\ ''ip neigh add //1.0.0.0// lladdr //02:de:ad:00:be:ef// dev //br0//'' <html></small></html> | ||
+ | * <html><small></html>ręczne usunięcie odwzorowania \\ ''arp -i br0 -d //1.0.0.0//'' \\ ''ip neigh del //1.0.0.0// dev //br0//'' <html></small></html> | ||
+ | * czyszczenie wszystkich odwzorowań ''ip neigh flush all'' | ||
Ręczne wysyłanie żądania ARP – ''arping''\\ | Ręczne wysyłanie żądania ARP – ''arping''\\ | ||
- | ''arping -I <//interfejs//> <//adres IP//>'' | + | ''arping -I <//interfejs//> <//adres IP//>'' \\ |
+ | ''arping -I //br0// //150.254.32.129//'' | ||
+ | ++++ Przykładowe wyniki poleceń: | | ||
+ | <html><pre> | ||
+ | # ip -4 n | ||
+ | 10.0.0.1 dev wlan0 lladdr e8:de:27:34:8c:91 <span title="System uznaje wpis za aktualny" style="background-color:rgba(0,255,0,0.2)">REACHABLE</span> | ||
+ | 10.0.0.253 dev wlan0 <span title="System próbował znaleźć adres MAC dla żądanego IP, ale próba nie powiodła się" style="background-color:rgba(255,0,0,0.2)">FAILED</span> | ||
+ | 10.0.0.254 dev wlan0 lladdr cc:af:78:34:82:d7 <span title="System uznaje wpis za przeterminowany, ale przechowuje go żeby kolejne żądanie o ten adres IP wysłać najpierw unicastowo pod pamiętany MAC" style="background-color:rgba(255,255,0,0.4)">STALE</span> | ||
+ | 10.0.1.2 dev br0 lladdr 84:16:f9:bb:f4:a3 STALE | ||
+ | 10.0.1.3 dev br0 lladdr 44:8a:5b:21:4c:e3 STALE | ||
+ | 10.0.1.250 dev br0 lladdr 02:00:00:00:00:01 STALE | ||
- | Adresy IP i MAC na drodze pakietu od źródła do celu | + | # arping -c 5 -I br0 10.0.1.250 |
+ | ARPING 10.0.1.250 | ||
+ | 42 bytes from 02:00:00:00:00:01 (10.0.1.250): index=0 time=120.205 usec | ||
+ | 42 bytes from 02:00:00:00:00:01 (10.0.1.250): index=1 time=59.082 usec | ||
+ | 42 bytes from 02:00:00:00:00:01 (10.0.1.250): index=2 time=55.915 usec | ||
+ | 42 bytes from 02:00:00:00:00:01 (10.0.1.250): index=3 time=57.665 usec | ||
+ | 42 bytes from 02:00:00:00:00:01 (10.0.1.250): index=4 time=56.081 usec | ||
+ | --- 10.0.1.250 statistics --- | ||
+ | 5 packets transmitted, 5 packets received, 0% unanswered (0 extra) | ||
+ | rtt min/avg/max/std-dev = 0.056/0.070/0.120/0.025 ms</pre></html>++++ | ||
Slajdy: ''[[http://www.cs.put.poznan.pl/mlibuda/ARP.pdf|Protokół ARP]]'' | Slajdy: ''[[http://www.cs.put.poznan.pl/mlibuda/ARP.pdf|Protokół ARP]]'' | ||
+ | Opis implementacji ARP pod Linuksem: ''man 7 arp'' (samo ''man arp'' pokaże pomoc dla polecenia ''arp'') | ||
<html><small> | <html><small> | ||
<h3>[EKSTRA]</h3> | <h3>[EKSTRA]</h3> | ||
</html> | </html> | ||
+ | Fragmentacja IP a rzeczywistość: https://blog.cloudflare.com/ip-fragmentation-is-broken/ | ||
+ | |||
+ | Protokół ARP znalazł zastosowanie w wielu technologiach warstwy 2 ([[https://www.iana.org/assignments/arp-parameters/arp-parameters.xhtml|[1]]]), natomiast na warstwie 3 używany jest tylko dla adresów IPv4. | ||
+ | |||
+ | Komenda ''arp'' jest też dostępna w systemie Windows: https://technet.microsoft.com/en-us/library/cc940107.aspx | ||
+ | |||
Q: Dlaczego komenda ''arping'' nie uzupełnia mapowań IP—MAC?\\ | Q: Dlaczego komenda ''arping'' nie uzupełnia mapowań IP—MAC?\\ | ||
A: Domyślnie Linux uzupełnia mapowania tylko w odpowiedzi na żądania ARP generowane przez jądro systemu. Aby akceptować inne pakiety ARP, można wydać polecenie:\\ | A: Domyślnie Linux uzupełnia mapowania tylko w odpowiedzi na żądania ARP generowane przez jądro systemu. Aby akceptować inne pakiety ARP, można wydać polecenie:\\ | ||
''sysctl net.ipv4.conf.all.arp_accept=1''\\ | ''sysctl net.ipv4.conf.all.arp_accept=1''\\ | ||
Dokumentacja: https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt | Dokumentacja: https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt | ||
- | <html><small></html> | + | <html></small></html> |