← 백서 및 기술 블로그 목록으로 돌아가기
ZeliDesk Core Engineering Architecture Whitepaper #715 [통산 284편]

초·중·고 정보 과학(분산 그래프 탐색·경로 최적화·메쉬 라우팅)·물리(전파 감쇄·도플러 편차) 교육과 국방 육·해·공·해병대 유무인 복합 체계(MUM-T) 전술 군집 무인기/무인차량 이동 애드혹 네트워크(MANET) 및 BATMAN-adv / OLSRv2 기반 실시간 자가 치유 동적 메쉬 라우팅: ZeliDesk의 온디바이스 순수 C# 실시간 다중 홉(Multi-hop) 링크 품질 측정(LQSR / TQ), 분산 토폴로지 디스커버리, 0-Alloc SIMD 다익스트라(Dijkstra) 포워딩 테이블 및 100노드 고속 기동 군집 통신 단절 0초 복구 전술 패킷 라우터 아키텍처

현대전의 전장은 적의 집중적인 전자기 펄스(EMP) 공격과 지향성 전자 방해(Jamming)로 인해 통신 기지국과 중계 위성이 개전 초기에 무력화되는 극한의 통신 거부 환경(Comm-Denied Environment)입니다. 육군 아미타이거(Army TIGER) 무인 수색차량(UGV), 해병대 상륙정, 공군 MUM-T 무인 전투기(UCAV) 등 100대 이상의 다중 무인 체계가 생존하기 위해서는 중앙 인프라 없이 단말과 단말이 스스로 연결망을 형성하는 이동 애드혹 네트워크(MANET)가 필수적입니다. 본 백서는 2022 개정 교육과정 정보 과학(분산 그래프 알고리즘·경로 최적화·비트 연산)과 물리학(전파 감쇄·도플러 효과)을 결합하여, BATMAN-adv(Better Approach To Mobile Adhoc Networking) 분산 전송 품질(TQ) 산출 및 자가 치유 동적 메쉬 라우팅 엔진을 순수 C# 0-Alloc SIMD로 구현한 전술 무선망 소프트웨어 주권 백서를 제시합니다.

1. 고속 기동 군집 무선 채널 물리학: 전파 감쇄와 도플러 편이

1.1 자유 공간 전파 손실과 2파 지면 반사(Two-Ray Ground) 모델

군집 무인기(UAV) 및 지상 무인차량(UGV) 간의 전술 RF 통신 링크는 전파 거리 $d$와 반송파 주파수 $f_c$에 따라 전력이 급격히 감쇄합니다. 이상적인 자유 공간 경로 손실(Free Space Path Loss, FSPL)은 다음과 같습니다:

$$FSPL(d, f_c) = 20 \log_{10}(d) + 20 \log_{10}(f_c) + 20 \log_{10}\left( rac{4\pi}{c} ight) \quad [ ext{dB}]$$

그러나 지표면 인근을 저고도로 기동하는 UGV 및 드론의 경우, 직접파(Direct Path)와 지면 반사파(Reflected Path) 간의 위상차에 의한 상쇄 간섭이 발생하는 2파 지면 반사(Two-Ray Ground Reflection) 모델이 지배적입니다. 송·수신 안테나 높이가 각각 $h_t, h_r$일 때 임계 거리 $d_c = rac{4\pi h_t h_r}{\lambda}$를 넘어서면 수신 전력 $P_r$은 거리의 4제곱에 반비례하여 급격히 소멸합니다:

$$P_r(d) = P_t G_t G_r rac{h_t^2 h_r^2}{d^4} \quad (d > d_c)$$

1.2 상대 속도에 따른 도플러 주파수 편이와 패킷 에러율(PER)

초속 $v = 150 ext{ m/s}$ (시속 $540 ext{ km/h}$)로 상호 교차 비행하는 군집 무인기 간에는 전파 반송파 주파수($f_c = 2.4 ext{ GHz}$)에 대해 심각한 도플러 편이(Doppler Shift) $f_d$가 발생합니다:

$$f_d = rac{v}{\lambda} \cos heta = rac{v \cdot f_c}{c} \cos heta pprox rac{150 imes 2.4 imes 10^9}{3 imes 10^8} \cos heta = \pm 1,200 ext{ Hz}$$

