UDP-Lite

  UDP-Lite ( Lightweight User Datagram Protocol ) to protokół bezpołączeniowy , który umożliwia dostarczenie potencjalnie uszkodzonego ładunku danych do aplikacji zamiast odrzucania go przez stację odbiorczą. Jest to przydatne, ponieważ umożliwia podejmowanie decyzji o integralności danych w warstwie aplikacji (aplikacji lub kodeka ), gdzie znaczenie bitów jest zrozumiałe. Protokół UDP-Lite jest opisany w dokumencie RFC 3828 .

Protokół

UDP-Lite jest oparty na protokole User Datagram Protocol (UDP), ale w przeciwieństwie do UDP, w którym całość lub żaden pakiet nie jest chroniony sumą kontrolną, UDP-Lite pozwala na częściowe sumy kontrolne , które obejmują tylko część datagramu (dowolna liczba oktetów na początku pakietu), a zatem dostarczy pakiety, które zostały częściowo uszkodzone. Jest przeznaczony do protokołów multimedialnych, takich jak Voice over IP (VoIP) lub strumieniowe przesyłanie wideo, w których odebranie pakietu z uszkodzonym ładunkiem jest lepsze niż nieotrzymanie żadnego pakietu. Dla konwencjonalnego UDP i protokołu kontroli transmisji (TCP), pojedynczy błędny bit spowoduje „złą” sumę kontrolną, co oznacza, że ​​cały pakiet musi zostać odrzucony: w ten sposób błędy bitowe są „promowane” do błędów całego pakietu, nawet jeśli uszkodzenie danych jest trywialne. Do obliczania sumy kontrolnej UDP-Lite używa tego samego algorytmu sumy kontrolnej, co UDP (i TCP).

Nowoczesne kodeki multimedialne, takie jak G.718 i Adaptive Multi-Rate (AMR) dla audio oraz H.264 i MPEG-4 dla wideo, mają już wbudowane funkcje odporności na składnię i strukturę strumienia. Dzięki temu kodek może (a) wykryć błędy w strumieniu i (b) potencjalnie poprawić lub przynajmniej ukryć błąd podczas odtwarzania. Te kodeki są idealnymi partnerami dla UDP-Lite, ponieważ są zaprojektowane do pracy z uszkodzonym strumieniem danych i lepiej jest, aby te kodeki otrzymały około 200 bajtów, w których kilka bitów jest uszkodzonych, zamiast ukrywać utratę całego pakiet, który został odrzucony z powodu złej sumy kontrolnej. Warstwa aplikacji rozumie znaczenie danych, gdzie transport widzi tylko pakiety UDP. Oznacza to, że w razie potrzeby można dodać ochronę przed błędami na wyższej warstwie, na przykład za pomocą a korekcji błędów w przód . Aplikacja jest najlepszym miejscem do decydowania, które części strumienia są najbardziej wrażliwe na błędy i odpowiedniego ich zabezpieczania, zamiast posiadania jednej sumy kontrolnej „brutalnej siły”, która obejmuje wszystko jednakowo. Przykład tego można zobaczyć w badaniach Hammera i in. gdzie UDP-Lite jest sprzężony z kodekiem AMR, aby zapewnić lepszą jakość mowy w warunkach stratnej sieci.

Ponieważ większość nowoczesnych warstw łączy chroni przesyłane dane za pomocą silnej cyklicznej kontroli redundancji (CRC) i odrzuca uszkodzone ramki, efektywne wykorzystanie protokołu UDP Lite wymaga, aby warstwa łącza była świadoma przenoszonych danych warstwy sieciowej. Ponieważ żadne obecne stosy IP nie realizują takich międzywarstwowych interakcji, efektywne wykorzystanie protokołu UDP-Lite wymaga obecnie specjalnie zmodyfikowanych sterowników urządzeń. [ potrzebne źródło ]

