Znaki po% (które w twoim przykładzie są liczbami) to identyfikator interfejsu. Znaki te są używane do identyfikacji „interfejsu sieciowego”, który ludzie często nazywają „kartą sieciową”. Na przykład może pomóc ustalić, czy pakiet będzie korzystał z przewodowej karty Ethernet, czy bezprzewodowej karty Wi-Fi.
Zgaduję, że używasz Microsoft Windows. Używa liczb jako identyfikatorów interfejsów.
Dla porównania, systemy uniksopodobne mogą używać liter po znaku%. na przykład:fe80::71a3:2b00:ddd3:753f%eth0
W takim przypadku identyfikator interfejsu eth0
odpowiada nazwie karty sieciowej.
W systemie Microsoft Windows można uzyskać listę (numerycznych) identyfikatorów interfejsu, korzystając z jednego z wierszy poleceń, które sprawdzają tablicę routingu. Wolę „ netstat -nr
”, ponieważ działa to również w innych systemach operacyjnych, ale Microsoft Windows obsługuje także „ route print
”. Wynikowy raport, który zostanie zgłoszony, prawdopodobnie będzie trwał ponad ekran, więc przygotuj się na przewijanie do tyłu, chyba że przejdziesz dalej.
np. w moim systemie:
===========================================================================
Interface List
14...5c f9 dd 6d 98 b8 ......Realtek PCIe GBE Family Controller
12...e0 06 e6 7e fc 4e ......Bluetooth Device (Personal Area Network)
1...........................Software Loopback Interface 1
13...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter
15...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter #2
===========================================================================
W takim przypadku adres taki jak fe80 :: 71a3: 2b00: ddd3: 753f% 14 oznaczałby mój kontroler rodziny Realtek PCIe GBE. „GBE” odnosi się do Gigabit Ethernet.
Oto podchwytliwa część: jeśli chcesz pingować adres zdalny, może być konieczne użycie adresu IPv6 systemu zdalnego, ale identyfikatora interfejsu systemu lokalnego. Na przykład, jeśli używam komputera A i mam lokalny adres IPv6 fe80 :: 1 podłączony do interfejsu nr 14, i chcę pingować komputer B i ma on lokalny adres IPv6 fe80 :: 2 podłączony do jego interfejs numer 16, wtedy użyłbym tego:
ping fe80::2%14
Tak więc ping
polecenie wyśle pakiet ICMPv6 na zdalny adres IPv6 (fd80 :: 2), który należy do zdalnego komputera, i użyje do tego interfejsu z identyfikatorem 14. Identyfikator interfejsu 14 to numer z systemu, którego używam, a nie z systemu zdalnego.
Spójrzmy teraz, dlaczego może to być konieczne.
Jeśli chcę wysłać polecenie ping do adresu IPv6 Google (który w chwili pisania tej odpowiedzi to 2607: f8b0: 400a: 802 :: 200e), wówczas tabela routingu sprawdzi, które karty sieciowe obsługują adresy zaczynające się od 2607: f8b0: 400a: 802. Tabela routingu wskaże, że żadna z moich kart sieciowych nie jest podłączona bezpośrednio do sieci przy użyciu adresów zaczynających się od 2607: f8b0: 400a: 802, więc mój komputer ostatecznie użyje adresu „bramy”. Gdybym łączył się z inną siecią należącą do organizacji, dla której pracuję, mógłbym mieć specjalny adres „bramy” kierujący ruch do sieci prywatnej. W takim przypadku nie mam bardziej szczegółowej bramy, więc użyję „domyślnej bramy” IPv6. Tak działa IPv6 przez większość czasu, z wyjątkiem adresów lokalnych dla łącza. Tak też przez większość czasu działało IPv4.
Zgodnie z RFC 4291 sekcja 2.8 każdy komputer korzystający z protokołu IPv6 powinien przypisać adres lokalny łącza do każdego interfejsu sieciowego. RFC 4291 sekcja 2.5.6 pokazuje bity, od których muszą zaczynać się adresy lokalne link, co powoduje, że adresy lokalne link zaczynają się od „fe80: 0000: 0000: 0000:” (chociaż wiele z tych zer jest zwiniętych do podwójnego dwukropka ). Fakt, że adresy te zaczynają się od „fe80:” jest również opisany w RFC 4291 sekcja 2.4 .
Jeśli próbujesz wysłać polecenie ping do zdalnego systemu (np. „2607: f8b0: 400a: 802”), ogólnym procesem jest zazwyczaj wykrycie sieci lub podsieci, której częścią jest adres, co odbywa się poprzez sprawdzenie bitów na początku adresu. Następnie te bity są używane do określania sposobu kierowania ruchem.
Jednak ten proces nie działa dla adresu lokalnego łącza IPv6, ponieważ każdy pojedynczy (operacyjny, aktywny) interfejs sieci ma adres lokalny łącza rozpoczynający się od „fe80:” w podsieci przy użyciu prefiksu / rozmiaru podsieci „/ 64 ". Jeśli korzystasz z laptopa, prawdopodobnie zauważysz, że zarówno karta Ethernet, jak i karta Wi-Fi powinny mieć taki adres IPv6.
Teraz, gdy wysyłasz ping do fe80 :: 2, chcesz, aby komputer wysłał ten pakiet z właściwej karty sieciowej. Jeśli masz drukarkę podłączoną do sieci przewodowej, nie chcesz wysyłać ruchu z karty Wi-Fi, używając ścieżki / trasy sieci, która nie spowoduje, że ruch dotrze do drukarki. A jeśli próbujesz komunikować się z urządzeniem bezprzewodowym za pomocą karty Wi-Fi, nie chcesz, aby ruch wychodził z karty Ethernet.
Rozwiązaniem jest określenie, które urządzenie sieciowe ma korzystać z ruchu. Taki jest cel identyfikatora sieci.