- MPTCP RFC 8684 पर आधारित TCP extension है, जिसमें एक connection कई network interfaces को एक साथ इस्तेमाल करके bandwidth, latency और failure handling को बेहतर बनाता है
- कई paths को parallel में इस्तेमाल करने वाली संरचना होने के कारण bandwidth aggregation, कम latency वाले path को प्राथमिकता देना, और path failure होने पर दूसरे path में reinjection संभव है
- Linux में
IPPROTO_MPTCPसे socket बनाया जाता है और सामान्य TCP connection वाले subflow कॉन्फ़िगर किए जाते हैं; अगर peer या बीच के उपकरण support न करें, तो यह अपने-आप single-path TCP पर fallback हो जाता है - path management के लिए Linux v5.19 के आधार पर kernel built-in तरीका और
mptcpdजैसे user-space daemon तरीका है, और Linux v6.8 के आधार पर packet scheduler सिर्फ़ एक है जिसेnet.mptcpsysctl से नियंत्रित किया जाता है - Linux v6.10 के आधार पर features में
socket()support, TCP fallback, kernel/user-space path management, TCP socket options, MIB·ssdiagnostics·tracepoint debug features शामिल हैं
MPTCP TCP connection के तरीके को कैसे बदलता है
- Multipath TCP(MPTCP) मानक TCP का एक extension है, जिसे RFC 8684 में परिभाषित किया गया है
- एक MPTCP connection कई interfaces का एक साथ इस्तेमाल करके TCP packets भेज और प्राप्त कर सकता है
- कई interfaces की bandwidth aggregate की जा सकती है या सबसे कम latency वाले interface को प्राथमिकता दी जा सकती है
- अगर एक path टूट जाए, तो traffic को दूसरे path में सहजता से reinject करके failover किया जाता है
- जहाँ सामान्य TCP एक समय में सिर्फ़ एक path का इस्तेमाल करता है, वहीं MPTCP 5G और Wi‑Fi जैसे कई paths को subflow के रूप में साथ इस्तेमाल कर सकता है
प्रमुख उपयोग के मामले
-
बिना रुकावट handover
- मौजूदा connection को बनाए रखते हुए एक path से दूसरे path पर स्विच किया जा सकता है
- Apple 2013 से smartphones में मुख्य रूप से इसी वजह से Multipath TCP का इस्तेमाल कर रहा है
-
सर्वश्रेष्ठ network चयन
- latency, loss, cost, bandwidth जैसी शर्तों के आधार पर उपलब्ध paths में से “सबसे अच्छा” path चुना जाता है
-
network aggregation
- कई paths को एक साथ इस्तेमाल करके throughput बढ़ाया जा सकता है
- fixed-line और mobile network को जोड़कर files को तेज़ी से transfer करना इसका एक उदाहरण है
Linux में connection कैसे स्थापित होता है
- Linux-विशेष
IPPROTO_MPTCPprotocol से नया socket बनाने पर subflow या path बनाया जाता है - subflow एक सामान्य TCP connection है, जो एक interface के माध्यम से data भेजता है
- इसके बाद hosts के बीच negotiation के ज़रिए अतिरिक्त subflow बनाए जा सकते हैं
- underlying TCP subflow के TCP option field में नए fields जोड़े जाते हैं ताकि दूसरा host MPTCP उपयोग का पता लगा सके
- इन fields में
MP_CAPABLEoption जैसी चीज़ें शामिल होती हैं, जो peer को MPTCP उपयोग की जानकारी देती हैं
- इन fields में
- अगर peer host या बीच का middlebox MPTCP support नहीं करता, तो लौटने वाले
SYN+ACKpacket के TCP option field में MPTCP option नहीं होगा- इस स्थिति में connection सामान्य TCP पर fallback होकर single path पर जारी रहता है
Path Manager और Packet Scheduler
- MPTCP अंदरूनी रूप से Path Manager और Packet Scheduler के बीच subflow creation, address announcement, और transmission path selection का काम बाँटता है
-
Path Manager
- Path Manager subflow की creation से deletion तक प्रबंधन करता है और address announcement भी संभालता है
- सामान्यतः client side subflow शुरू करता है, और server side
ADD_ADDRतथाREMOVE_ADDRoptions के ज़रिए अतिरिक्त addresses announce करता है - Linux v5.19 के आधार पर
net.mptcp.pm_typesysctl knob से दो तरह के path manager नियंत्रित किए जाते हैं- type
0: kernel built-in तरीका, जो सभी connections पर एक जैसे rules लागू करता है। यहip mptcpसे संबंधित है - type
1: user-space तरीका, जिसेmptcpdजैसे daemon नियंत्रित करते हैं और connection-दर-connection अलग rules लागू किए जा सकते हैं
- type
-
Packet Scheduler
- Packet Scheduler यह चुनता है कि अगला data packet भेजने के लिए कौन-सा subflow इस्तेमाल होगा
- यह उपलब्ध bandwidth को अधिकतम कर सकता है, कम latency वाले paths को चुन सकता है, या configuration के अनुसार दूसरी policies लागू कर सकता है
- Linux v6.8 के आधार पर packet scheduler सिर्फ़ एक है, और इसे
net.mptcpके sysctl knob से नियंत्रित किया जाता है
Linux v6.10 के आधार पर features
- Linux v6.10 के आधार पर MPTCP ये features प्रदान करता है
socket()system call मेंIPPROTO_MPTCPprotocol support- जब peer या middlebox MPTCP support न करे, तब MPTCP से TCP में fallback
- kernel built-in या user-space path manager का उपयोग करने वाला path management
- TCP sockets में सामान्यतः इस्तेमाल होने वाले socket options
- MIB counters,
sscommand द्वारा उपयोग किया जाने वाला diag support, और tracepoint सहित debug features
- विस्तृत बदलाव ChangeLog में देखे जा सकते हैं
communication और संबंधित projects
- communication channels
- mailing list: mptcp@lists.linux.dev, plain text only
- Archives
- Info
- subscription के लिए mptcp+subscribe@lists.linux.dev पर खाली plain text email भेजना होता है और challenge email का जवाब देना होता है
- IRC: libera.chat का #mptcp
- online Meetings
- Blog
- Fediverse
- mailing list: mptcp@lists.linux.dev, plain text only
- MPTCP community members द्वारा maintained projects
- MPTCP-संबंधित improvements वाले projects
- iproute2:
ip mptcpcommand के लिए - Network Manager: v1.40 से MPTCP features शामिल
- Multipath TCP applications: लोकप्रिय TCP applications के MPTCP updates को coordinate करने वाला project
- iproute2:
1 टिप्पणियां
Hacker News टिप्पणियाँ
MPTCP के बारे में मैंने 2013 में ही सुन लिया था
उस समय मोबाइल ऐप्स नेटवर्क बदलने पर इतने मज़बूत नहीं थे, इसे देखते हुए लगा था कि UX में बड़ा सुधार होगा और यह जल्दी अपनाया जाएगा
लेकिन पिछले 10 सालों में इसे लगभग कोई traction नहीं मिला, और अब जाकर kernel option दिखना काफ़ी निराशाजनक है। इस बीच सबने HTTP calls को तरह-तरह के retry handlers में लपेट लिया, और mobile operating systems ने network connectivity को इतना abstract कर दिया कि यह TCP से ज़्यादा zeromq इस्तेमाल करने जैसा लगने लगा
उदाहरण के लिए https://blog.apnic.net/2021/12/08/efficient-multipath-transp... देखें
FreeBSD पर बिना load balancer के deploy किया था, तब latest patch नहीं थे, और अगर होते भी, तब भी private network IP को alternate path के रूप में advertise होने से रोकने के लिए काफ़ी काम करना पड़ता
Linux में load balancer के पीछे होने पर streams को सही जगह भेजना बहुत जटिल था, और load balancer भी यह करना नहीं चाहता था
दोनों streams को साथ handle करना high-throughput path में बहुत complexity जोड़ता है, इसलिए जोखिम बड़ा है, और बदलाव के लिए reboot भी चाहिए
यह सब करने के बाद भी फायदा मुख्यतः iOS users को ही मिलता, और वे तो वैसे भी आम तौर पर बेहतर network इस्तेमाल करते हैं
https://en.wikipedia.org/wiki/Stream_Control_Transmission_Pr...
आखिर में development time बचाने के लिए PepLink का SpeedFusion इस्तेमाल किया, लेकिन license cost महँगी थी। उम्मीद है आगे चलकर 2 cellular networks और 50ms से कम failover के लिए कोई मुफ्त solution आएगा
multipath UDP + OpenVPN भी शायद एक practical solution हो सकता है
यह समझ नहीं आता कि IPv4 address space का सिर्फ़ 32-bit होना ज़्यादा दुखद है या TCP का connection tuple में source/destination IP addresses का इस्तेमाल करना
अगर time machine होती, तो Cerf और Kahn के पास जाकर दोनों चीज़ें बदलवाना चाहता
क्या मतलब यह है कि connection को दोनों तरफ़ के IP addresses और ports, यानी 4 fields से track करने वाली संरचना बदलनी चाहिए?
अफ़सोस है कि MPTCP इस्तेमाल करने वाले projects, जैसे OpenWrt derivative projects, के links नहीं हैं
GSOC में 2 साल तक students को mentor करते हुए मैंने OpenWrt में MPTCP patch किया था
https://blog.freifunk.net/2017/05/29/gsoc-2017-add-mptcp-sup...
मैंने हाल ही में ऐसी property खरीदी है जहाँ पूरी fiber line नहीं मिल सकती, लेकिन 5G पर 150~400Mbps मिल जाता है। मैं 2 5G lines लेकर MPTCP के साथ traffic को VPS तक tunnel करके lines को combine करने का सोच रहा हूँ
https://github.com/home-assistant/operating-system/pull/3248
http://www.openmptcprouter.com/
लगता है web servers और mobile devices पर support होना सबसे ज़रूरी होगा
अगर transparent alternate path मौजूद है, तो समझ नहीं आता कि application की explicit choice क्यों चाहिए
क्या kernel को सभी TCP connections के लिए इसे transparently handle नहीं करना चाहिए, ताकि path aggregation या link preference जैसे global decisions बेहतर तरीके से लिए जा सकें?
upstream से पहले की पुरानी multipath TCP implementation का इरादा application के लिए पूरी तरह transparent होना था, और मुझे लगता है कि protocol के उद्देश्य से वही ज़्यादा मेल खाता है
बेशक कई मामलों में application guidance मिलने पर MPTCP बेहतर हो सकता है, लेकिन उदाहरण के लिए LTE connection पर subflow बनाकर automatic failover के लिए तैयार रखना, पर उस subflow से data न भेजना—ऐसा standard system approach ही 95% मामलों के लिए काफ़ी होता
[1] https://lore.kernel.org/all/alpine.OSX.2.21.1707181728570.11...
उदाहरण के लिए ऐसा application सोचें जो connection बनते समय client IP को whitelist से match करता हो और उसके बाद मान ले कि वह बदलेगा नहीं
मेरे लिए MPTCP का एकमात्र व्यावहारिक उपयोग मोबाइल नेटवर्क और Wi‑Fi को साथ में इस्तेमाल करके स्पीड बढ़ाना है। iOS और WeChat दोनों इसे support करते हैं
लेकिन मोबाइल नेटवर्क metered होता है, इसलिए मैं इसे हमेशा बंद रखता हूँ। इसलिए व्यक्तिगत तौर पर MPTCP मेरे किसी काम का नहीं है
ऐसी स्थिति जहाँ Wi‑Fi signal अभी भी दिखता है, लेकिन असल में सही से connect नहीं होता। MPTCP होने पर cellular पर failover हो जाता है
मैं Linux network stack और drivers को support, debug और patch करने का काम करता हूँ, इसलिए इसका इतना कम adoption होना हैरान करने वाला है
SCTP की तरह, जो सामान्य TCP को replace करने की कोशिश करने वाली चीज़ों में से एक था, MPTCP भी शायद एक niche technology बनकर रह जाता है, जिसे कुछ application developers इस्तेमाल करते रहते हैं और बाकी दुनिया भूल जाती है
मुझे एक ऐसा resource मिला जो MPTCP और QUIC के structural differences समझाता है और लेखकों द्वारा प्रस्तावित MPQUIC protocol का भी परिचय देता है
QUIC एक UDP flow के ऊपर application streams को multiplex करता है, और MPTCP एक single stream को कई TCP subflows में बाँटता है। MPQUIC इन दोनों विशेषताओं को जोड़कर कई UDP subflows के ऊपर application streams को multiplex करता है
[1]: "Multipath QUIC: A Deployable Multipath Transport Protocol" https://www.researchgate.net/publication/327122884_Multipath...
अब जानना दिलचस्प होगा कि production environment में ये protocols कैसे compare करते हैं। क्या किसी ने दोनों इस्तेमाल किए हैं?
https://lwn.net/Articles/964377/
दोनों का लक्ष्य एक ही है। तकनीकी रूप से इनसे बहुत मिलते-जुलते behavior हासिल किए जा सकते हैं। MPTCP Linux kernel में implement किया गया है, जबकि QUIC user space में है
Apple भी इसे support करता है और Siri में इसका इस्तेमाल होता है
https://developer.apple.com/documentation/foundation/urlsess...
2011 में अपनी VoIP app को इतना robust चलते देखकर मैं हैरान रह गया था :D
अगर बीच के किसी भी middlebox में support न हो, तो लौटने वाले SYN+ACK packet के TCP options field में MPTCP option न होना काफी सीमित लगता है
क्या middleboxes के लिए बस इतनी ही requirement है कि वे MPTCP options को जस का तस forward करें?
यह सुनिश्चित किया गया कि या तो यह सही तरह pass through हो, या सुरक्षित रूप से single-path TCP पर fallback हो जाए
आम तौर पर, अगर middlebox unknown options को बदले बिना pass कर दे, और यह enforce न करे कि उसे दिखने वाला TCP sequence space continuous होना चाहिए, तो MPTCP उस device से होकर काम कर सकता है
अगर रुचि हो तो इस पर दो papers हैं
[1] https://www.usenix.org/conference/nsdi12/technical-sessions/...
[2] https://www.researchgate.net/publication/229002024_Is_it_sti...
यह security और privacy settings के लिहाज़ से मददगार हो सकता है
उदाहरण के लिए, चीन के Great Firewall को देखें—अगर traffic को कई uplink channels में बाँटा जा सके, तो क्या firewall के लिए उसे फिर से assemble करके enforce करना मुश्किल नहीं हो जाएगा?