کاوش در موتور VoIP Mediastreamer2. قسمت 8

مطالب مقاله از من گرفته شده است کانال ذن.

کاوش در موتور VoIP Mediastreamer2. قسمت 8

ساختار بسته RTP

در آخر مقاله استفاده می کنیم تی شارک ضبط بسته های RTP که بین گیرنده و فرستنده ما رد و بدل می شد را انجام داد. خوب، در این یکی عناصر بسته را در رنگ های مختلف رنگ می کنیم و در مورد هدف آنها صحبت می کنیم.

بیایید نگاهی به همان بسته بیندازیم، اما با حاشیه های رنگی و برچسب های توضیحی:
کاوش در موتور VoIP Mediastreamer2. قسمت 8

در انتهای فهرست، بایت‌هایی که بسته RTP را تشکیل می‌دهند، رنگ‌آمیزی دارند و این به نوبه خود محموله بسته UDP است (سرصفحه آن به رنگ سیاه است). پس‌زمینه‌های رنگی بایت‌های هدر RTP را نشان می‌دهند و بلوک داده‌ای که حاوی بار بسته RTP است با رنگ سبز برجسته می‌شود. داده ها در قالب هگزادسیمال ارائه شده است. در مورد ما، این یک سیگنال صوتی است که مطابق با قانون u (mu-law) فشرده شده است. اندازه یک نمونه 1 بایت است. از آنجایی که ما از نرخ نمونه برداری پیش فرض (8000 هرتز) استفاده کردیم، با نرخ بسته 50 هرتز، هر بسته RTP باید دارای 160 بایت بار بار باشد. این را با شمارش بایت های ناحیه سبز خواهیم دید که باید 10 خط از آنها وجود داشته باشد.

بر اساس این استاندارد، مقدار داده موجود در پیلود باید مضربی از چهار باشد یا به عبارتی شامل یک عدد صحیح کلمات چهار بایتی باشد. اگر اتفاق می افتد که بار شما با این قانون مطابقت ندارد، باید بایت هایی با ارزش صفر به انتهای بار اضافه کنید و بیت Padding را تنظیم کنید. این بیت در اولین بایت هدر RTP قرار دارد و به رنگ فیروزه ای است. توجه داشته باشید که تمام بایت های بارگذاری 0xFF هستند، که سکوت u-law شبیه آن است.

هدر بسته RTP از 12 بایت اجباری تشکیل شده است، اما در دو مورد می تواند طولانی تر باشد:

  • هنگامی که یک بسته یک سیگنال صوتی را حمل می کند که از ترکیب سیگنال های چندین منبع (جریان های RTP) به دست می آید، پس از 12 بایت اول هدر، جدولی با لیستی از شناسه های منبع وجود دارد که بارهای بارگذاری آنها برای ایجاد بارگذاری این بسته استفاده شده است. در این حالت، در چهار بیت پایینی بایت اول هدر (فیلد تعداد شناسه های منبع مشارکت کننده) تعداد منابع را نشان می دهد. اندازه فیلد 4 بیت است، بنابراین جدول می تواند حداکثر 15 شناسه منبع داشته باشد. که هر کدام 4 بایت را اشغال می کند. این جدول هنگام تنظیم یک تماس کنفرانسی استفاده می شود.

  • وقتی عنوان دارای پسوند باشد. در این حالت، بیت در اولین بایت هدر تنظیم می شود X. در سربرگ توسعه یافته، بعد از جدول شرکت کنندگان (در صورت وجود)، یک عنوان پسوند یک کلمه ای و پس از آن کلمات پسوندی وجود دارد. افزونه مجموعه ای از بایت ها است که می توانید از آنها برای انتقال داده های اضافی استفاده کنید. استاندارد قالب این داده ها را مشخص نمی کند - می تواند هر چیزی باشد. به عنوان مثال، ممکن است برخی تنظیمات اضافی برای دستگاهی باشد که بسته های RTP را دریافت می کند. با این حال، برای برخی از برنامه ها، استانداردهای هدر توسعه یافته توسعه یافته است. این کار برای مثال برای ارتباطات در استاندارد انجام می شود ED-137 (استانداردهای قابلیت همکاری برای اجزای خودپرداز VoIP).

حالا بیایید فیلدهای هدر را با جزئیات بیشتری بررسی کنیم. در زیر یک تصویر متعارف با ساختار هدر 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"
پارامترهای فیلتر اساساً مجموعه ای از معیارها هستند که یک بسته "گرفته شده" باید مطابقت داشته باشد. شرط می تواند آدرس، پورت، مقدار یک بایت خاص در بسته را بررسی کند. شرایط را می توان با عملیات منطقی "AND"، "OR" و غیره ترکیب کرد. یک ابزار بسیار قدرتمند.

اگر می‌خواهید دینامیک تغییرات میدان را در دسته‌ها مشاهده کنید، باید خروجی را کپی کنید تی شارک به یک فایل، همانطور که در آخرین مقاله نشان داده شده است، با ارسال خروجی تی شارک در ورودی توپ را روی گوه. بعد، فایل لاگ را با باز کنید کمتر، vim یا ابزار دیگری که می تواند به سرعت با فایل های متنی بزرگ کار کند و رشته ها را جستجو کند، می توانید تمام تفاوت های ظریف رفتار فیلدهای بسته را در یک جریان RTP پیدا کنید.

اگر نیاز به گوش دادن به سیگنال ارسال شده توسط جریان RTP دارید، باید از نسخه استفاده کنید تی شارک با رابط بصری Wireshark. با دستکاری های ساده ماوس، می توانید شکل موج سیگنال را بشنوید و ببینید. اما به یک شرط - اگر با فرمت u-law یا a-low کدگذاری شده باشد.

بعد مقاله ما با شما یک اینترکام دوبلکس خواهیم ساخت. یک جفت هدست و یک همکار تهیه کنید.

منبع: www.habr.com

اضافه کردن نظر