Взгля­ни на небо! Воз­можно, над тво­ей головой каж­дые нес­коль­ко минут будет про­летать самолет, а то и не один. Я живу недале­ко от аэро­пор­та, и воз­душный тра­фик в моем рай­оне осо­бен­но силь­ный. Сер­висы вро­де Flightradar24 уди­витель­но точ­но показы­вают информа­цию о самоле­тах в воз­духе, потому что получа­ют дан­ные по про­токо­лу ADS-B. Это мож­но делать самос­тоятель­но, и сегод­ня я покажу как.

Каж­дый, конеч­но, летал на самоле­те или видел его хоть раз в сво­ей жиз­ни. Боль­шие метал­личес­кие пти­цы кру­жат над всей пла­нетой и дос­тавля­ют сот­ни мил­лионов людей в раз­ные час­ти све­та. Так было не всег­да: еще каких‑то 100 лет назад люди мог­ли переме­щать­ся толь­ко по зем­ле, а свер­хна­деж­ных летатель­ных аппа­ратов не было.

Уже пос­ле изоб­ретения самоле­тов и начала ком­мерчес­ких рей­сов ста­ло понят­но, что надо как‑то отсле­живать все находя­щиеся в воз­духе суд­на, ина­че ава­рий не избе­жать. Радары или тем более визу­аль­ное наб­людение для это­го годят­ся пло­хо, и в ход пош­ла ради­освязь. Теперь на бор­ту каж­дого самоле­та сто­ит ави­ацион­ный тран­спон­дер. Он силь­но облегча­ет работу дис­петче­рам и пилотам и поз­воля­ет в полете переда­вать дан­ные с бор­товых дат­чиков и получать ука­зания с зем­ли.

Прос­тым язы­ком ави­ацион­ный тран­спон­дер — это устрой­ство дву­нап­равлен­ной ради­освя­зи, которое дела­ет две вещи:

  1. От­веча­ет на зап­росы назем­ных стан­ций: ког­да дис­петчер зап­рашива­ет дан­ные, а тран­спон­дер отве­чает ему в авто­мати­чес­ком режиме. Зап­рос дан­ных еще называ­ется ин­терро­гаци­ей (это сло­во в перево­де с англий­ско­го озна­чает «доп­рос сви­дете­ля»).
  2. Слу­жит ради­омаяком воз­душно­го суд­на: в этом режиме тран­спон­дер раз в некото­рое вре­мя переда­ет информа­цию о себе, нап­ример мес­тополо­жение или ско­рость.

Су­щес­тву­ют раз­ные поколе­ния, они же режимы тран­спон­деров. Каж­дый из них соз­давал­ся для раз­ных целей и име­ет свою струк­туру сиг­нала, хотя более поз­дние режимы под­держи­вают все то же, что и более ран­ние (при этом сиг­налы этих про­токо­лов несов­мести­мы). Все­го есть пять основных режимов:

  • Mode A переда­ет толь­ко иден­тифика­цион­ный номер летатель­ного аппа­рата. Этот номер может быть жес­тко зашит в тран­спон­дер или наз­начен дис­петче­ром перед вылетом. На прак­тике исполь­зовал­ся толь­ко для отсле­жива­ния того, в каком аэро­пор­ту находит­ся самолет.
  • Mode C, соз­данный поз­же, поз­волял отсле­живать не толь­ко номер аппа­рата, но и высоту его полета. Глав­ное его пре­иму­щес­тво было в том, что он поз­волял получать высоту самоле­та авто­мати­чес­ки, не спра­шивая ее у пилота.
  • Mode S — это сов­ремен­ный режим, который сей­час исполь­зует­ся на 99% всех самоле­тов. Поз­воля­ет не толь­ко получать дан­ные с бор­товых дат­чиков, но и отпра­вить дан­ные обратно на самолет. В этом режиме самолет име­ет пол­ную двус­торон­нюю связь с назем­ными стан­циями. ADS-B, который мы будем рас­смат­ривать сегод­ня, явля­ется частью это­го режима.
  • Mode 4 и Mode 5 более прод­винутые, но исполь­зуют­ся толь­ко воен­ными. Оба они защище­ны куда луч­ше (то есть вооб­ще хоть как‑то защище­ны, в отли­чие от прош­лых), и поковы­рять­ся там не получит­ся.

Вни­матель­ный читатель сра­зу заметит, что в моем спис­ке нет Mode B, как и Mode D, — оба эти режима про­сущес­тво­вали очень недол­го, так что рас­смат­ривать их нет смыс­ла.

info

Ты можешь купить себе собс­твен­ный тран­спон­дер — их мож­но лег­ко най­ти на eBay по цене до пяти тысяч дол­ларов.

 

ADS-B

