Document Version: 1.0
Original Author: Rokas Paulauskas
Co-Authors: Ze Yan Liow, Archit Panigrahi, Sathvika Thorali, Prakash Narasimhan
Date Modified: 22/11/2024
Language: C++
- To execute demo, download source code extract, proceed to scripts directory and start with: sh run_demo.sh
- To stop running the demo: sh stop_demo.sh and (command + c) or (ctrl + c) to exit all the running terminals from background.
- Unix based OS
- clang 15 or newer
- gcc 9.4 or newer
- Environmental Monitoring and Alert System (Group 14)
- Soil Health Monitoring in Farms (Group 6)
Super Alice is a peer-to-peer networking protocol designed for communication within Low Earth Orbit (LEO) satellite constellations. Implemented in C++, it leverages a custom UDP protocol optimized for low-latency and lightweight satellite communications. This protocol includes machine learning (ML) for optimized routing and a bootstrap node for peer discovery, enabling efficient data exchange in dynamic and constrained environments.
- Custom UDP Protocol: Super Alice is built on a custom UDP protocol designed for minimal latency and efficient data transmission in satellite networks. This choice balances speed and simplicity, critical for high-frequency communication in LEO constellations.
The Super Alice protocol has a modified packet structure to improve flexibility, reliability, and future extensibility. The structure is defined as follows:
#ifndef ALICE_PACKET_HPP
#define ALICE_PACKET_HPP
#include <cstdint>
#include <vector>
namespace alice {
enum class PacketType : uint8_t {
HANDSHAKE,
DATA,
ACK,
NACK,
CONTROL,
ERROR
};
class Packet {
public:
uint32_t source_id;
uint32_t destination_id;
PacketType type;
uint8_t priority;
uint32_t sequence_number;
uint64_t timestamp;
uint16_t fragment_id;
uint16_t total_fragments;
uint16_t crc;
uint16_t reserved;
uint16_t payload_type;
std::vector<uint8_t> payload;
Packet(uint32_t source_id, uint32_t destination_id, PacketType type, uint8_t priority, uint32_t sequence_number, const std::vector<uint8_t> &payload);
[[nodiscard]] std::vector<uint8_t> serialize() const;
static Packet deserialize(const std::vector<uint8_t> &buffer);
};
}
#endif- Source ID (
source_id): 32-bit identifier unique to the originating satellite or ground node. - Destination ID (
destination_id): 32-bit identifier unique to the target node, ensuring directed communication. - Packet Type (
type): Enum for packet type:- HANDSHAKE: Initializes communication between nodes.
- DATA: Main data transfer packet.
- ACK/NACK: Acknowledgments for successful or failed delivery.
- CONTROL: Command packet for network adjustments.
- ERROR: Reports errors to aid in diagnostics.
- Priority (
priority): 8-bit field indicating the priority of the packet (0 = low, 255 = high). - Sequence Number (
sequence_number): 32-bit integer for order in packet transmission. - Timestamp (
timestamp): 64-bit Unix timestamp for packet timing. - Fragment ID (
fragment_id): 16-bit identifier for packets that are part of a larger message. - Total Fragments (
total_fragments): 16-bit field indicating the total number of fragments for reassembly. - CRC (
crc): 16-bit error correction code for data integrity. - Reserved (
reserved): 16-bit field for future enhancements. - Payload Type (
payload_type): 16-bit field to specify the type of payload (e.g., text, binary). - Payload (
payload): Variable-length data section containing the main content.
- Purpose: Dynamically adapt routes based on network data, improving latency and throughput.
- Functionality: ML algorithms analyze traffic, node availability, and link quality, adjusting routes as conditions evolve.
- Data: Training data includes positional, latency, and throughput metrics, retrained periodically as new data accumulates.
- Purpose: Streamlines network initialization, connecting new nodes to nearby peers.
- Functionality: The bootstrap node serves as an initial registry for nodes, allowing them to efficiently discover peers and connect.
- Uses the HANDSHAKE packet to initiate communication. The bootstrap node aids by introducing nodes to the network.
- DATA packets carry core messages.
- ACK/NACK packets ensure delivery reliability.
- The CONTROL packet enables real-time adjustments for network configuration and ML-based route updates.
- ERROR packets report any network issues, allowing rerouting or troubleshooting.
- ML-Optimized Routing: ML-driven path predictions enhance data throughput and reduce latency.
- Direct Satellite Routing: Satellite-to-satellite transfers leverage ISLs based on ML-optimized paths.
- Node Failure Resilience: The bootstrap node assists in re-establishing connections when a node fails.
- Load Balancing: Adjusts data flow according to network demand, prioritizing CONTROL and ACK/NACK packets.
Super Alice implements payload encryption, especially for CONTROL and DATA packets, to secure transmissions. Future updates may integrate adaptive ML-driven security mechanisms.
- Enhanced Learning Models: Implement reinforcement learning for more adaptive routing.
- Advanced Error Correction: Integrate forward error correction for greater robustness.
- Protocol Switching: Explore the potential for adaptive protocol switching within UDP, leveraging ML to dynamically adjust configurations based on network needs.


