33.2 DDS-RTPS 단순 참가자 발견 프로토콜(SPDP) 분산 제어 알고리즘 구조
ROS2 미들웨어의 중추인 DDS(Data Distribution Service)는 실시간 발행-구독(RTPS, Real-Time Publish-Subscribe) 유선 프로토콜(Wire Protocol)을 기반으로 물리적 네트워크 계층 위에서 동적 노드 토폴로지를 구축한다. 이 과정에서 가장 선행되는 아키텍처는 개별 도메인 참가자(Domain Participant)들이 서로의 존재를 자율적으로 인지하고 연결 협상을 개시하는 단순 참가자 발견 프로토콜(Simple Participant Discovery Protocol, SPDP)이다. SPDP는 중앙 마스터 노드의 개입 없이 분산 제어 알고리즘에 기반하여 동작하며, 자율 에이전트 편대의 애드혹(Ad-hoc) 통신망 구성에서 필수적인 자기 구성성(Self-Configurability)을 부여한다. 본 절에서는 SPDP의 분산 제어 알고리즘 구조와 메시지 교환 역학을 구체화한다.
1. RTPS 표준 멀티캐스트 로케이터(Locator) 결정 알고리즘
분산 제어의 첫 번째 과제는 구동된 ROS2 프로세스가 물리적 네트워크 상에서 “어디로” 자신의 존재를 알려야 하는지 결정하는 메커니즘이다. RTPS 스펙은 도메인 참여자가 SPDP 패킷을 브로드캐스팅할 목적지 주소, 즉 로케이터(Locator) 포트를 결정론적(Deterministic) 수식으로 매핑한다.
로케이터는 IP 주소와 포트 번호의 조합으로 이루어지며, 멀티캐스트 포트 P_{multicast}는 네트워크 인터페이스의 혼선을 방지하기 위해 도메인 식별자 ID_{domain}를 매개변수로 하여 다음 알고리즘에 따라 고유하게 산출된다.
P_{multicast} = PB + (DG \times ID_{domain}) + d0
- PB (Port Base Number): RTPS가 점유하는 기준 시작 포트 번호 (가설적 상수 예: 7400)
- DG (Domain Id Gain): 도메인 아이디 간의 포트 대역 간격 (가설적 상수 예: 250)
- d0 (Discovery Multicast Offset): 발견용 멀티캐스트 포트에 할당된 오프셋 (보통 0)
이러한 결정론적 수식을 통해, 동일한 ID_{domain} (예: ROS_DOMAIN_ID=30)을 공유하는 모든 분산 에이전트들은 사전에 하드코딩된 서버 주소 없이도, 연산학적으로 동일한 멀티캐스트 포트 그룹을 도출하여 청취(Listening) 및 발신(Broadcasting) 채널을 공유하게 된다.
33.2.2 SPDP 분산 상태 머신(State Machine) 구조와 데이터 교환
SPDP 제어 알고리즘은 각 참가자의 내부 미들웨어 데몬이 실행하는 상태 머신을 기저로 동작한다. 이 프로세스는 크게 ’발표(Announcement)’와 ’리스닝 및 등록(Listening & Registration)’의 이중 스레드 논리 회로로 구성된다.
참가자 메타데이터(Participant Data) 비콘 패킷의 구조
도메인 참여자는 내부 타이머 인터럽트에 의해 주기적으로 PARTICIPANT_DATA라는 규격화된 RTPS 메시지를 멀티캐스트 트래픽으로 송출한다. 이 메시지는 후속 과정인 엔드포인트 발견(SEDP)을 위해 필수적인 상대방의 기본 파라미터를 내포하고 있다.
- 참고자 GUID(Globally Unique Identifier): 12바이트의 접두사(Prefix)와 4바이트의 엔티티(Entity) ID로 조합된 고유 시스템 식별 값.
- 프로토콜 버전 및 벤더 식별자(Vendor ID): 상호 운용성(Interoperability)을 확인하기 위한 RTPS 버전 및 구현 라이브러리(e.g., FastDDS, CycloneDDS) 고유 코드.
- 메타데이터 수신용 로케이터(Metatraffic Unicast Locators): 향후 1:1 디스커버리 핸드셰이크를 진행할 자신의 유니캐스트 타겟 주소 목록.
- 사용자 데이터 수신용 로케이터(Default Unicast Locators): 디스커버리가 완료된 후 실제 Topic 페이로드를 수신할 소켓 주소.
상태 전이와 분산 데이터베이스 갱신 루틴
다른 시스템이 발송한 PARTICIPANT_DATA를 수신한 데몬은 자신의 메모리 내부에 위치한 분산 디스커버리 캐시(Distributed Discovery Cache)를 조회한다.
- 수신된 GUID가 로컬 캐시에 없는 새로운 주체라면, 알고리즘은 이를 ‘신규 발견(New Discovery)’ 이벤트로 분류하고 로컬 캐시 데이블에 행(Row)을 추가하여 전역 토폴로지 맵을 확장한다. 이후 수신된 유니캐스트 주소를 타겟으로 자신의
PARTICIPANT_DATA를 역으로 회신(Reply)하여 상호 인증을 완료한다. - 이미 캐시에 존재하는 GUID라면, 이는 해당 에이전트의 생동(Liveliness)을 입증하는 비콘 갱신으로 간주하고, 캐시 레코드의 타임아웃(Timeout) 카운터를 초기화하여 논리적 연결을 연장한다.
33.2.3 Liveliness Lease 시간과 그래프 분리(Graph Detachment) 제어
스웜 로보틱스 환경에서는 물리적 간섭이나 배터리 방전으로 인한 노드의 이탈 현상을 신속하게 처리하여 “존재하지 않는 목적지(Ghost Node)“로 트래픽을 송출하는 낭비를 근절해야 한다. SPDP 알고리즘은 Lease Duration 매개변수를 제어 변수로 삼아 노드의 소멸을 감지한다.
각 참가자는 자신이 PARTICIPANT_DATA를 갱신할 주기(Announcement Period)와 함께, 수신자가 타임아웃을 선언하기 전 대기해 주어야 하는 임대 기간(Lease Duration)을 패킷에 명시하여 협상한다. 만일 상대방 참여자의 비콘이 Lease Duration 이상 도착하지 않으면, 로컬 SPDP 데몬은 자체적인 인터럽트를 발생시키고 다음의 분산 파기 시퀀스를 실행한다.
- 분산 디스커버리 캐시에서 해당 GUID 레코드를 즉각 삭제(Purge) 조치한다.
- 해당 참여자에 종속되어 있던 모든 퍼블리셔 및 서브스크라이버 엔드포인트(Endpoint)와의 연결 간선을 무효화한다.
- 애플리케이션 계층(ROS2 노드 라이프사이클)으로 네트워크 분리(Graph Detachment) 이벤트를 전파하여 자율 제어 모드가 안전 대응을 개시하도록 유도한다.