Najłatwiejszym sposobem na zrozumienie różnicy między nimi jest przykład pokazujący hierarchiczną naturę prefiksów.
Przykładowa hierarchia
ISP otrzymał prefiks z RIR (Regional Internet Registry), który w tym przykładzie założymy, że jest 2001:db8::/32
. Ten prefiks różni się od tych przekazywanych klientom w tym sensie, że ISP będzie musiał ogłosić go za pośrednictwem BGP innym dostawcom, z którymi jest obserwowany.
ISP zamierza teraz przydzielić prefiksy klientowi. Najpierw przypisują 2001:db8:0:1::/64
łącze łączące router ISP z routerem CPE (wyposażenie klienta). Jest to przedrostek łącza, ponieważ jest przypisany do łącza. Jako ogólną rekomendację powinny być wszystkie prefiksy linków w IPv6 /64
.
Router ISP wyśle reklamy routera informujące o tym prefiksie, a CPE użyje SLAAC do zbudowania adresu dla zewnętrznego interfejsu wskazującego na router ISP w obrębie /64
. Załóżmy, że zewnętrzny interfejs ma adres IP 2001:db8:0:1:42:ff:fe00:42/64
(w tym zapisie /64
znajduje się przypomnienie, jaka jest długość prefiksu łącza, ale równie dobrze mogłem go pominąć).
Ten prefiks łącza jest wystarczający, aby router CPE mógł komunikować się z resztą świata, ale nie pomaga routerowi CPE w obsłudze klientów w sieci LAN podłączonej do jego interfejsu wewnętrznego. Router CPE potrzebuje prefiksu dla sieci LAN, która jest kierowana przez ten router CPE, dlatego nazywa się to prefiksem routowanym .
Routowany prefiks można skonfigurować statycznie lub przez DHCPv6. Dokładne szczegóły, w jaki sposób router CPE negocjuje długość prefiksu z serwerem DHCPv6 dostarczonym przez dostawcę usług internetowych, jest poza zakresem tej odpowiedzi. Wyszukiwanie delegacji prefiksu może powiedzieć ci więcej na ten temat. Załóżmy, że skończył się prefiks 2001:db8:1::/48
. Na routerze ISP zostanie utworzony wpis tablicy routingu wskazujący, że 2001:db8:1::/48
należy przekierować przez bramę 2001:db8:0:1:42:ff:fe00:42
. Ten wpis w tabeli routingu jest cechą definiującą routowany prefiks.
Router CPE może mieć wiele wewnętrznych sieci LAN, z których /48
może przydzielić /64
prefiks łącza do każdej wewnętrznej sieci LAN. Jeśli założymy, że jedna z sieci LAN została przypisana 2001:db8:1:1::/64
jako prefiks łącza, węzeł tego łącza może uzyskać adres 2001:db8:1:1::42:ff:fe00:43
przez SLAAC. Ten węzeł może być routerem bezprzewodowym, który potrzebuje prefiksu swojego interfejsu bezprzewodowego. CPE może przypisać 2001:db8:1:100::/60
jako routowany prefiks dla routera bezprzewodowego, a router bezprzewodowy może przypisać 2001:db8:1:100::/64
jako prefiks łącza dla interfejsu bezprzewodowego.
Teraz w takiej konfiguracji mamy hierarchię prefiksów. Wszystkie są zagnieżdżone pod sobą:
2001:db8::/32
BGP ogłosił prefiks
2001:db8:1::/48
routowany prefiks
2001:db8:1:100::/60
routowany prefiks
2001:db8:1:100::/64
prefiks linku
Jak faktycznie obsługiwane są pakiety
Gdy router ISP odbiera pakiet, dla 2001:db8:0:1::/64
którego jest prefiksem łącza, wykonuje wyszukiwanie sąsiada w celu znalezienia adresu MAC hosta w obrębie /64
.
W ten sposób router ISP będzie potrzebował osobnego wpisu pamięci podręcznej sąsiada dla każdego adresu IP w prefiksie łącza.
Gdy router ISP odbiera pakiet, dla 2001:db8:1::/48
którego jest routowanym prefiksem, dokonuje wyszukiwania sąsiada w celu znalezienia adresu MAC bramy 2001:db8:0:1:42:ff:fe00:42
.
W ten sposób router ISP potrzebuje tylko jednej pamięci podręcznej sąsiada dla bramy, aby kierować pakiety na dowolny adres IP w ramach routowanego prefiksu. Ta właściwość ma kluczowe znaczenie dla skalowalności Internetu.
Obejście problemu braku routowanego prefiksu
Czasami klienci blokują się przed dostawcą usług internetowych, który dostarczy tylko prefiks łącza, a nie prefiks routowany. W takiej sytuacji klient może zainstalować demona, który reaguje na wykrywanie sąsiadów dla wszystkich adresów IP w ramach określonego podzakresu prefiksu łącza. Będzie to miało efekt podobny do konfigurowania tego prefiksu jako routowanego prefiksu. Ale ma kilka wad:
- Ogólnie rzecz biorąc, prefiksy routowane powinny być krótsze niż
/64
, ale demon odpowiadający na żądania odnajdywania sąsiadów może utworzyć tylko „prefiks routowany”, który jest dłuższy niż /64
.
- Nieznacznie zwiększa to opóźnienie z powodu dodatkowej podróży w obie strony za każdym razem, gdy adres IP nie znajduje się w pamięci podręcznej sąsiada na routerze ISP.
- Zwiększa obciążenie routera ISP ze względu na konieczność znacznie częstszego wykrywania sąsiadów. Jest całkiem prawdopodobne, że router ISP może przekazywać pakiety do znanego już prefiksu docelowego wyłącznie sprzętowo, ale wykrywanie sąsiadów będzie odbywało się w oprogramowaniu.
- Zwiększa zużycie pamięci przez router ISP. Jeśli dostawca usług internetowych przydzieli routowany prefiks każdemu klientowi, może łatwo uciec z posiadaniem tylko jednego wpisu pamięci podręcznej sąsiada na klienta. Ale w przypadku demona sąsiada może to zmienić się w tysiące wpisów na klienta.
Obciążenie związane z przetwarzaniem na routerze ISP może być poważnym problemem. Niektóre routery nie było tak źle na obsługę zalew pakietów wymagających sąsiada odkrycie, że zamienił się w rzeczywistych ataków DoS, a stosując dłuższe prefiksy Link (w /120
- 127
zakres) zostały wykorzystane jako obejście takich ataków DoS.
Nawet jeśli router nie jest podatny na atak DoS, pamięć potrzebna do wpisów w pamięci podręcznej sąsiada, gdy stosowane jest opisane powyżej obejście, jest znacznie droższa dla dostawcy usług internetowych niż adresy IP dla routowanego prefiksu, więc nie ma powodu dla dostawcy usług internetowych, aby odmówił wydania routowanego prefiksu.
Specjalne przypadki dotyczące połączeń punkt-punkt
W przypadku łączy punkt-punkt (takich jak tunele 6w4 i łącza PPP) nie ma potrzeby wykrywania sąsiadów. Istnieje tylko jeden kierunek wysłania pakietu przez takie łącze i przed wysłaniem pakietu nie trzeba sprawdzać adresu sprzętowego.
Oznacza to, że narzut związany z wykrywaniem sąsiadów nie stanowi problemu w przypadku takiego łącza. Zatem posiadanie jednego końca łącza punkt-punkt używającego dużej liczby adresów nie stanowi problemu, o ile punkty końcowe mają pewną zgodę na to, kto używa które adresy. Brak wykrycia sąsiada oznacza również, że nie ma wykrycia duplikatu adresu, więc jeśli oba punkty końcowe spróbują użyć tego samego adresu, nie będzie działać zgodnie z oczekiwaniami (chyba że spodziewasz się, że zachowa się jak adres anycast).
Jest jedno zastrzeżenie, o którym należy pamiętać w przypadku połączeń punkt-punkt. Każdy punkt końcowy zakłada, że wszystkie adresy w łączu, do którego nie został przypisany, są przypisane do drugiego końca. Oznacza to, że nieużywane adresy w łączach punkt-punkt mają skłonność do wyzwalania pętli routingu. Takiej pętli routingu (i kilku innych przypadków pętli routingu) można uniknąć przez punkt końcowy, który nigdy nie wysyła pakietu bezpośrednio z powrotem do węzła, z którego został odebrany. Tak więc pakiet odebrany z łącza punkt-punkt nie może zostać odesłany z powrotem przez to samo łącze punkt-punkt, dopóki jeden punkt końcowy osiągnie to poprawnie, pętla routingu zostanie przerwana. Jako węzeł boczny w sieci Ethernet można odebrać pakiet i przekazać go z powrotem na to samo łącze, ale dobrym pomysłem jest unikanie tego, jeśli byłby przekierowany z powrotem na ten sam adres MAC, z którego został odebrany.
Ponieważ większość adresów łącza punkt-punkt zostanie po prostu przekierowana na drugi koniec łącza bez potrzeby wyszukiwania sąsiada, wygląda to bardzo podobnie do routowanego prefiksu. Na przykład, jeśli dostawca usług internetowych przypisał 2001: db8: 42 :: / 64 do łącza punkt-punkt z przypisanymi punktami końcowymi adresy 2001: db8: 42 :: 1 i 2001: db8: 42 :: 2, to pakiety do większości adresów w 2001 roku: db8: 42 :: / 64 zostanie przesłany od dostawcy usług internetowych do klienta w taki sam sposób, jak gdyby był to routowany prefiks z wykorzystaniem 2001: db8: 42 :: 2 jako bramy.
Oznacza to, że pewien hack jest możliwy. Na CPE można faktycznie skonfigurować 2001: db8: 42 :: / 64 jako prefiks łącza w sieci LAN. Aby CPE wiedział, które z dwóch łączy jest w określonym miejscu docelowym, wówczas rzeczywista konfiguracja łącza punkt-punkt w kierunku ISP musiałaby zostać zmieniona na 2001: db8: 42 :: / 126. To wszystko będzie działać z jednym drobnym wyjątkiem, hosty w sieci LAN nie mogą komunikować się z czterema adresami IP w 2001 roku: db8: 42 :: / 126. Ponieważ prawdopodobnie i tak nie musieli się z nimi komunikować, nie stanowi to większego problemu. Jednak nie zaleca się korzystania z tego hacka, poprawną konfiguracją jest uzyskanie routowanego prefiksu od dostawcy usług internetowych.
Kolejnym włamaniem do zapisywania adresów jest przydzielanie adresów globalnych tylko dla routowanego prefiksu i używanie adresów RFC 4193 jako łącza punkt-punkt. Jest to jednak głupi hack, ponieważ wciąż wprowadza pewne wady w celu rozwiązania nieistniejącego problemu.
Możliwe jest również, aby w ogóle nie przypisywać żadnego prefiksu do łącza punkt-punkt. Tak długo, jak każdy punkt końcowy ma inny interfejs, na którym ma adres globalny, mogą używać adresu przypisanego do drugiego interfejsu podczas komunikacji przez łącze punkt-punkt. Nie znam żadnych wad tego podejścia, więc jeśli okaże się, że takie podejście do połączeń punkt-punkt upraszcza konfigurację sieci, możesz go używać, ale nie używaj go jako środka do zapisywania adresów.
Przypadki użycia dla routowanego prefiksu
- Hierarchiczne routing, tak jak w moim pierwszym przykładzie, jest tym, do czego są przeznaczone routowane prefiksy.
- VPN / tunele dodają kolejną warstwę do hierarchii routerów wymagających prefiksów. Chociaż są one wirtualne, a nie rzeczywisty sprzęt, nie różnią się pod względem adresowania i potrzebują routowanego prefiksu, tak jak by to miało miejsce w przypadku łącza fizycznego.
- Przypisywanie wielu adresów do hosta . Istnieją przypadki użycia do przypisania wielu adresów do jednego hosta. W przypadku kilku adresów można je po prostu przypisać i obsłużyć z wykrywaniem sąsiadów dla każdego i tylu wpisów pamięci podręcznej, ile jest adresów. Ale jeśli potrzebne są tysiące adresów, lepiej jest użyć routowanego prefiksu.
Bardziej szczegółowym przykładem ostatniego punktu byłyby rekursory DNS. Ponieważ nie widzę, aby DNSSEC miał dużą przyczepność, dopóki nie skończymy walki z IPv4, potrzebne są inne środki przeciw zatruciu DNS. Dołożono starań, aby jak najwięcej entropii w zapytaniach. Identyfikator i numer portu mogą pomieścić maksymalnie 32 bity entropii, kolejne kilka bitów może zostać zatrzymanych w żądaniu, jeśli wielkie i małe litery są mieszane w nazwie domeny, która ma zostać rozwiązana. W ten sposób rzadko można uzyskać więcej niż 48 bitów. Przypisanie pełnego /64
rekursorowi DNS pozwoliłoby na zwiększenie entropii o 64 bity za jednym razem, co stanowi więcej niż wszystkie inne wysiłki łącznie.