Author: Tuğberk Akbulut
Department: Computer Engineering, Gebze Technical University
Contact: t.akbulut2023@gtu.edu.tr
This project implements a simulation and visualization tool for Quality of Service (QoS)-based routing in Data Distribution Service (DDS) networks. Traditional routing protocols (like TCP/IP OSPF) generally optimize for hop count or simple bandwidth metrics. However, real-time distributed systems—such as combat management systems or autonomous vehicle fleets—require strict adherence to multidimensional constraints including Latency, Reliability, and Bandwidth.
This application models the DDS network as a Weighted Directed Graph and solves the Constrained Shortest Path (CSP) problem using a modified Dijkstra algorithm. It allows network architects to visualize how tuning QoS coefficients (
We define the network as a graph
-
$V$ : The set of Domain Participants (Nodes). -
$E$ : The set of unidirectional communication links (Edges).
For every edge
-
Latency ($L(e)$): Transmission delay in milliseconds (
$ms$ ). - Bandwidth ($Bw(e)$): Available throughput in Mbps.
-
Reliability ($R(e)$): Probability of successful packet delivery,
$R(e) \in [0, 1]$ .
To reduce the multi-objective optimization problem to a single-objective shortest path problem, we define a scalar Cost Function. The goal is to finding a path satisfying the trade-off between maximizing bandwidth/reliability and minimizing latency.
Where:
-
$\alpha$ : Weight coefficient for Bandwidth (higher$\alpha$ prefers high-bandwidth links). -
$\beta$ : Weight coefficient for Latency (higher$\beta$ penalizes slow links). -
$\gamma$ : Weight coefficient for Reliability (higher$\gamma$ penalizes unreliable links).
Data Distribution Services often impose a hard constraint known as LATENCY_BUDGET. Finding the optimal path under a constraint is generally NP-Hard. However, given the relatively small size of DDS domains (
Find a path
The algorithm maintains the standard priority queue approach of Dijkstra but introduces a pruning step:
- Initialize
$minCost[v] \leftarrow \infty$ and$pathLatency[v] \leftarrow 0$ for all$v$ . - Push source node to Priority Queue (PQ).
- While PQ is not empty:
- Extract node
$u$ with the lowest accumulated$Cost$ . - For each neighbor
$v$ of$u$ :- Calculate potential new latency:
$Lat_{new} = pathLatency[u] + L(e_{u,v})$ -
Constraint Check: IF
$Lat_{new} > \mathcal{L}_{max}$ , prune this path (do not relax). -
Relaxation: IF $Lat_{new} \le \mathcal{L}{max}$ AND $Cost{new} < minCost[v]$:
- Update
$minCost[v]$ and$pathLatency[v]$ . - Push
$v$ to PQ.
- Update
- Calculate potential new latency:
- Extract node
This ensures that the returned path is the "cheapest" path (in terms of QoS cost) that strictly satisfies the application's real-time latency requirements.
- Node.js (v18+)
- npm
# Clone the repository
git clone <repository_url>
# Install dependencies
npm installnpm run devOpen your browser at http://localhost:5173.
- Siderbar Controls:
- Cost Coefficients: Adjust sliders for Alpha, Beta, and Gamma to change the importance of Bandwidth, Latency, and Reliability respectively.
- Max Latency: Set the hard constraint. Paths violating this total latency will be rejected.
- Toplogy Interaction:
- View Path: The optimal path is highlighted in Blue.
- Edit Links: Click on any edge to open the Link Editor. You can manually modify the physical properties (Bandwidth, Latency, Reliability) of a link to simulate network changes or failures.
- Frontend: React, TypeScript, Vite
- Visualization: React Flow (XYFlow)
- Styling: Tailwind CSS
| Path 1 | Path 2 | Path 3 |
|---|---|---|
![]() |
![]() |
![]() |