Ес­ли вни­матель­но почитать опи­сание Mode S, мож­но заметить, что сооб­щения, которые переда­ются по это­му про­токо­лу, дол­жны отправ­лять­ся тран­спон­дером по зап­росу назем­ного дис­петче­ра — все, кро­ме ADS-B (Automatic Dependent Surveillance — Broadcast). На рус­ский язык это воль­но перево­дит­ся как «авто­мати­чес­кая сис­тема сле­жения за самоле­тами». Сло­во Broadcast тут озна­чает, что сооб­щения переда­ются всем под­ряд, а не кому‑то кон­крет­ному, и это откры­вает перед нами воз­можность их при­нимать.

Мно­гие выделя­ют ADS-B как отдель­ный режим работы тран­спон­дера, на уров­не Mode A, C или S, но на самом деле это все­го лишь часть одно­го боль­шого режима S. Сооб­щение ADS-B — это прос­то сооб­щение Mode S, име­ющее тип 17.

Типы сообщений Mode S

В этой статье рас­смат­рива­ется толь­ко ADS-B (тип 17), но для обще­го раз­вития будет нелиш­ним знать и про дру­гие типы сооб­щений Mode S:

  • All-call reply (тип 11) — в этом сооб­щении по зап­росу опе­рато­ра переда­ется уни­каль­ный 24-бит­ный иден­тифика­тор тран­спон­дера. Этот номер обыч­но про­шива­ется на заводе и не меня­ется, но в воен­ных целях этот номер иног­да под­меня­ют.
  • ACAS short and long replies (тип 0/16) — сооб­щения для пре­дот­вра­щения стол­кно­вений меж­ду самоле­тами. Если тран­спон­дер обна­ружит поб­лизос­ти дру­гой самолет, он отпра­вит опо­веще­ние дру­гим сис­темам, которые смо­гут пре­дот­вра­тить стол­кно­вение в воз­духе.
  • Altitude and identity replies (тип 4/5) — сооб­щение с дан­ными о высоте и позыв­ном (так называ­емый squawk-код, который пилот вво­дит вруч­ную перед полетом).
  • Comm-B (тип 20/21) — это сооб­щения с показа­ниями бор­товых дат­чиков, намечен­ным мар­шру­том и дру­гими дан­ными, которые могут быть полез­ны для управле­ния суд­ном.

Осо­бен­но хит­ро работа­ет ACAS, но раз­говор о нем выходит за рам­ки этой статьи. Если хочешь глуб­же изу­чить тему — отме­чай­ся в ком­мента­риях, и, воз­можно, я напишу про­дол­жение!

Все сооб­щения Mode S переда­ются на самолет на час­тоте 1030 МГц, а на зем­лю — на час­тоте 1090 МГц.

Са­ма ради­опе­реда­ча никак не шиф­рует­ся, а переда­ется мас­са инте­рес­ной информа­ции о мес­тонахож­дении самоле­та, его высоте, ско­рос­ти и дру­гих парамет­рах, так что в какой‑то момент появи­лись сер­висы вро­де Flightradar24, которые сде­лали информа­цию о самоле­тах дос­тупной всем и даром. Сами сер­висы эту информа­цию получа­ют от боль­шого количес­тва дат­чиков, уста­нов­ленных у доб­роволь­цев по все­му миру. Ты тоже можешь стать одним из них — дос­таточ­но прос­то изъ­явить желание и получить от вла­дель­цев сер­виса дат­чик для уста­нов­ки.

 

Физическая структура сигнала

Сиг­налы ADS-B самолет переда­ет на час­тоте 1090 МГц, как и все осталь­ные сиг­налы Mode S. Вто­рая час­тота — 1030 МГц (uplink) — тут не нуж­на, потому что сиг­налы ADS-B переда­ются без зап­роса.

Для кодиро­вания исполь­зует­ся PPM (Pulse-Position Modulation). Гру­бо говоря, в эфир прос­то переда­ются биты, которые мож­но про­читать, сде­лав выбор­ку каж­дые N мик­росекунд. Это хорошо вид­но на изоб­ражении из Википе­дии.

Как работает PPM
Как работа­ет PPM

В ADS-B дли­тель­ность каж­дого такого бита рав­на 0,5 мкс, а зна­чит, мож­но сде­лать выбор­ку каж­дые 0,5 мкс, уви­деть высокий или низ­кий уро­вень каж­дого бита, записать, а потом пре­обра­зовать резуль­тат в бай­ты, что­бы получить исходное сооб­щение. Но это в теории, потому что на прак­тике есть проб­лемы, с которы­ми мы будем раз­бирать­ся по ходу повес­тво­вания.

 

Структура пакета

Ес­ли при­нять дан­ные как есть, получит­ся битовая каша, из которой еще нуж­но вытащить полез­ные дан­ные. Сами они име­ют очень чет­кую струк­туру, так что, если заметить ее пос­тоян­ные час­ти в потоке дан­ных, мож­но будет получить и весь пакет.

Па­кет сос­тоит из пре­амбу­лы и собс­твен­но дан­ных. На кар­тинке выше хорошо вид­но, что пре­амбу­ла идет 8 мкс, а даль­ше в течение 56 или 112 мкс идут дан­ные.

Вступ­ление осо­бен­но важ­но, если вспом­нить, что все самоле­ты веща­ют на одной час­тоте и сиг­налы от них могут при­ходить одновре­мен­но. Проб­лема потери нак­ладыва­ющих­ся сиг­налов реша­ется очень прос­то: если что‑то не ловит­ся, это пой­мает кто‑то дру­гой. При­емни­ков очень мно­го, и пок­рыва­ют они всю оби­таемую пло­щадь Зем­ли, так что, если кон­крет­ный сиг­нал ока­зал­ся слиш­ком сла­бым и не был при­нят на одном при­емни­ке, он будет дос­таточ­но гром­ким для дру­гого при­емни­ка и не потеря­ется. Конеч­но, такой под­ход не озна­чает, что будут получе­ны все сиг­налы, но это и не нуж­но — они регуляр­но пов­торя­ются, и от потери час­ти сиг­налов беды не будет.

Я уже говорил, что каж­дый бит кодиру­ется 0,5 мкс, и это дей­стви­тель­но так, но для упро­щения при­ема была вве­дена условность: 1 нас­тоящий бит кодиру­ется дву­мя по 0,5 мкс. Еди­ница при этом кодиру­ется как 1 и 0, а ноль — как 0 и 1 (то есть дан­ные 1011 будут выг­лядеть как 10011010). Это не усложня­ет при­емник, но защища­ет от помех и поз­воля­ет надеж­но ловить сиг­нал. Без этой доработ­ки переда­ча нес­коль­ких нулей будет выг­лядеть как тишина в эфи­ре, а так при­емник всег­да точ­но видит сиг­нал, даже если переда­ются нули.

 

Структура полезных данных

Пред­положим, мы декоди­рова­ли сиг­нал и наш­ли в нем сооб­щение. Теперь нуж­но декоди­ровать блок полез­ных дан­ных и отсе­ять ненуж­ное (то есть все сооб­щения Mode S, кро­ме ADS-B).

Поля ADS-B
По­ля ADS-B

Дли­на инте­ресу­юще­го нас сооб­щения — 112 мкс, что как раз рав­но 112 бит (спа­сибо двух­битно­му кодиро­ванию!), и делит­ся оно на пять основных бло­ков:

  1. DF (Downlink Format) — код фор­мата переда­чи, 5 бит. Для ADS-B он всег­да равен 17.
  2. CA (Transponder capability) — тип передат­чика и его уро­вень воз­можнос­тей, 3 бита. Нуж­но это поле для того, что­бы дис­петчер знал, какие дан­ные мож­но зап­рашивать у это­го тран­спон­дера. Это поле может иметь зна­чение 0, 4, 5 или 6, а 1–3 и 7 зарезер­вирова­ны для будуще­го исполь­зования. 0 — это тран­спон­дер пер­вого уров­ня, и обыч­но такие тран­спон­деры не име­ют ACAS (сис­темы пре­дот­вра­щения стол­кно­вений). 4 — это тран­спон­дер вто­рого или более совер­шенно­го уров­ня, тоже не име­ющий ACAS, но уме­ющий переда­вать высоту (то есть работать с Mode C и Mode S). 5 и 6 — это тот же 4, но с под­дер­жкой ACAS, который может быть вклю­чен (6) или вык­лючен (5).
  3. ICAO — уни­каль­ный номер самоле­та, 24 бита. Номер нужен для опре­деле­ния отпра­вите­ля сиг­нала. Этот номер однократ­но про­шива­ется на заводе и никог­да не меня­ется в про­цес­се экс­плу­ата­ции, но все же есть ребята, которые уме­ют их менять. Сущес­тву­ют еще воен­ные тран­спон­деры, но на них вооб­ще никакие пра­вила не дей­ству­ют, так что там может быть что угод­но.
  4. ME (Message) — собс­твен­но полез­ная наг­рузка с дан­ными о высоте, ско­рос­ти или чем‑то дру­гим, дли­на — 56 бит. Этот блок мы будем под­робно раз­бирать ниже.
  5. PI (Parity/Interrogator ID) — кон­троль­ная сум­ма, 24 бита.

Поле ME