Identyfikator protokołu IP to 136. UDP-Lite używa tego samego zestawu numerów portów, które zostały przydzielone przez organizację Internet Assigned Numbers Authority (IANA) do użytku przez UDP.

jądrze Linuksa w wersji 2.6.20 dodano obsługę UDP-Lite .

Wsparcie dla UDP-Lite zostało dodane w jądrze FreeBSD od r264212. Zestaw zmian został również przywrócony przez MFC do wersji stabilnej/10 i stał się dostępny we FreeBSD 10.1-RELEASE.

Interfejs API gniazda BSD został rozszerzony o obsługę UDP-Lite przez trzeci parametr wywołania systemowego gniazda : Ustaw go na IPPROTO_UDPLITE , aby zażądać gniazda UDP-Lite:

      int  fd  =  gniazdo  (  PF_INET  ,  SOCK_DGRAM  ,  IPPROTO_UDPLITE  ); 

Można też łatwo ustawić, jaka część pakietu będzie objęta sumą kontrolną (zaczynając od początku łącznie z nagłówkiem):

    
      wartość  int  =  20  ;  /* 8 oktetów nagłówka + 12 oktetów protokołu aplikacji. */   (  void  )  setsockopt  (  fd  ,  SOL_UDPLITE  ,  UDPLITE_SEND_CSCOV  ,  &  val  ,  sizeof  val  ); 

Jeśli w takiej konfiguracji zostanie wysłany pakiet mniejszy niż 12 oktetów, suma kontrolna obejmie cały pakiet.

Po stronie odbierającej gniazdo domyślnie odrzuca wszystkie pakiety, które nie są w pełni pokryte (emulacja UDP). Aby umożliwić mniejszy zasięg, można użyć:

    
      wartość  int  =  20  ;  /* 8 oktetów nagłówka + 12 oktetów protokołu aplikacji. */   (  void  )  setsockopt  (  fd  ,  SOL_UDPLITE  ,  UDPLITE_RECV_CSCOV  ,  &  val  ,  sizeof  val  ); 

Pozwoli to na pakiety, w których suma kontrolna danych użytkownika wynosi co najmniej 12 oktetów. Każdy pakiet o mniejszym zasięgu zostanie po cichu odrzucony jako zły. Jeśli pakiet ma długość pokrycia co najmniej 20 oktetów (łącznie z nagłówkiem) i jego suma kontrolna jest poprawna, zostanie dostarczony do aplikacji (całość lub część ładunku może być nadal uszkodzona, ponieważ może nie być pokryta sumą kontrolną lub ponieważ suma kontrolna była przypadkowo poprawna, ale to drugie jest bardzo mało prawdopodobne.) Jeśli suma kontrolna jest niepoprawna, pakiet zostanie odrzucony, ponieważ w rzeczywistości nie można stwierdzić, czy błąd był wewnątrz danych użytkowych, czy w nagłówku UDP-Lite, więc pakiet może być w rzeczywistości przeznaczony dla innego programu.

Najmniejszy możliwy zasięg to 8 oktetów. Suma kontrolna musi zawierać nagłówki. Pakiety o mniejszym zasięgu będą zawsze odrzucane niezależnie od jakichkolwiek ustawień (ignorując sniffery, które są zainteresowane całym ruchem) jako niezgodne ze standardem.

Wsparcie

UDP-Lite jest obsługiwany przez następujące systemy operacyjne:

  • FreeBSD , od wersji 10.1-RELEASE
  • Linux , od wersji jądra 2.6.20
  • Dostępne również w systemie Windows za pośrednictwem biblioteki innej firmy WULL

Linki zewnętrzne

  • RFC 3828 — Lekki protokół datagramów użytkownika (UDP-Lite)
  • RFC 5097 — MIB dla protokołu UDP-Lite
  • RFC 4019 — RObust Header Compression (ROHC): Profile dla User Datagram Protocol (UDP) Lite
  • RFC 5405 — Wytyczne dotyczące użytkowania UDP emisji pojedynczej dla projektantów aplikacji