Narzędzia użytkownika

Narzędzia witryny


sk1:ip_icmp_dhcp

Różnice

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

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
sk1:ip_icmp_dhcp [2017/03/28 14:04]
jkonczak
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><​!-- 
 +''​socat /​etc/​protocols,​rdonly udp-datagram:​150.254.32.130:​9''​ 
 +''​socat /​etc/​protocols,​rdonly udp-datagram:​224.0.0.1:​9''​ 
 +--></​html>​
  
 ===== ICMP i IGMP ===== ===== ICMP i IGMP =====
 +==== ICMP ====
 Protokół IP nie przewiduje informowania nadawcy o problemach. Protokół IP nie przewiduje informowania nadawcy o problemach.
  
Linia 22: 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 36: 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 ​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>​
 +<​h3>​[EKSTRA]</​h3>​
 +</​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?\\
 +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''​\\
 +Dokumentacja:​ https://​www.kernel.org/​doc/​Documentation/​networking/​ip-sysctl.txt
 +<​html></​small></​html>​
sk1/ip_icmp_dhcp.1490702695.txt.gz · ostatnio zmienione: 2017/03/28 14:04 przez jkonczak