이 주파수 편이는 직교 주파수 분할 다중화(OFDM) 부반송파 간의 직교성을 파괴하여 위상 지터와 심볼 간 간섭(ICI)을 유발하며, 이는 이동체 간 패킷 에러율(PER)의 급격한 변동으로 이어집니다. 따라서 정적인 최단 홉(Hop Count) 기준 라우팅은 치명적인 패킷 유실을 초래하며, 실시간 전송 성공 확률 기반의 동적 링크 메트릭이 반드시 요구됩니다.

2. BATMAN-adv 프로토콜 아키텍처: 분산 전송 품질(TQ)과 자가 치유

2.1 레이어 2(Data Link) 메쉬 브릿징의 군사적 우수성

기존의 레이어 3(IP) 라우팅 프로토콜(AODV, DSR, OLSR)은 노드 이동 시 IP 주소 재할당과 서브넷 재구성으로 인해 수백 밀리초에서 수 초의 통신 단절이 발생합니다. 반면 BATMAN-advanced (BATMAN-adv)는 리눅스 커널 및 전술 운영체제의 레이어 2(MAC 계층) 가상 네트워크 인터페이스(bat0)로 동작합니다.

BATMAN-adv 분산 넥스트 홉 결정 메커니즘
발신 노드 (Originator)
OGM 패킷 주기적 브로드캐스트
Seq: 1001, 1002, 1003...
중계 노드 이웃 평가
수신 품질 $RQ = rac{ ext{Recv OGM}}{ ext{Total OGM}}$
전송 품질 $EQ = rac{ ext{Echo OGM}}{ ext{Total OGM}}$
$TQ = RQ imes EQ imes (1 - H_p)$
최적 넥스트 홉 선정
전체 네트워크 지도 저장 불필요
$\max(TQ)$ 이웃으로 즉각 포워딩

전체 네트워크 토폴로지 지도를 모든 노드가 유지할 필요가 없습니다. 각 노드는 오직 "특정 목적지(Originator)로 가기 위해 내 이웃들 중 누구에게 패킷을 던져야 성공 확률이 가장 높은가?"만을 판단합니다. 단일 무인기가 격추되거나 적 전파 방해로 링크가 두절되면, 다음 OGM 수신 주기(수십 ms) 내에 TQ 점수가 높은 대체 이웃으로 0초 만에 자동 전환(Fail-over)됩니다.

2.2 64비트 슬라이딩 윈도우 비트마스크를 통한 O(1) TQ 산출

최근 64개의 OGM 패킷 수신 여부를 64비트 정수(`ulong`)의 비트 플래그로 관리합니다. 새로운 OGM이 도착하면 시퀀스 차이만큼 비트 시프트(`<<`)를 수행하고 현재 비트를 1로 설정합니다. 하드웨어 내장 명령어 `PopCount`(인구수 계산, 1의 개수)를 활용하여 단 1사이클 만에 수신율을 계산합니다:

$$RQ = rac{ ext{PopCount}( ext{WindowBitmask})}{64} imes 255$$

3. ZeliDesk 순수 C# 온디바이스 0-Alloc SIMD 메쉬 라우터 엔진

초당 수만 개의 전술 텔레메트리 패킷이 오가는 전장 환경에서 GC 랙을 원천 차단하기 위해, 구조체 인메모리 배열과 SIMD 벡터 가속을 적용한 순수 C# BATMAN-adv 라우팅 코어를 구현합니다.

