Проучване на VoIP двигателя на Mediastreamer2. част 8

Материалът на статията е взет от моя дзен канал.

Проучване на VoIP двигателя на Mediastreamer2. част 8

RTP структура на пакета

В последния Статия ние използваме TShark извърши улавяне на RTP пакети, които бяха обменени между нашия приемник и предавател. Е, в този ще рисуваме елементите на опаковката в различни цветове и ще говорим за тяхното предназначение.

Нека да разгледаме същия пакет, но с цветни полета и обяснителни етикети:
Проучване на VoIP двигателя на Mediastreamer2. част 8

В долната част на списъка байтовете, които съставляват RTP пакета, са оцветени, а това от своя страна е полезният товар на UDP пакета (заглавието му е оградено в черно). Цветният фон показва байтовете на RTP хедъра, а блокът от данни, който съдържа полезния товар на RTP пакета, е маркиран в зелено. Данните се представят в шестнадесетичен формат. В нашия случай това е аудио сигнал, компресиран по u-закона (mu-закон), т.е. една проба има размер от 1 байт. Тъй като използвахме честотата на семплиране по подразбиране (8000 Hz), с честота на пакети от 50 Hz, всеки RTP пакет трябва да съдържа 160 байта полезен товар. Ще видим това, като преброим байтовете в зелената зона, трябва да има 10 реда от тях.

Според стандарта количеството данни в полезния товар трябва да е кратно на четири или с други думи трябва да съдържа цял брой четирибайтови думи. Ако се случи, че вашият полезен товар не отговаря на това правило, тогава трябва да добавите байтове с нулева стойност в края на полезния товар и да зададете бита Padding. Този бит се намира в първия байт на RTP хедъра и е оцветен в тюркоазен цвят. Имайте предвид, че всички байтове на полезен товар са 0xFF, така изглежда мълчанието на u-закона.

Хедърът на RTP пакета се състои от 12 задължителни байта, но в два случая може да бъде по-дълъг:

  • Когато пакетът носи аудиосигнал, получен чрез смесване на сигнали от няколко източника (RTP потоци), след първите 12 байта на заглавката има таблица със списък на идентификатори на източника, чиито полезни натоварвания са използвани за създаване на полезния товар на този пакет. В този случай в долните четири бита на първия байт на заглавката (поле Идентификаторите на допринасящия източник се броят) показва броя на източниците. Размерът на полето е 4 бита, така че таблицата може да съдържа до 15 идентификатора на източника. Всеки от които заема 4 байта. Тази таблица се използва при настройка на конферентен разговор.

  • Когато заглавието има разширение . В този случай битът е зададен в първия байт на заглавката X. В разширената заглавка, след таблицата на участниците (ако има такава), има разширена заглавка от една дума, последвана от разширените думи. Разширението е колекция от байтове, които можете да използвате за прехвърляне на допълнителни данни. Стандартът не определя формата на тези данни - те могат да бъдат всякакви. Например, това може да са някои допълнителни настройки за устройството, което получава RTP пакети. За някои приложения обаче са разработени разширени стандарти за заглавки. Това се прави например за комуникации в стандарта ED-137 (Стандарти за оперативна съвместимост за VoIP ATM компоненти).

Сега нека разгледаме по-подробно заглавните полета. По-долу има канонична картина със структурата на RTP заглавката, на която също не можах да устоя и боядисах в същите цветове.

Проучване на VoIP двигателя на Mediastreamer2. част 8
VER — номер на версията на протокола (текуща версия 2);

P - флаг, който се задава в случаите, когато RTP пакетът е допълнен с празни байтове в края;

X - флаг, че заглавката е разширена;

CC — съдържа броя на CSRC идентификаторите след постоянния хедър (след думи 1..3), таблицата не е показана на фигурата;

M — маркер за началото на кадър или наличието на реч в канала (ако се използва детектор за пауза в речта). Ако приемникът не съдържа детектор за пауза в речта, тогава този бит трябва да бъде постоянно зададен;

PTYPE - определя формата на полезния товар;

Пореден номер - номер на пакет, използван за възстановяване на реда, в който се възпроизвеждат пакетите, тъй като реалната ситуация е, когато пакетите могат да достигнат до получателя в грешен ред, в който са били изпратени. Първоначалната стойност трябва да е произволна, това се прави така, че ако RTP потокът е криптиран, ще бъде трудно да бъде хакнат. Освен това това поле ви позволява да откривате пропуснати пакети;

Timestamp - клеймо за време. Времето се измерва в сигнални проби, т.е. ако една поредица съдържа 160 проби, тогава времето на следващата поредица ще бъде повече с 160. Първоначалната стойност на времевата маркировка трябва да е произволна;

SSRC — идентификатор на източника на пакета, трябва да е уникален. По-добре е да го генерирате на случаен принцип, преди да стартирате RTP потока.

Ако разработите свой собствен RTP предавател или приемник, ще трябва да преглеждате пакетите си повече от веднъж, за да увеличите производителността. Препоръчвам ви да научите как да използвате филтриране на пакети в TShark, то ви позволява да улавяте само онези пакети, които са на интерес за вас. В среда, в която десетки RTP устройства работят в мрежата, това е много ценно. В командния ред на TShark опциите за филтриране се задават с опцията "-f". Използвахме тази опция, когато искахме да уловим пакети от порт 8010:
-f "udp port 8010"
Параметрите за филтриране по същество са набор от критерии, на които трябва да отговаря "уловеният" пакет. Условието може да провери адреса, порта, стойността на определен байт в пакета. Условията могат да се комбинират с логически операции "И", "ИЛИ" и др. Много мощен инструмент.

Ако искате да видите динамиката на промените в полето в партиди, ще трябва да дублирате изхода TShark към файл, както е показано в последната статия, чрез предаване на изхода TShark на входа мишена. След това отворете регистрационния файл с по-малко, vim или друг инструмент, който може бързо да работи с огромни текстови файлове и да търси низове, можете да разберете всички нюанси на поведението на пакетните полета в RTP поток.

Ако трябва да слушате сигнала, предаван от RTP потока, тогава трябва да използвате версията TShark с визуален интерфейс Wireshark. С прости манипулации с мишката можете да слушате и виждате вълновата форма на сигнала. Но при едно условие - ако е кодиран в u-law или a-low формат.

Следващия Статия ние ще направим дуплекс домофон с вас. Запасете се с чифт слушалки и един събеседник.

Източник: www.habr.com

Добавяне на нов коментар