Digipeating w APRS
Digipeater jest cyfrową stacją retransmisyjną. Odbiera kompletną ramkę AX.25, analizuje jej ścieżkę i, jeżeli spełnione są odpowiednie warunki, nadaje ją ponownie.
Nie działa więc jak analogowy przemiennik, który retransmituje sygnał na bieżąco. Digipeater pracuje według zasady store and forward:
odbiór ramki ↓sprawdzenie ścieżki i reguł ↓sprawdzenie duplikatu ↓modyfikacja pola ścieżki ↓ponowne nadanieNajczęściej pakiet jest retransmitowany na tym samym kanale radiowym, ale digipeater wieloportowy może również przekazywać ruch pomiędzy różnymi kanałami.
Podstawowa decyzja o retransmisji dotyczy pola adresowego AX.25, a nie zawartości APRS w polu Information. Digipeater nie musi rozumieć, czy pakiet zawiera pozycję, wiadomość, pogodę czy telemetrię, aby poprawnie obsłużyć jego ścieżkę.
Ważna uwaga o specyfikacji
Oryginalny APRS Protocol Reference opisuje format ścieżek i mechanizmy APRS, ale nie zawiera kompletnego, jednoznacznego algorytmu działania nowoczesnego digipeatera.
W efekcie przez lata powstały implementacje różniące się szczegółami.
W tym artykule jako punkt odniesienia przyjęto:
- współczesny, trasowalny model New-N,
- zalecenia APRS 1.1,
- referencyjny algorytm opisany przez Johna Langnera WB2OSZ w dokumencie APRS Digipeater Algorithm.
Tam, gdzie zachowanie starszych urządzeń lub innych implementacji może się różnić, zostało to zaznaczone.
Pole ścieżki AX.25
Przykładowy pakiet APRS może wyglądać tak:
SQ9MDD-7>APBOX0,WIDE1-1,WIDE2-1:...Po Source Address i Destination Address znajdują się adresy digipeaterów:
WIDE1-1,WIDE2-1AX.25 przewiduje maksymalnie osiem adresów digipeaterów w jednej ramce.
Każdy taki adres zawiera między innymi H-bit, czyli Has Been Repeated. Bit ten informuje, czy dany element ścieżki został już wykorzystany.
Digipeater podejmuje decyzję na podstawie pierwszego niewykorzystanego elementu ścieżki.
Elementy już wykorzystane nie są ponownie brane pod uwagę.
H-bit i znak *
W tekstowej reprezentacji monitorowej stan H-bit jest pokazywany znakiem:
*Przykład:
SQ9MDD-7>APBOX0,SR5ABC*:...oznacza, że adres SR5ABC został już wykorzystany podczas retransmisji.
* nie jest częścią znaku wywoławczego ani aliasu. Jest sposobem przedstawienia stanu pola adresowego AX.25.
Tylko ostatni wykorzystany adres z *
W klasycznym formacie monitorowym znak * umieszcza się przy ostatnim wykorzystanym adresie digipeatera.
Jeżeli ścieżka wygląda tak:
SR5AAA,SR5BBB*oznacza to, że wykorzystane zostały:
SR5AAASR5BBBa SR5BBB jest ostatnim wykorzystanym elementem.
Zapis:
SR5AAA*,SR5BBB*może być pokazywany przez niektóre programy jako bezpośrednia wizualizacja poszczególnych H-bitów, ale nie jest standardową konwencją klasycznego formatu monitorowego. W standardowym zapisie wcześniejsze wykorzystane adresy są implikowane przez położenie ostatniej gwiazdki.
Retransmisja po konkretnym znaku
Najprostszy przypadek występuje wtedy, gdy stacja źródłowa wpisze do ścieżki konkretny znak digipeatera:
SQ9MDD-7>APBOX0,SR5AAA,SR5BBB:...SR5AAA widzi swój znak jako pierwszy niewykorzystany element ścieżki.
Po retransmisji otrzymujemy:
SQ9MDD-7>APBOX0,SR5AAA*,SR5BBB:...Następnie SR5BBB może wykorzystać kolejny element.
Po jego retransmisji standardowy zapis monitorowy będzie wyglądał tak:
SQ9MDD-7>APBOX0,SR5AAA,SR5BBB*:...W samym polu AX.25 H-bit jest ustawiony dla obu wykorzystanych adresów.
Taki sposób pracy nazywany jest routingiem po jawnie wskazanych digipeaterach.
Aliasy
APRS nie wymaga znajomości konkretnych znaków wszystkich digipeaterów na trasie. Zamiast nich powszechnie używa aliasów.
Digipeater może reagować na:
- własny znak,
- skonfigurowany alias prosty,
- alias typu WIDEn-N,
- lokalne lub regionalne aliasy zbudowane według podobnych zasad.
Jeżeli alias ma być trasowalny, nowoczesny digipeater powinien pozostawić w ścieżce własny znak, tak aby później było wiadomo, którędy pakiet rzeczywiście przeszedł.
Przykładowo trasowalny alias:
TEMPmoże po retransmisji zostać zastąpiony przez:
SR5ABC*Istnieją również implementacje aliasów nietrasowalnych, które jedynie oznaczają alias jako wykorzystany. W APRS współczesna praktyka preferuje jednak ścieżki, z których da się odtworzyć rzeczywistą drogę pakietu.
WIDEn-N
Najważniejszym współczesnym mechanizmem ogólnego digipeatingu APRS jest WIDEn-N.
Przykład:
WIDE2-2Pierwsza liczba:
2określa klasę aliasu WIDE2.
Druga liczba:
2jest licznikiem pozostałych użyć tego elementu ścieżki.
W uproszczeniu:
WIDE2-2 ^ pozostały 2 użyciaKażdy poprawnie działający digipeater WIDEn-N zmniejsza drugi licznik podczas retransmisji.
Gdy N jest większe od 1
Pakiet:
SQ9MDD-7>APBOX0,WIDE2-2:...zostaje odebrany przez digipeater SR5AAA.
Po retransmisji:
SQ9MDD-7>APBOX0,SR5AAA*,WIDE2-1:...Digipeater:
- dodał swój znak do ścieżki,
- oznaczył go jako wykorzystany,
- zmniejszył licznik z
2do1.
Pozostawiony:
WIDE2-1jest pierwszym niewykorzystanym elementem ścieżki i może zostać obsłużony przez kolejny digipeater.
Gdy N wynosi 1
Jeżeli kolejny digipeater SR5BBB odbierze:
SQ9MDD-7>APBOX0,SR5AAA*,WIDE2-1:...licznik zostanie wyczerpany.
W referencyjnym algorytmie nie pozostawia się bezcelowego:
WIDE2-0Alias zostaje zastąpiony znakiem digipeatera.
W standardowej reprezentacji monitorowej rezultat będzie wyglądał tak:
SQ9MDD-7>APBOX0,SR5AAA,SR5BBB*:...Pakiet wykorzystał całą zaplanowaną część WIDE2-2.
Niektóre starsze implementacje mogą pozostawiać wyczerpany alias w postaci z ustawionym H-bitem, dlatego w rzeczywistych logach można spotkać także inne warianty reprezentacji.
Gdy N wynosi 0
Element typu:
WIDE2-0jest wyczerpany i nie powinien powodować kolejnej retransmisji.
W poprawnie utworzonej ścieżce taki stan nie powinien pojawiać się jako pierwszy niewykorzystany adres.
WIDE1-1 i fill-in digipeater
Alias:
WIDE1-1ma szczególne znaczenie w typowej architekturze APRS.
Jest używany przede wszystkim do uzyskania pierwszego, lokalnego hopu przez fill-in digipeater, czyli stację o mniejszym zasięgu, umieszczoną tam, gdzie użytkownicy nie mają dobrego bezpośredniego dostępu do głównych digipeaterów.
Przykładowa ścieżka:
WIDE1-1,WIDE2-1może zostać przetworzona następująco.
Pakiet źródłowy:
SQ9MDD-7>APBOX0,WIDE1-1,WIDE2-1:...po lokalnym fill-in SR5FILL:
SQ9MDD-7>APBOX0,SR5FILL*,WIDE2-1:...następnie po głównym digipeaterze SR5WIDE:
SQ9MDD-7>APBOX0,SR5FILL,SR5WIDE*:...Fill-in powinien być skonfigurowany zgodnie ze swoją lokalną rolą. Typowy fill-in reaguje na WIDE1-1, ale nie powinien zachowywać się jak pełny szerokoobszarowy digipeater obsługujący dowolne WIDEn-N.
Dobór ścieżki przez użytkownika jest osobnym zagadnieniem. Tutaj istotne jest jedynie to, w jaki sposób poszczególne elementy są przetwarzane.
Pierwszy niewykorzystany element jest kluczowy
Podstawowy algorytm digipeatera nie przeszukuje ścieżki dowolnie w poszukiwaniu czegoś, co potrafi obsłużyć.
Analizowany jest przede wszystkim:
pierwszy niewykorzystany adres digipeatera.
Dla:
SR5AAA*,WIDE2-1,SR5XYZpierwszym niewykorzystanym elementem jest:
WIDE2-1SR5XYZ znajduje się później i w normalnym trybie nie powinien “przeskoczyć” nad WIDE2-1.
Ta zasada zachowuje kolejność ścieżki zadaną przez nadawcę i zapobiega przypadkowemu omijaniu jej elementów.
Preemptive digipeating
Niektóre nowoczesne implementacje oferują opcjonalny preemptive digipeating.
Mechanizm pozwala digipeaterowi odnaleźć własny znak lub określony alias dalej w niewykorzystanej części ścieżki i zareagować mimo wcześniejszych elementów.
Przykładowo:
WIDE1-1,SR5ABCnormalnie wymagałoby najpierw wykorzystania WIDE1-1.
Preemptive digipeating może pozwolić SR5ABC na wcześniejsze przejęcie pakietu.
Nie jest to jednak podstawowa reguła klasycznego digipeatingu APRS. Zmienia semantykę kolejności ścieżki i powinien być stosowany świadomie. Konkretne zachowanie zależy od implementacji.
Duplicate suppression
Sam licznik WIDEn-N i H-bity nie wystarczają do ochrony sieci.
Digipeater musi również wykrywać duplikaty.
Ta sama oryginalna transmisja może zostać odebrana przez kilka sąsiednich digipeaterów, a następnie ponownie dotrzeć do jednego z nich różnymi drogami.
Bez pamięci ostatnio retransmitowanych pakietów sieć bardzo szybko zaczęłaby generować kolejne kopie tej samej informacji.
W referencyjnym algorytmie WB2OSZ digipeater zapamiętuje pakiety retransmitowane w ostatnim czasie, typowo przez około:
30 sJeżeli ten sam pakiet pojawi się ponownie w tym oknie, nie jest retransmitowany drugi raz.
Ścieżka nie może być częścią porównania duplikatu
To bardzo ważne.
Ta sama ramka po przejściu przez różne digipeatery ma inną ścieżkę:
SQ9MDD-7>APBOX0,SR5AAA*:...i:
SQ9MDD-7>APBOX0,SR5BBB*:...ale nadal mogą to być dwie kopie tej samej oryginalnej transmisji.
Dlatego pole ścieżki nie może decydować o tym, czy pakiet jest duplikatem.
Referencyjny algorytm WB2OSZ porównuje:
- Source Address,
- Destination Address, z pominięciem jego SSID,
- pole Information,
a ignoruje adresy digipeaterów.
Implementacje często przechowują skrót tych danych zamiast całej ramki.
Dlaczego digipeater nie powinien zmieniać danych pakietu
Podczas normalnego współczesnego digipeatingu zmienia się ścieżka digipeaterowa.
Digipeater nie powinien modyfikować:
Source AddressDestination AddressInformationZmiana któregoś z tych pól oznaczałaby, że retransmitowana kopia przestaje być tą samą ramką z punktu widzenia mechanizmów wykrywania duplikatów.
Jest to szczególnie istotne dlatego, że różne kopie tej samej transmisji mogą przejść różnymi ścieżkami, ale nadal muszą zostać rozpoznane jako ten sam pakiet.
Historyczny mechanizm routingu przez Destination SSID był wyjątkiem od tej współczesnej zasady, ale jest obecnie mechanizmem przestarzałym i nie powinien być podstawą nowych implementacji.
Ochrona przed pętlami
Poprawna sieć APRS korzysta z kilku niezależnych zabezpieczeń:
- H-bit oznacza już wykorzystane elementy ścieżki.
- Pierwszy niewykorzystany adres narzuca kolejność przetwarzania.
- Licznik WIDEn-N ogranicza liczbę kolejnych retransmisji.
- Duplicate suppression zapobiega ponownemu nadaniu tej samej transmisji odebranej inną drogą.
- Trasowanie własnym znakiem pozwala zobaczyć rzeczywistą drogę pakietu i wykrywać błędne zachowanie sieci.
Żaden pojedynczy mechanizm nie zastępuje pozostałych.
Traced i non-traced digipeating
Historycznie spotykano dwa sposoby obsługi aliasów.
Non-traced
Alias pozostawał w ścieżce i jedynie zmieniał swój stan lub licznik.
Taki zapis nie pozwalał jednoznacznie ustalić, który fizyczny digipeater wykonał retransmisję.
Traced
Digipeater wstawia swój własny znak do ścieżki.
Przykład:
WIDE2-2po pierwszym hopie:
SR5AAA*,WIDE2-1Dzięki temu odbiorca może odtworzyć rzeczywistą drogę pakietu.
Współczesny New-N Paradigm preferuje trasowalny WIDEn-N właśnie dlatego, że umożliwia analizę, diagnostykę i zarządzanie siecią.
RELAY, WIDE i TRACE - mechanizmy historyczne
W starszej dokumentacji APRS można spotkać ścieżki zawierające:
RELAYWIDETRACETRACEn-NNie należy ich mylić ze współczesnym:
WIDE1-1WIDEn-NStare aliasy RELAY, zwykłe WIDE oraz TRACE zostały wycofane w ramach New-N Paradigm, ponieważ starsze implementacje generowały z nimi dużą liczbę duplikatów i nie zapewniały wystarczająco dobrej kontroli nad ruchem.
APRS 1.1 oraz późniejsze zalecenia kierują nowe implementacje w stronę trasowalnego WIDEn-N i małych, lokalnie uzasadnionych wartości N.
Artykuły i konfiguracje używające RELAY,WIDE należy traktować jako materiały historyczne.
Ograniczanie zbyt dużych wartości N
Nowoczesny digipeater nie musi bezwarunkowo honorować każdej wartości:
WIDEn-Notrzymanej od użytkownika.
Implementacje mogą mieć lokalne ograniczenia i pułapki dla zbyt dużych wartości, aby pojedyncza źle skonfigurowana stacja nie mogła niepotrzebnie zająć dużej części kanału.
Przykładowo pakiet z bardzo agresywną ścieżką może zostać:
- odrzucony,
- ograniczony do jednego hopu,
- przepisany według lokalnej polityki.
Jest to element ochrony zasobów wspólnego kanału, a nie zmiana podstawowego znaczenia WIDEn-N.
Maksymalna długość ścieżki
AX.25 pozwala umieścić maksymalnie osiem adresów digipeaterów.
Ma to znaczenie dla trasowalnego WIDEn-N, ponieważ kolejne digipeatery mogą wstawiać swoje znaki do ścieżki.
Jeżeli lista adresów jest już pełna, implementacja nie może bez końca dodawać następnych elementów.
Referencyjny algorytm uwzględnia ten limit podczas przepisywania ścieżki.
Nowe systemy nie powinny tworzyć sztucznie długich tras. W praktycznym APRS celem jest skuteczne dotarcie do lokalnej sieci, a nie maksymalizacja liczby hopów.
Opóźnione i “viscous” digipeating
Niektóre implementacje stosują dodatkowy mechanizm opóźnionej retransmisji.
Digipeater:
- kwalifikuje pakiet do retransmisji,
- nie nadaje go natychmiast,
- przez krótki czas nasłuchuje, czy inny digipeater nie retransmituje tej samej ramki,
- anuluje własną transmisję, jeżeli usłyszy odpowiednią kopię.
Takie rozwiązanie może ograniczyć liczbę równoczesnych retransmisji w sieci.
Nie jest to podstawowy element formatu APRS ani AX.25. Jest strategią implementacyjną stosowaną przez niektóre programy i urządzenia.
Co właściwie zmienia digipeater?
Dla współczesnego, standardowego digipeatingu najważniejszą zasadę można sprowadzić do jednego zdania:
Digipeater przekazuje ten sam pakiet, zmieniając tylko informacje potrzebne do obsługi ścieżki AX.25.
Przykład:
przed:SQ9MDD-7>APBOX0,WIDE2-2:!5213.45N/02100.12E>Test
po pierwszym digi:SQ9MDD-7>APBOX0,SR5AAA*,WIDE2-1:!5213.45N/02100.12E>TestNie zmieniły się:
SQ9MDD-7 Source AddressAPBOX0 Destination Address!5213.45N/02100.12E>Test InformationZmieniła się wyłącznie ścieżka:
WIDE2-2na:
SR5AAA*,WIDE2-1To rozdzielenie jest kluczowe dla poprawnego działania trasowania, śledzenia drogi pakietu i tłumienia duplikatów.
Źródła
Podstawą tego artykułu są:
