Sursă deschisă • Python • AIS NMEA 0183

AISMixer

Platformă de procesare și rutare a fluxurilor AIS

Normalizează · Deduplică · Etichetează · Rutează · Redirecționează

Recepționați fluxuri AIS, transformați traficul receptoarelor într-un singur flux logic controlat și livrați-l către destinațiile UDP egress care au nevoie de el.

Procesarea fluxurilor AIS

De la traficul receptoarelor la un flux curat, cu surse identificabile

AISMixer reunește transportul, asamblarea NMEA, metadatele, deduplicarea și livrarea într-un singur traseu de procesare aproape în timp real.

Ingress flexibil

Recepționează UDP simplu prin IPv4 sau IPv6 și trafic UDPSEC autentificat și criptat. Payload-urile ingress care nu sunt șiruri sunt ignorate înainte de rutare și extragere.

Extragerea propozițiilor AIS

Extrage atât !AIVDM, cât și !AIVDO din ieșirile reale ale receptoarelor și aplicațiilor.

Asamblare multipart

Asamblează mesajele multipart într-o ordine complet arbitrară. Un fragment duplicat exact este idempotent, iar conținutul diferit la un ordinal deja ocupat invalidează generația activă.

Deduplicare aproape în timp real

Suprimă mesajele AIS logice repetate global în modul broadcast sau separat pentru fiecare destinație în modul de rutare. Pentru multipart, decizia este atomică la nivelul grupului.

Metadate TAG controlate

Gestionează determinist metadatele NMEA TAG s, c și g în limitele ciclului de viață, fără a confunda metadatele cu identitatea de rutare.

Redirecționare selectivă

Pentru fiecare IngressEvent acceptat al cărui payload este un șir, folosește un singur snapshot imuabil de rutare și redirecționează fluxul logic către toate ieșirile configurate sau numai către destinațiile UDP egress selectate.

Comportament de referință verificat

Un contract de procesare determinist

Implementarea Python este referința testată pentru comportamentul AISMixer la limita de ingress, pe durata asamblării multipart și în timpul rutării.

Limita de ingress

Evenimentele cu payload de tip șir, inclusiv subclasele str, sunt procesate normal; payload-urile care nu sunt șiruri sunt ignorate înainte de rutare și extragere.

Ciclul de viață multipart

Fragmentele pot sosi în orice ordine. Duplicatele exacte sunt idempotente, conflictele invalidează generația activă, iar expirarea și finalizarea închid starea grupului.

Metadate și rutare

Deduplicarea multipart este atomică la nivelul grupului, starea TAG s/c/g respectă ciclul de viață, iar fiecare eveniment acceptat folosește un singur snapshot imuabil de rutare.

Contractul complet fixează baza verificată pentru implementarea Python și pentru viitoarele verificări diferențiale ale unei implementări native. Citiți contractul comportamental.

Rutare și zone logice

Exprimați politica fluxului prin identitățile surselor

Rutarea logică statică leagă surse ingress denumite de destinații UDP egress denumite, prin seturi de surse reutilizabile și rute ordonate.

Ingress denumitSurse UDP și UDPSEC
Zone logiceSeturi de identități ale surselor
Rute ordonateSelectarea declarativă a destinațiilor
Egress denumitDestinații UDP selectate

Seturi compozabile de surse

Definiți zone cu include, union, intersection și difference.

Logice, nu geografice

Zonele sunt seturi de identități interne ale surselor, nu regiuni pe hartă, filtre MMSI, filtre pentru nave sau reguli aplicate payload-ului.

Calitatea fluxului pentru fiecare destinație

Modul de rutare aplică deduplicarea separat pentru fiecare target_id logic, astfel încât un traseu de livrare să nu suprime altul.

source_id este o identitate internă de rutare. Este separată de valoarea NMEA TAG s emisă în aval.

Controlul rutării la runtime

Modificați rutele active fără a întrerupe planul de date

Un plan de control local opțional, printr-un socket din domeniul Unix, expune operații concise de rutare prin comanda aismixerctl instalată global.

Inspectați starea rutării

Consultați generația activă, starea de activare, zonele logice, rutele ordonate și identitățile destinațiilor.

Înlocuiți sau dezactivați atomic

Validează candidatul complet înainte de a înlocui snapshot-ul imuabil de rutare sau de a reveni la modul legacy broadcast.

Respingeți actualizările depășite

Verificările opționale ale generației împiedică operatorul să suprascrie neintenționat o modificare de rutare mai nouă.

În mod intenționat local și limitat la proces. Rutele modificate la runtime nu persistă după repornire, fișierele de configurare nu sunt rescrise, iar adaptoarele ingress sau egress nu sunt create dinamic. Permisiunile socketului Unix reprezintă limita actuală de autorizare; nu există un token de control la nivelul aplicației.

Controlul punctelor terminale de rețea

Limitați sursele permise și adresele-sursă de ieșire

Controalele simple la nivelul aplicației facilitează integrarea punctelor terminale IPv4 și IPv6 în politica mai largă de firewall și rutare a operatorului.

Ingress allow_from

Limitați listener-ele UDP și UDPSEC la adrese IP literale sau rețele CIDR, inclusiv printr-o regulă explicită de blocare totală.

Adresă de ieșire source_ip

Asociați un socket egress cu o adresă-sursă IPv4 sau IPv6 literală și limitați rezolvarea destinației la aceeași familie de adrese.

Parte a unei limite stratificate

Aceste politici completează regulile de firewall și rutare ale sistemului de operare; nu le înlocuiesc.

source_ip reprezintă asocierea unei adrese-sursă, nu selectarea interfeței, a tabelei de rutare, marcarea socketului sau SDN.

nmea_sproxy și receptoare AIS fizice

Conectați receptoare AIS de rețea sau fizice prin nmea_sproxy

nmea_sproxy este proxy-ul de la stație care conectează o singură sursă AIS locală la o singură destinație AISMixer configurată.

Receptor AIS fizic
port serial sau COM virtual prin USB
nmea_sproxy
UDPSEC sau UDP simplu declarat explicit ca sigur
AISMixer

Intrări locale implementate

  • UDP de la un receptor local conectat la rețea sau de la o aplicație AIS.
  • Intrare directă prin portul serial fizic.
  • Intrare COM virtuală prin USB de la un receptor AIS fizic.

Ieșiri implementate

  • UDPSEC autentificat și criptat, cu verificarea activității și reconectare.
  • UDP simplu configurat explicit pentru o rețea LAN, un VPN sau o limită echivalentă de încredere.

Model clar al relației

O intrare locală este asociată unei singure ieșiri configurate. nmea_sproxy nu mixează, nu distribuie către mai multe ieșiri, nu rutează, nu deduplică, nu asamblează AIS multipart și nu rescrie metadatele TAG.

Un receptor de rețea poate trimite UDP local către nmea_sproxy sau direct către AISMixer, în funcție de instalare. Procesul principal AISMixer nu citește direct porturi seriale. UDP-ul simplu de încredere nu oferă criptare UDPSEC, autentificare, protecție împotriva reluării sau protocol de verificare a activității.

Instalare și operare

Un ciclu de viață Linux nativ, conceput pentru instalări reale

Instalarea gestionată din depozit menține aliniate fișierele runtime, starea operatorului, integrarea systemd și controlul local al rutării.

Serviciu systemd gestionat din depozit

Serviciul nativ creează /run/aismixer cât timp AISMixer rulează și acceptă socketul local opțional de control.

Instalare, actualizare și dezinstalare

Scripturile pentru ciclul de viață gestionează rularea ca root sau prin sudo și întrețin fișierele runtime și unitățile de serviciu instalate.

Starea operatorului este păstrată

Fluxurile normale de instalare, actualizare și dezinstalare păstrează configurația operatorului și cheile criptografice.

CLI global pentru rutare

Fluxul de instalare plasează aismixerctl în /usr/local/bin pentru operații locale de rutare.

Documentație și starea proiectului

Funcționalitățile implementate sunt separate clar de pașii următori

Wiki-ul este ghidul detaliat pentru arhitectură, configurare, rutare, securitate și operare. Roadmap-ul urmărește activitatea viitoare fără a promite termene.

Implementat acum

  • Rutare logică, zone și deduplicare separată pentru fiecare destinație.
  • Controlul rutării la runtime prin aismixerctl.
  • ACL-uri pentru punctele terminale și asocierea adresei-sursă.
  • Intrare de la receptoare fizice prin nmea_sproxy.
  • Ieșire UDPSEC și UDP simplu declarat explicit ca sigur prin proxy.
  • Ciclu de viață nativ consolidat pentru instalări systemd.

Planificat în continuare

  • Instalare Docker și materiale Quick Start extinse.
  • Un proces coordonator cu workeri ingress și egress.
  • Distribuirea prin IPC a stării de rutare și adaptoare suplimentare.
  • Opțiuni pentru persistența rutării la runtime și reîncărcarea configurației.
  • Dezvoltarea rutării distribuite sau P2P.
  • Cercetare privind detectarea spoofingului și a anomaliilor; un astfel de detector nu este implementat în prezent.