Frequently Asked Questions
What is the difference between NSBAppClient and NSBSimClient?โ
NSBAppClient is the application-side client โ it presents a simplified send()/receive() interface so your application can communicate as if it were on a regular network. NSBSimClient is the simulator-side client โ it presents a fetch()/post() interface that lets a network simulator intercept payloads, route them through a simulated network, and deliver them. See What is NSB? and Architecture Overview for the full component breakdown.
Do I need Redis to use NSB?โ
No. Set use_db: false in your config.yaml. Redis is optional โ when disabled, payloads are transmitted directly through NSB without persistent storage. The Quickstart deliberately uses use_db: false so first-time users don't need to start Redis at all. See Database Settings.
Can I use NSB without ns-3 or OMNeT++?โ
Yes. Any code that implements fetch() and post() through an NSBSimClient is a valid simulator โ including the pre-built mock simulator used in the Quickstart. NSB doesn't require a specific simulator; it's simulator-agnostic by design. See Tutorials โ Build a Mock Simulator for a hands-on example.
What is the difference between PULL and PUSH mode?โ
In PULL mode (mode: 0), clients explicitly poll the daemon for messages โ no message is delivered unless requested. In PUSH mode (mode: 1), the daemon automatically forwards payloads to clients as soon as they're available, requiring persistent connections. PULL is recommended for most configurations; PUSH suits latency-sensitive setups. See System Modes.
Can Python and C++ clients talk to each other?โ
Yes. Python and C++ clients are fully wire-compatible โ they use the same Protobuf message format (nsbm) and the same queue/channel naming conventions. A Python NSBAppClient can send to a C++ NSBAppClientRMQ and vice versa, with no code changes. See Architecture Overview โ Cross-Language Interoperability.
What is the difference between System-Wide and Per-Node simulator mode?โ
In System-Wide mode (simulator_mode: 0), a single NSBSimClient handles all message routing for the entire simulation โ best for top-down simulators like ns-3. In Per-Node mode (simulator_mode: 1), each simulated node has its own NSBSimClient, identifier-matched to its corresponding NSBAppClient โ best for bottom-up simulators like OMNeT++. See Simulator Modes.
Does NSB work on Windows?โ
Yes, via WSL2 with Ubuntu 24.04. Native Windows support through vcpkg is under active development. See Get Started โ Windows (WSL2) tab.
What is the maximum number of nodes NSB supports?โ
Practically, NSB performs well up to ~100 concurrent nodes, with latency in the 6โ16ms range and memory usage under 7MB. At 500+ nodes, a file-descriptor ceiling causes latency to climb sharply (142โ233ms) โ this is a known environmental constraint, not a fundamental design flaw, and can often be worked around by raising your shell's ulimit -n. See Performance Evaluation and Troubleshooting โ 500+ clients.
Is NSB production-ready?โ
NSB is currently in beta. The team actively invites feedback, feature requests, and collaborators for domain-specific simulator integrations. See What is NSB? โ Beta Status.
How do I cite NSB in a paper?โ
NSB2: An Open-Source Modular Pipeline for Application-Network Co-Simulation ACM International Middleware Conference (ACM Middleware 2026) ACM, New York, NY, USA โ 11 pages
The original proof-of-concept was presented at:
Network Simulation Bridge: Bridging Applications to Network Simulators 19th ACM International Symposium on QoS and Security for Wireless and Mobile Networks (ACM Q2SWinet 2023) pp. 39โ46
See Background & Related Work โ Academic Publication for full publication details and the complete reference list.
Still Have Questions?โ
- Troubleshooting โ fixes for common installation and runtime errors
- Glossary โ short definitions for NSB's core terminology
- Contribute โ open a GitHub issue or join the discussion