По­ле ME — это самая инте­рес­ная для нас часть, ведь имен­но тут переда­ются коор­динаты, ско­рость полета, высота и дру­гие дан­ные с бор­товых дат­чиков. 56 бит малова­то для переда­чи всех дан­ных разом, так что у каж­дого сооб­щения свой тип, который ука­зыва­ется в пер­вых пяти битах это­го поля. Получа­ется эда­кая мат­решка: свой фор­мат сооб­щения у Mode S, что­бы обоз­начить ADS-B, и свой фор­мат сооб­щения внут­ри ADS-B, что­бы ска­зать, что за дан­ные внут­ри.

Все­го у ADS-B 31 тип дан­ных, но мы раз­берем толь­ко самые глав­ные.

Код 1–4 — сооб­щение с иден­тифика­цион­ными дан­ными. Там содер­жится позыв­ной и дру­гие дан­ные, свя­зан­ные с регис­тра­цией и опоз­наватель­ными свой­ства­ми самоле­та (нап­ример, лег­кий летатель­ный аппа­рат или тяжелый). Эти позыв­ные показы­вают­ся на тер­миналах в аэро­пор­тах и пред­став­ляют собой номер рей­са. Декоди­рован­ное сооб­щение выг­лядит при­мер­но так:

ME : ADSB Msg Type : (4) Aircraft Identification and Category
CAT: Aircraft Cat : (0:0) No ADS-B Emitter Category Information
flight Number : SIA224
Wake Type : (TC:4 CAT:0) - No Information Provided

Код 5–8 — позиция на зем­ле. Эти дан­ные обыч­но исполь­зуют­ся, что­бы знать, где и на какой полосе находит­ся самолет. В сооб­щении мож­но най­ти широту, дол­готу, ско­рость и нап­равле­ние дви­жения самоле­та. При­мер декоди­рован­ного сооб­щения:

ME : ADSB Msg Type : (7) Surface Position
Super Sonic? : No
velocity : 0.00
EW/NS VEL : (East/west: 0) (North/South: 0)
heading : 253.12
Before Decoding : Half of vehicle location
UTC Sync? : false
CPR Frame : Odd
CPR latitude : 8675
CPR longitude : 17674

Код 9–19 — позиция в воз­духе (обыч­но переда­ется вмес­те с высотой). Важ­но понимать, что най­ти в при­мере ниже при­выч­ную широту и дол­готу нель­зя, пос­коль­ку исполь­зует­ся корот­кая нотация коор­динат вмес­то нор­маль­ной. Что делать с такими коор­дината­ми — рас­ска­жу ниже.

ME : ADSB Msg Type : (14) Airborne Position (with Barometric altitude)
Containment Radius: 1852.00 metres
Surveillance : (status:0) No condition information
NIC Supplement B : 0
Nav Integrity : 5
AC: altitude : 3100 feet (q bit: false, m bit: false)
Before Decoding : Half of vehicle location
UTC Sync? : true
CPR Frame : Odd
CPR latitude : 101906
CPR longitude : 103292

Код 19 — ско­рость воз­душно­го суд­на.

ME : ADSB Msg Type : (19) Airborne velocity
SUB: Sub Type : 3
Intent Change : false
IFR Capable : true
Nav Accuracy Cat : 0
heading : 8.44
Super Sonic? : No
velocity : 136.00
EW/NS VEL : (East/west: 0) (North/South: 0)
Vertical Rate : -768
HAE Delta : Unavailable

Раз­бирать по битам струк­туру каж­дого сооб­щения мож­но очень дол­го, так что, если тебе дей­стви­тель­но инте­рес­но, мож­но поис­кать готовые пар­серы ADS-B на GitHub и под­смот­реть струк­туру там. Нам же сей­час раз­бирать стро­ение этих сооб­щений нет смыс­ла еще и потому, что переда­вать мы пока что ничего не будем, а углублять­ся в тон­кости про­токо­ла не хочет­ся.

 

CPR, или как усложнить простое

Для точ­ного опре­деле­ния коор­динат обыч­но исполь­зуют­ся два чис­ла — широта и дол­гота. 32 бита float обес­печива­ют точ­ность до семи зна­ков пос­ле запятой, что в перес­чете на коор­динаты дает точ­ность поряд­ка нес­коль­ких сан­тимет­ров, а если чуть умень­шить точ­ность (до десят­ков сан­тимет­ров), то два таких чис­ла как раз мож­но запих­нуть в 56 бит сооб­щения, и не при­дет­ся городить неведо­мо что с ком­пак­тны­ми коор­дината­ми. Точ­ность даже в десят­ки сан­тимет­ров для самоле­та, летяще­го со ско­ростью боль­ше 100 м/с, прос­то огромна, так что, чем руководс­тво­вались авто­ры про­токо­ла, понять слож­но.

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.


  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    5 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии