Poznawanie silnika Mediastreamer2 VoIP. Część 8

Materiał artykułu pochodzi z mojego kanał zen.

Poznawanie silnika Mediastreamer2 VoIP. Część 8

Struktura pakietu RTP

W przeszłości Artykuł Używamy TShark wykonał przechwytywanie pakietów RTP, które były wymieniane między naszym odbiornikiem a nadajnikiem. Otóż ​​w tym pomalujemy elementy opakowania na różne kolory i porozmawiamy o ich przeznaczeniu.

Rzućmy okiem na to samo opakowanie, ale z kolorowymi marginesami i objaśniającymi etykietami:
Poznawanie silnika Mediastreamer2 VoIP. Część 8

Na dole listy bajty tworzące pakiet RTP są podbarwione, a to z kolei stanowi ładunek pakietu UDP (jego nagłówek jest zakreślony na czarno). Kolorowe tła wskazują bajty nagłówka RTP, a blok danych zawierający ładunek pakietu RTP jest podświetlony na zielono. Dane prezentowane są w formacie szesnastkowym. W naszym przypadku jest to sygnał audio skompresowany zgodnie z u-law (mu-law), tj. jedna próbka ma rozmiar 1 bajta. Ponieważ zastosowaliśmy domyślną częstotliwość próbkowania (8000 Hz), przy częstotliwości pakietów 50 Hz, każdy pakiet RTP powinien zawierać 160 bajtów ładunku. Zobaczymy to licząc bajty w zielonym obszarze, powinno ich być 10 linii.

Zgodnie ze standardem ilość danych w ładunku musi być wielokrotnością czterech, czyli innymi słowy musi zawierać całkowitą liczbę czterobajtowych słów. Jeśli zdarzy się, że twój ładunek nie pasuje do tej reguły, musisz dodać bajty o wartości zerowej na końcu ładunku i ustawić bit Padding. Ten bit znajduje się w pierwszym bajcie nagłówka RTP i ma kolor turkusowy. Zauważ, że wszystkie bajty ładunku to 0xFF, tak właśnie wygląda cisza u-law.

Nagłówek pakietu RTP składa się z 12 obowiązkowych bajtów, ale w dwóch przypadkach może być dłuższy:

  • Gdy pakiet przenosi sygnał audio uzyskany przez zmiksowanie sygnałów z kilku źródeł (strumieni RTP), to po pierwszych 12 bajtach nagłówka znajduje się tabela z listą identyfikatorów źródeł, których ładunki użyte zostały do ​​utworzenia ładunku tego pakietu. W tym przypadku w dolnych czterech bitach pierwszego bajtu nagłówka (field Liczą się identyfikatory źródeł wnoszących wkład) wskazuje liczbę źródeł. Rozmiar pola wynosi 4 bity, więc tabela może zawierać do 15 identyfikatorów źródła. Każdy z nich zajmuje 4 bajty. Ta tabela jest używana podczas konfigurowania połączenia konferencyjnego.

  • Gdy tytuł ma rozszerzenie . W tym przypadku bit jest ustawiany w pierwszym bajcie nagłówka X. W rozszerzonym nagłówku, po tabeli uczestników (jeśli istnieje), znajduje się jednowyrazowy nagłówek rozszerzenia, po którym następują słowa rozszerzenia. Rozszerzenie to zbiór bajtów, których można użyć do przesłania dodatkowych danych. Norma nie określa formatu tych danych - może to być dowolny. Mogą to być na przykład dodatkowe ustawienia urządzenia odbierającego pakiety RTP. Jednak dla niektórych aplikacji opracowano rozszerzone standardy nagłówków. Odbywa się to na przykład dla komunikacji w standardzie ED-137 (Standardy interoperacyjności dla komponentów VoIP ATM).

Przyjrzyjmy się teraz bardziej szczegółowo polom nagłówka. Poniżej kanoniczny obrazek ze strukturą nagłówka RTP, któremu również nie mogłem się oprzeć i pomalowałem w te same kolory.

Poznawanie silnika Mediastreamer2 VoIP. Część 8
VER — numer wersji protokołu (bieżąca wersja 2);

P - flaga ustawiana w przypadkach, gdy pakiet RTP jest uzupełniany pustymi bajtami na końcu;

X - flaga, że ​​nagłówek jest rozszerzony;

CC — zawiera liczbę identyfikatorów CSRC po stałym nagłówku (po słowach 1..3), tabela nie jest pokazana na rysunku;

M — znacznik początku ramki lub obecności mowy w kanale (w przypadku zastosowania detektora pauzy w mowie). Jeżeli odbiornik nie zawiera detektora pauzy w mowie, to ten bit powinien być ustawiony na stałe;

PTYP - określa format ładunku;

Numer sekwencji - numer pakietu, używany do przywracania kolejności odtwarzania pakietów, ponieważ w rzeczywistości pakiety mogą dotrzeć do odbiorcy w niewłaściwej kolejności, w jakiej zostały wysłane. Wartość początkowa musi być losowa, odbywa się to tak, że jeśli strumień RTP jest zaszyfrowany, trudno będzie go zhakować. To pole umożliwia również wykrywanie pominiętych pakietów;

Sygnatura czasu - znak czasu. Czas mierzony jest w próbkach sygnału, tj. jeśli pakiet zawiera 160 próbek, znacznik czasu następnego pakietu będzie większy o 160. Początkowa wartość znacznika czasu musi być losowa;

SSRC — identyfikator źródła pakietu, musi być unikalny. Lepiej wygenerować go losowo przed uruchomieniem strumienia RTP.

Jeśli opracujesz własny nadajnik lub odbiornik RTP, będziesz musiał przeglądać swoje pakiety więcej niż jeden raz, aby zwiększyć produktywność. Polecam nauczyć się korzystać z filtrowania pakietów w TShark, pozwala to przechwytywać tylko te pakiety, które są zainteresowanie dla ciebie. W środowisku, w którym w sieci działają dziesiątki urządzeń RTP, jest to bardzo cenne. W wierszu poleceń TShark opcje filtrowania są określane za pomocą opcji „-f”. Użyliśmy tej opcji, gdy chcieliśmy przechwycić pakiety z portu 8010:
-f "udp port 8010"
Parametry filtrowania to zasadniczo zestaw kryteriów, które musi spełniać „przechwycony” pakiet. Warunek może sprawdzić adres, port, wartość określonego bajtu w pakiecie. Warunki można łączyć za pomocą operacji logicznych „AND”, „OR” itp. Bardzo potężne narzędzie.

Jeśli chcesz zobaczyć dynamikę zmian pola w partiach, musisz zduplikować dane wyjściowe TShark do pliku, jak pokazano w ostatnim artykule, przekazując dane wyjściowe TShark przy wejściu trójnik. Następnie otwórz plik dziennika za pomocą mniej, vim lub inne narzędzie, które może szybko pracować z dużymi plikami tekstowymi i wyszukiwać ciągi znaków, możesz poznać wszystkie niuanse zachowania pól pakietów w strumieniu RTP.

Jeśli chcesz słuchać sygnału transmitowanego przez strumień RTP, musisz użyć wersji TShark z interfejsem wizualnym Wireshark. Za pomocą prostych manipulacji myszką możesz słuchać i widzieć przebieg sygnału. Ale pod jednym warunkiem - jeśli jest zakodowany w formacie u-law lub a-low.

Następny Artykuł wykonamy z Tobą domofon dwustronny. Zaopatrz się w parę zestawów słuchawkowych i jednego rozmówcę.

Źródło: www.habr.com

Dodaj komentarz