Tools
Tools: NDM-TCP: Correction, Clarification, and Real Performance Results
2026-02-14
0 views
admin
Important Correction and Apology ## What I Got Wrong: The Cross-Connection Learning Claim ## The Incorrect Statement: ## Why It Was Wrong: ## The Missing Component: ## Why I Won't Add Global State: ## What IS Correct: Zero-Training Predictions ## The Zero-Training Article Was Actually Correct ## What "Zero-Training" Actually Means: ## Real Performance Test Results ## Test Configuration: ## Complete Test Results ## NDM-TCP Performance ## TCP Cubic Performance ## TCP Reno Performance ## Performance Comparison ## Overall Summary (20 Second Test): ## First 10 Seconds (Learning Phase): ## Last 10 Seconds (Adapted Phase): ## Within-Connection Improvement: ## Key Findings ## 1. NDM-TCP Truly Learns Within Connections ## 2. NDM-TCP Outperforms Traditional Algorithms ## 3. Better Initial Performance ## 4. Entropy-Aware Intelligence Works ## 5. All Algorithms Improve Over Time ## What "Zero-Training" Means for AI ## Prediction IS Training ## Why This Matters: ## Corrected Understanding ## What I Claim NOW (Accurate): ## What I NO LONGER Claim (Was Incorrect): ## Removed Articles ## What Remains Valid ## The "Zero-Training Performance Analysis" Article ## Test Environment Details ## Conclusion ## What The Data Shows: ## Moving Forward: Author: Muhammed Shafin P
Date: 14th February 2026
Test System: Xubuntu 24.04 LTS, Linux Kernel 6.11.0 I need to correct and clarify statements made in my previous article titled "NDM-TCP vs TCP Cubic vs TCP Reno: Bandwidth-Constrained Network Performance Analysis" which has been removed from publication. In the removed article, I showed separate "Run 1" and "Run 2" tests and claimed NDM-TCP learned from the first run and improved performance in the second run. This was technically impossible and misleading. NDM-TCP's initialization function resets all internal state to zero every time a new TCP connection starts. Each separate iperf3 test creates a new connection, which means: I forgot to implement kernel global state variables that would enable persistent learning across connections. Without global state, each connection starts fresh. After careful consideration, I will not implement cross-connection global state due to the serious risk of race conditions in kernel space. When multiple TCP connections access shared variables simultaneously without perfect synchronization, it can cause: The risk of a fatal kernel bug is too high. Therefore, NDM-TCP will remain a safe, per-connection adaptive algorithm. My article "NDM-TCP: Zero-Training Performance Analysis" made a claim that I now realize was fundamentally correct but poorly explained. The correct understanding: For AI systems, prediction IS training. When NDM-TCP makes predictions about network conditions and adjusts congestion windows, it is simultaneously: This is online learning - the system learns by doing, not from pre-collected datasets. Traditional ML TCP algorithms: No offline training needed. Prediction itself IS the training process. All tests conducted on: Detailed Interval Data: Key Observation - Within-Connection Learning: This demonstrates real within-connection learning and adaptation. Detailed Interval Data: Detailed Interval Data: The data shows clear evidence of learning: The hidden state evolves with each packet, allowing NDM-TCP to adapt to network characteristics in real-time. NDM-TCP achieved the same throughput with significantly fewer retransmissions. Even in the learning phase (first 10 seconds), NDM-TCP performed better: This shows NDM-TCP's entropy-based decision making provides advantages even before full adaptation. NDM-TCP's ability to distinguish network noise from real congestion allows it to: Interesting observation: All three algorithms showed improvement from first 10 seconds to last 10 seconds: In reinforcement learning and online learning systems, making predictions and observing outcomes IS the training process. NDM-TCP's learning cycle: This is real machine learning happening in real-time, without any offline training phase. This is the true meaning of "zero-training" - the algorithm IS trained by the act of making predictions. I have removed the following article due to misleading claims about cross-connection learning: "NDM-TCP vs TCP Cubic vs TCP Reno: Bandwidth-Constrained Network Performance Analysis" The test data in that article was real, but I incorrectly attributed performance differences between separate runs to algorithmic learning rather than network variation. My article "NDM-TCP: Zero-Training Performance Analysis" made claims about zero-training that are fundamentally correct: This understanding is accurate and supported by AI/ML theory. Complete System Information: NDM-TCP demonstrably outperforms TCP Cubic and TCP Reno in this test scenario: These results are real, reproducible, and demonstrate the value of entropy-aware congestion control. Muhammed Shafin P
14th February 2026 System: Xubuntu 24.04 LTS, Linux Kernel 6.11.0
Test Interface: Loopback
Network Conditions: 50 Mbit/s, 20ms±5ms latency, 0.5% loss For questions, code review, or testing feedback, I welcome community input to improve both NDM-TCP and its documentation. Templates let you quickly answer FAQs or store snippets for re-use. Are you sure you want to hide this comment? It will become hidden in your post, but will still be visible via the comment's permalink. Hide child comments as well For further actions, you may consider blocking this person and/or reporting abuse CODE_BLOCK:
Step 1: Collect months of network data
Step 2: Train neural network offline (hours/days)
Step 3: Deploy trained model
Step 4: Periodically retrain with new data
Step 5: Redeploy updated model Enter fullscreen mode Exit fullscreen mode CODE_BLOCK:
Step 1: Collect months of network data
Step 2: Train neural network offline (hours/days)
Step 3: Deploy trained model
Step 4: Periodically retrain with new data
Step 5: Redeploy updated model CODE_BLOCK:
Step 1: Collect months of network data
Step 2: Train neural network offline (hours/days)
Step 3: Deploy trained model
Step 4: Periodically retrain with new data
Step 5: Redeploy updated model CODE_BLOCK:
Step 1: Load kernel module
Step 2: Start making predictions immediately
Step 3: Learn from each prediction's outcome
Step 4: Continuously adapt in real-time Enter fullscreen mode Exit fullscreen mode CODE_BLOCK:
Step 1: Load kernel module
Step 2: Start making predictions immediately
Step 3: Learn from each prediction's outcome
Step 4: Continuously adapt in real-time CODE_BLOCK:
Step 1: Load kernel module
Step 2: Start making predictions immediately
Step 3: Learn from each prediction's outcome
Step 4: Continuously adapt in real-time COMMAND_BLOCK:
sudo tc qdisc add dev lo root handle 1: netem delay 20ms 5ms distribution normal loss 0.5%
sudo tc qdisc add dev lo parent 1:1 handle 10: tbf rate 50mbit burst 5000kbit latency 50ms Enter fullscreen mode Exit fullscreen mode COMMAND_BLOCK:
sudo tc qdisc add dev lo root handle 1: netem delay 20ms 5ms distribution normal loss 0.5%
sudo tc qdisc add dev lo parent 1:1 handle 10: tbf rate 50mbit burst 5000kbit latency 50ms COMMAND_BLOCK:
sudo tc qdisc add dev lo root handle 1: netem delay 20ms 5ms distribution normal loss 0.5%
sudo tc qdisc add dev lo parent 1:1 handle 10: tbf rate 50mbit burst 5000kbit latency 50ms CODE_BLOCK:
Total Transfer (sender): 120 MBytes
Total Received (receiver): 118 MBytes
Average Bitrate (sender): 50.4 Mbits/sec
Receiver Bitrate: 49.2 Mbits/sec
Total Retransmissions: 43
Success Rate: 98.3% Enter fullscreen mode Exit fullscreen mode CODE_BLOCK:
Total Transfer (sender): 120 MBytes
Total Received (receiver): 118 MBytes
Average Bitrate (sender): 50.4 Mbits/sec
Receiver Bitrate: 49.2 Mbits/sec
Total Retransmissions: 43
Success Rate: 98.3% CODE_BLOCK:
Total Transfer (sender): 120 MBytes
Total Received (receiver): 118 MBytes
Average Bitrate (sender): 50.4 Mbits/sec
Receiver Bitrate: 49.2 Mbits/sec
Total Retransmissions: 43
Success Rate: 98.3% CODE_BLOCK:
Total Transfer (sender): 120 MBytes
Total Received (receiver): 118 MBytes
Average Bitrate (sender): 50.5 Mbits/sec
Receiver Bitrate: 49.0 Mbits/sec
Total Retransmissions: 94
Success Rate: 98.3% Enter fullscreen mode Exit fullscreen mode CODE_BLOCK:
Total Transfer (sender): 120 MBytes
Total Received (receiver): 118 MBytes
Average Bitrate (sender): 50.5 Mbits/sec
Receiver Bitrate: 49.0 Mbits/sec
Total Retransmissions: 94
Success Rate: 98.3% CODE_BLOCK:
Total Transfer (sender): 120 MBytes
Total Received (receiver): 118 MBytes
Average Bitrate (sender): 50.5 Mbits/sec
Receiver Bitrate: 49.0 Mbits/sec
Total Retransmissions: 94
Success Rate: 98.3% CODE_BLOCK:
Total Transfer (sender): 119 MBytes
Total Received (receiver): 117 MBytes
Average Bitrate (sender): 50.1 Mbits/sec
Receiver Bitrate: 48.9 Mbits/sec
Total Retransmissions: 101
Success Rate: 98.3% Enter fullscreen mode Exit fullscreen mode CODE_BLOCK:
Total Transfer (sender): 119 MBytes
Total Received (receiver): 117 MBytes
Average Bitrate (sender): 50.1 Mbits/sec
Receiver Bitrate: 48.9 Mbits/sec
Total Retransmissions: 101
Success Rate: 98.3% CODE_BLOCK:
Total Transfer (sender): 119 MBytes
Total Received (receiver): 117 MBytes
Average Bitrate (sender): 50.1 Mbits/sec
Receiver Bitrate: 48.9 Mbits/sec
Total Retransmissions: 101
Success Rate: 98.3% CODE_BLOCK:
Operating System: Xubuntu 24.04 LTS
Linux Kernel: 6.11.0
Platform: VMware Virtual Platform
Test Interface: Loopback (lo)
Test Tool: iperf3
Network Emulation: Linux tc (traffic control) NDM-TCP Module: Loaded and active
Cubic Module: Linux kernel default
Reno Module: Linux kernel default Enter fullscreen mode Exit fullscreen mode CODE_BLOCK:
Operating System: Xubuntu 24.04 LTS
Linux Kernel: 6.11.0
Platform: VMware Virtual Platform
Test Interface: Loopback (lo)
Test Tool: iperf3
Network Emulation: Linux tc (traffic control) NDM-TCP Module: Loaded and active
Cubic Module: Linux kernel default
Reno Module: Linux kernel default CODE_BLOCK:
Operating System: Xubuntu 24.04 LTS
Linux Kernel: 6.11.0
Platform: VMware Virtual Platform
Test Interface: Loopback (lo)
Test Tool: iperf3
Network Emulation: Linux tc (traffic control) NDM-TCP Module: Loaded and active
Cubic Module: Linux kernel default
Reno Module: Linux kernel default COMMAND_BLOCK:
# Network setup
sudo tc qdisc add dev lo root handle 1: netem delay 20ms 5ms distribution normal loss 0.5%
sudo tc qdisc add dev lo parent 1:1 handle 10: tbf rate 50mbit burst 5000kbit latency 50ms # Run tests
iperf3 -c localhost -t 20 -C ndm_tcp
iperf3 -c localhost -t 20 -C cubic
iperf3 -c localhost -t 20 -C reno # Cleanup
sudo tc qdisc del dev lo root Enter fullscreen mode Exit fullscreen mode COMMAND_BLOCK:
# Network setup
sudo tc qdisc add dev lo root handle 1: netem delay 20ms 5ms distribution normal loss 0.5%
sudo tc qdisc add dev lo parent 1:1 handle 10: tbf rate 50mbit burst 5000kbit latency 50ms # Run tests
iperf3 -c localhost -t 20 -C ndm_tcp
iperf3 -c localhost -t 20 -C cubic
iperf3 -c localhost -t 20 -C reno # Cleanup
sudo tc qdisc del dev lo root COMMAND_BLOCK:
# Network setup
sudo tc qdisc add dev lo root handle 1: netem delay 20ms 5ms distribution normal loss 0.5%
sudo tc qdisc add dev lo parent 1:1 handle 10: tbf rate 50mbit burst 5000kbit latency 50ms # Run tests
iperf3 -c localhost -t 20 -C ndm_tcp
iperf3 -c localhost -t 20 -C cubic
iperf3 -c localhost -t 20 -C reno # Cleanup
sudo tc qdisc del dev lo root - All neural network state resets to zero
- No learning carries over between separate tests
- Performance differences were due to normal network variation, not learning - System crashes
- Kernel panics
- Data corruption
- Unpredictable behavior - Predicting network state
- Observing the results
- Updating internal state based on feedback
- Learning from the experience - OS: Xubuntu 24.04 LTS
- Kernel: Linux 6.11.0
- Hardware: VMware Virtual Platform
- Test Tool: iperf3 - Bandwidth limit: 50 Mbit/s
- Base latency: 20ms with ±5ms jitter (normal distribution)
- Packet loss rate: 0.5%
- Test duration: 20 seconds each
- Interface: Loopback (localhost) - First 10 seconds: 32 retransmissions (learning phase)
- Last 10 seconds: 11 retransmissions (adapted phase)
- 65.6% reduction in retransmissions as the connection progressed - First 10 seconds: 86 retransmissions
- Last 10 seconds: 8 retransmissions
- Cubic also improves over time, but starts with much higher retransmissions - First 10 seconds: 88 retransmissions
- Last 10 seconds: 13 retransmissions
- Similar improvement pattern to Cubic - Seconds 0-10 (learning): 32 retransmissions
- Seconds 10-20 (adapted): 11 retransmissions
- 65.6% improvement as the connection progressed - NDM-TCP: 43 total retransmissions
- Cubic: 94 retransmissions (+119% worse)
- Reno: 101 retransmissions (+135% worse) - NDM-TCP: 32 retransmissions
- Cubic: 86 retransmissions
- Reno: 88 retransmissions - Stay aggressive when detecting random jitter (high entropy)
- Back off appropriately when detecting queue buildup (low entropy)
- Maintain throughput while minimizing unnecessary retransmissions - This is normal TCP behavior (slow start → congestion avoidance)
- NDM-TCP's advantage is maintaining lower retransmissions throughout
- The learning is about network conditions, not just TCP state - Predict: Calculate entropy, estimate congestion state
- Act: Adjust congestion window based on prediction
- Observe: See the result (ACKs received, packets lost)
- Update: Modify hidden state based on observed outcome
- Repeat: Next packet uses updated state - Requires months of data collection
- Needs powerful computers for training
- Must be retrained periodically
- Has deployment delays - Works immediately on first packet
- Learns from every prediction
- Continuously adapts
- No deployment overhead - Within-Connection Learning: NDM-TCP learns and adapts during a single TCP connection ✓
- Zero Offline Training: No pre-training required, works immediately ✓
- Better Efficiency: Fewer retransmissions than Cubic/Reno while maintaining throughput ✓
- Entropy Intelligence: Successfully distinguishes noise from congestion ✓
- Static Memory: 72 bytes per connection, never grows ✓
- Predictable CPU: Fixed operations per packet ✓ - Cross-Connection Learning: Cannot learn between separate tests (current implementation)
- Persistent Global State: Does not retain knowledge after connection closes - NDM-TCP requires no offline training
- It learns by making predictions
- Prediction itself IS the training process
- Performance improves within connections
- Works immediately upon deployment - 54% fewer retransmissions than Cubic
- 57% fewer retransmissions than Reno
- Same throughput as both traditional algorithms
- Clear within-connection learning (65.6% improvement first→last 10 seconds) - Accurate technical explanations
- Clear distinction between within-connection and cross-connection learning
- Honest presentation of both capabilities and limitations
- Reproducible test methodology with complete details
how-totutorialguidedev.toaimachine learningmlneural networklinuxubuntukernelnetwork