- SSH session में एक single key input पर सैकड़ों packets transmit होने की घटना मिली, और उसके कारण को trace किया गया
tcpdump analysis में पाया गया कि ज़्यादातर packets 36-byte size के repeating messages थे, जो लगभग 20ms के interval पर हो रहे थे
- कारण 2023 में SSH में जोड़ा गया 'keystroke timing obfuscation' feature था, जो user के input timing को छिपाने के लिए कई 'chaff' packets (SSH2_MSG_PING) भेजता है
- इस feature को disable करने पर, या server को
[email protected] extension advertise न करने के लिए बदलने पर CPU usage और bandwidth आधे से भी कम हो गए
- यह एक उदाहरण है कि SSH के security features real-time performance महत्वपूर्ण applications (जैसे gaming) में बड़ा overhead बन सकते हैं
समस्या का पता चलना
- SSH के जरिए चलने वाले high-performance game के TUI को test करते समय पाया गया कि एक single key input पर भी 270 packets बन रहे थे
tcpdump के अनुसार, 66% packets 36-byte messages थे, 33% TCP ACK थे, और बाकी थोड़ा-बहुत अन्य data था
- औसतन 90 packets/second, यानी लगभग 11ms interval पर data transmission हो रहा था
- Test के दौरान server ग़लती से केवल “your screen is too small” message भेजने के लिए सेट था, और इस स्थिति में CPU और bandwidth usage आधा हो गया
- Game data transmit नहीं होना चाहिए था, इसलिए CPU usage लगभग 0% के पास होना चाहिए था, लेकिन फिर भी लगभग 50% बना रहा
- इससे SSH के अपने communication overhead की संभावना सामने आई
जांच की प्रक्रिया
tcpdump का उपयोग करके normal operation और error state के SSH traffic की तुलना की गई
- Error state में भी 36-byte packets 20ms interval पर लगातार आते रहे
- macOS के default SSH client में भी वही pattern मिला
- Claude Code से pcap files का analysis करने पर
- कुल 413,703 packets में 66% 36-byte थे, 34% 0-byte ACK थे
- SSH client खुद सक्रिय रूप से packets बना रहा था
मूल कारण
समाधान
- Client side पर
ObscureKeystrokeTiming=no option से this feature को disable किया जा सकता है
- इसे लागू करने के बाद CPU usage और bandwidth काफ़ी घट गए, जबकि data transmission सामान्य बना रहा
- Server side पर समाधान के लिए Go की SSH library में
[email protected] extension advertisement हटा दिया गया
- संबंधित commit को revert करके test करने पर
- CPU usage 29.9% → 11.6% ,
system calls 3.10s → 0.66s,
cryptographic operations 1.6s → 0.11s,
bandwidth 6.5Mbit/s → 3Mbit/s
- Performance में 50% से अधिक सुधार हुआ
LLM का उपयोग करके debugging का अनुभव
- Claude Code की मदद से
tcpdump, tshark analysis को automate करते हुए समस्या के कारण को तेज़ी से narrow down किया गया
- Commands के execution process को real time में देखते हुए mental model बनाए रखना संभव हुआ
- ChatGPT ने SSH के behavior को “सामान्य” मान लिया, जिससे models के बीच का अंतर भी सामने आया
- LLM पूरे problem-solving process की जगह नहीं लेता, लेकिन supporting analysis tool के रूप में बहुत प्रभावी साबित हुआ
- यह एक ऐसा उदाहरण है जहाँ मानव reasoning और LLM analysis को जोड़कर जटिल network performance समस्या हल की गई
अभी कोई टिप्पणी नहीं है.