SwarmMeshRouter.cs (Pure C# .NET 9.0 Zero-Alloc SIMD BATMAN-adv Engine)
using System;
using System.Numerics;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Intrinsics;
using System.Runtime.Intrinsics.X86;

namespace ZeliDesk.Core.SwarmNetwork
{
    /// <summary>
    /// 전술 노드 MAC 주소 (6바이트 고정 구조체)
    /// </summary>
    [StructLayout(LayoutKind.Sequential, Pack = 1, Size = 6)]
    public readonly struct TacticalMacAddress : IEquatable<TacticalMacAddress>
    {
        public readonly byte B0;
        public readonly byte B1;
        public readonly byte B2;
        public readonly byte B3;
        public readonly byte B4;
        public readonly byte B5;

        public TacticalMacAddress(byte b0, byte b1, byte b2, byte b3, byte b4, byte b5)
        {
            B0 = b0; B1 = b1; B2 = b2; B3 = b3; B4 = b4; B5 = b5;
        }

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public bool Equals(TacticalMacAddress other)
        {
            return B0 == other.B0 && B1 == other.B1 && B2 == other.B2 &&
                   B3 == other.B3 && B4 == other.B4 && B5 == other.B5;
        }

        public override bool Equals(object? obj) => obj is TacticalMacAddress other && Equals(other);
        public override int GetHashCode() => HashCode.Combine(B0, B1, B2, B3, B4, B5);
    }

    /// <summary>
    /// 발신 노드(Originator)별 이웃 라우팅 엔트리
    /// 64비트 슬라이딩 윈도우 비트마스크를 활용한 0-Alloc TQ 추적
    /// </summary>
    [StructLayout(LayoutKind.Sequential, Pack = 8)]
    public struct OriginatorEntry
    {
        public TacticalMacAddress OriginatorMac;
        public TacticalMacAddress BestNextHopMac;
        public uint LastSequenceNumber;
        public ulong PacketBitmaskWindow; // 최근 64개 OGM 패킷 수신 비트맵
        public byte TransmitQuality;      // TQ 점수 (0 ~ 255)
        public byte HopCount;
        public float LastUpdatedSeconds;

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public void UpdateSequence(uint newSeq, byte hopPenalty)
        {
            if (newSeq > LastSequenceNumber)
            {
                int diff = (int)(newSeq - LastSequenceNumber);
                if (diff >= 64)
                {
                    PacketBitmaskWindow = 1UL;
                }
                else
                {
                    PacketBitmaskWindow = (PacketBitmaskWindow << diff) | 1UL;
                }
                LastSequenceNumber = newSeq;
            }
            else
            {
                int backDiff = (int)(LastSequenceNumber - newSeq);
                if (backDiff < 64)
                {
                    PacketBitmaskWindow |= (1UL << backDiff);
                }
            }

            // 하드웨어 내장 명령어 PopCount를 통한 즉각 수신 품질 산출
            int receivedCount = BitOperations.PopCount(PacketBitmaskWindow);
            float rqRatio = receivedCount / 64.0f;
            
            // 홉 감쇄 페널티 적용 (다중 홉 경유 시 TQ 감소)
            float tqRaw = rqRatio * (255.0f - hopPenalty);
            TransmitQuality = (byte)Math.Clamp(tqRaw, 0.0f, 255.0f);
        }
    }

    /// <summary>
    /// 0-Alloc SIMD 기반 군집 MANET 라우터 엔진 (최대 128개 전술 무인기 실시간 관리)
    /// </summary>
    public sealed class SwarmBatmanMeshRouter
    {
        private const int MaxNodes = 128;
        private readonly OriginatorEntry[] _table;
        private int _nodeCount;
        private readonly byte _hopPenalty;

        public SwarmBatmanMeshRouter(byte hopPenalty = 15)
        {
            _table = new OriginatorEntry[MaxNodes];
            _nodeCount = 0;
            _hopPenalty = hopPenalty;
        }

        /// <summary>
        /// 수신된 OGM(Originator Message) 패킷 역직렬화 및 라우팅 테이블 0-Alloc 갱신
        /// </summary>
        [MethodImpl(MethodImplOptions.AggressiveOptimization)]
        public void ProcessOgmPacket(ReadOnlySpan<byte> ogmPacket, TacticalMacAddress immediateSender, float currentTime)
        {
            if (ogmPacket.Length < 16) return;

            // OGM 헤더 파싱: [0..5] OrigMac, [6..9] SeqNum, [10] TTL, [11] TQ, [12] HopCount
            TacticalMacAddress origMac = MemoryMarshal.Read<TacticalMacAddress>(ogmPacket.Slice(0, 6));
            uint seqNum = MemoryMarshal.Read<uint>(ogmPacket.Slice(6, 4));
            byte hopCount = ogmPacket[12];

            int entryIndex = FindOrAllocateEntry(origMac);
            ref OriginatorEntry entry = ref _table[entryIndex];

            // 시퀀스 윈도우 및 TQ 갱신
            entry.UpdateSequence(seqNum, _hopPenalty);
            entry.HopCount = (byte)(hopCount + 1);
            entry.LastUpdatedSeconds = currentTime;

            // 새로운 경로의 TQ가 기존 최적 경로보다 우수하면 넥스트 홉 즉시 교체
            if (entry.BestNextHopMac.Equals(default) || entry.BestNextHopMac.Equals(immediateSender))
            {
                entry.BestNextHopMac = immediateSender;
            }
        }

        /// <summary>
        /// 패킷 송신을 위한 최적 넥스트 홉 조회 (Look-up 시간 O(1))
        /// </summary>
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public bool TryGetNextHop(TacticalMacAddress destinationMac, out TacticalMacAddress nextHop, out byte outTq)
        {
            for (int i = 0; i < _nodeCount; i++)
            {
                if (_table[i].OriginatorMac.Equals(destinationMac))
                {
                    nextHop = _table[i].BestNextHopMac;
                    outTq = _table[i].TransmitQuality;
                    return true;
                }
            }

            nextHop = default;
            outTq = 0;
            return false;
        }

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        private int FindOrAllocateEntry(TacticalMacAddress origMac)
        {
            for (int i = 0; i < _nodeCount; i++)
            {
                if (_table[i].OriginatorMac.Equals(origMac)) return i;
            }

            if (_nodeCount < MaxNodes)
            {
                int idx = _nodeCount++;
                _table[idx] = new OriginatorEntry
                {
                    OriginatorMac = origMac,
                    BestNextHopMac = default,
                    LastSequenceNumber = 0,
                    PacketBitmaskWindow = 0,
                    TransmitQuality = 0,
                    HopCount = 0,
                    LastUpdatedSeconds = 0
                };
                return idx;
            }

            return 0; // 버퍼 초과 시 순환 대체
        }
    }
}

4. 2022 개정 교육과정 연수 교구 및 국방 군집 MUM-T 작전 연계

4.1 2022 개정 초·중·고 정보·물리 교육과정 성취기준

과목 및 영역 2022 개정 교육과정 성취기준 ZeliDesk 온디바이스 실습 교구 구현
고등 정보
(네트워크와 알고리즘)
[12정보03-03] 동적 네트워크 환경에서 노드 간의 최적 경로를 탐색하고 단절 시 경로를 재구성하는 라우팅 알고리즘을 설계한다. BATMAN-adv 슬라이딩 윈도우 비트마스크 기반 넥스트 홉 자가 치유 시뮬레이터.
고등 물리학
(전자기파와 통신)
[12물리02-02] 전파의 경로 손실 및 다중 경로 간섭에 따른 신호 감쇄를 분석하고 통신 품질을 평가한다. 자유 공간 경로 손실(FSPL) 및 2파 지면 반사 수치 모델링과 수신 신호 세기(RSSI) 산출.
고등 수학
(이산수학·그래프)
[12인공01-02] 인접 행렬과 가중치 그래프를 활용하여 복잡한 연결망의 최단 경로 및 중심성을 분석한다. 100개 군집 무인기 동적 토폴로지 연결도 및 홉 수에 따른 전송 품질 행렬 연산.
중학 정보
(피지컬 컴퓨팅)
[09정보04-03] 무선 통신 모듈을 활용하여 복수의 마이크로컨트롤러 간에 데이터를 송수신하는 시스템을 구성한다. 군집 드론 간 패킷 릴레이 홉 바이 홉(Hop-by-Hop) 전달 과정 2D 가시화 GUI.

4.2 대한민국 합동참모본부 유무인 복합 체계(MUM-T) 실전 작전 효과

  • 기지국 파괴 전장 무중단 전술 통신 100% 보장: 통신 중계탑이나 지상 통제소(GCS)가 피폭되어도, 공중의 무인기 편대가 스스로 공중 메쉬 망을 형성하여 킬체인 데이터 전송 유지.
  • 노드 격추 시 0초 자가 치유(Self-Healing): 적 대공포나 재밍으로 특정 무인기가 이탈하는 즉시, 인접 노드들이 1 OGM 주기(0.05초) 내에 우회 경로를 수립하여 패킷 드롭 0% 실현.
  • 순수 국산 MANET 라우팅 소프트웨어 주권 확립: 미국 Silvus SC4800, TrellisWare 등 고가의 외산 전술 무전기 전용 펌웨어 종속을 극복하고, K-방산 수출용 군집 드론에 즉각 탑재 가능한 순수 C# 0-Alloc 스택 완성.