टीसीपी लेमिनर

लैमिनार क्या है?

Laminar, टीसीपी कंजेशन कंट्रोल के लिए एक नया फ़्रेमवर्क है. यह ट्रांसमिशन शेड्यूल को अलग करता है, जिससे सटीक कंजेशन कंट्रोल से यह तय होता है कि डेटा कब भेजा जाएगा. यह कंजेशन कंट्रोल से, हर आरटीटी के दौरान भेजे गए कुल डेटा को तय करता है.

ट्रांसमिशन शेड्यूल करने के लिए डिफ़ॉल्ट एल्गोरिदम, वैन जैकबसन के पैकेट संरक्षण सिद्धांत को सख्ती से लागू करता है [Jacobson88]. रिसीवर के पास आने वाले डेटा की वजह से ACK डिलीवर होते हैं, जिसकी वजह से भेजने वाला, नेटवर्क में उतनी ही मात्रा में डेटा ट्रांसमिट कर सकता है. प्राइमरी स्टेट वैरिएबल, नेटवर्क में सर्कुलेट हो रहे डेटा और ACK की संख्या से तय होता है. इस स्थिति का पता एक बेहतर tcp_packets_in_flight() एस्टिमेटर (यानी total_पाइप) से लगाया गया है. कुल_पाइप, आरएफ़सी 3517 के मुताबिक "पाइप" पर आधारित है. हालांकि, इसमें मौजूदा ACK से रिपोर्ट किए गए डेटा की संख्या और ऐसे ट्रांसमिशन भी शामिल हैं जो कंजेशन कंट्रोल को पास कर चुके हैं, लेकिन TSO जैसे अन्य इवेंट का इंतज़ार कर रहे हैं.

नया वैरिएबल, CCwin, मुख्य भीड़ नियंत्रण स्थिति वैरिएबल है. भीड़ को कंट्रोल करने वाले एल्गोरिदम, रास्ते में भीड़ के स्तर को कंट्रोल करने के लिए CCwin को अडजस्ट करते हैं. हालांकि CCwin, cwnd जैसा लगता है, लेकिन cwnd ओवरलोड हो जाता है और कई एल्गोरिदम (जैसे कि बर्स्ट दबाने) में इसका इस्तेमाल करता है.

हर ACK के जवाब में भेजे गए सेगमेंट की संख्या को थोड़ा-सा अडजस्ट करता है. धीमी शुरुआत और आनुपातिक दर में कमी [पीआरआर] (आधी दर को बदलने का विकल्प), दोनों ट्रांसमिशन शेड्यूलिंग एल्गोरिदम में एम्बेड किए गए हैं.

लैमिनार फ़्रेमवर्क का मुख्य फ़ायदा यह है कि कंजेशन कंट्रोल और ट्रांसमिशन शेड्यूल को अलग-अलग सबसिस्टम में बांटा जाता है. इनमें से हर एक का डिज़ाइन बहुत आसान होता है. इससे ऐसे कई नए एल्गोरिदम डेवलप करना आसान हो जाता है जो कोड के पिछले संगठन के साथ काम नहीं कर सकते.

लैमिनार फ़्रेमवर्क, टीसीपी कंजेशन कंट्रोल के डिज़ाइन से जुड़े काम को बदल देता है. पैच के अलावा, इसका कई बड़े पैमाने पर असर पड़ सकता है. इस पैच का मकसद लोगों को कोड के साथ प्रयोग करना, टिप्पणी करना, और कोने के ऐसे किसी भी केस को खोजने में मदद करना है जिसे शायद अनदेखा कर दिया गया हो. इसके अलावा, यह पैच इस वजह से अधूरा है कि कई एल्गोरिदम अब भी मौजूद नहीं हैं. खास तौर पर, CUBIC और रेनो के अलावा, भीड़ को कंट्रोल करने वाले एल्गोरिदम, पुष्टि की प्रक्रिया, डेस्टिनेशन मेट्रिक वगैरह. अगर लोग इन एल्गोरिदम में से कुछ को फिर से बनाने में मदद कर पाएं, तो यह बहुत अच्छा होगा.

Laminar फ़्रेमवर्क और इसके इस्तेमाल को बढ़ावा देने के बारे में, इंटरनेट ड्राफ़्ट, draft-mathis-tcpm-tcp-laminar में अच्छी तरह से बताया गया है.

कृपया mattmathis@google.com पर टिप्पणियां और सुझाव भेजें.

यह प्रोजेक्ट, प्रोटोकॉल के सुधारों के ज़रिए, वेब को ज़्यादा तेज़ बनाने की Google की कोशिशों का हिस्सा है.

लागू करने से जुड़े नोट

Laminar को मुख्य रूप से तीन फ़ंक्शन (tcp_input.c) में लागू किया जाता है:

Tcp_cong_avoid() और tcp_mult_decr() फ़ंक्शन सीसीविन स्टेट वैरिएबल का इस्तेमाल करके एआईएमडी कंजेशन कंट्रोल करते हैं. पहले जैसा करने के अलावा, सिर्फ़ ये दो फ़ंक्शन ऐसे हैं जहां CCwin में बदलाव होता है. (दोनों फ़ंक्शन, ज़्यादा ट्रैफ़िक दिखाने वाले मॉड्यूल के लिए खास हैंडलर शुरू करते हैं).

Tcp_laminar_schedule() तय करता है कि हर ACK के जवाब में कितना डेटा भेजना है. यह वैन जैकबसन पैकेट संरक्षण को लागू करता है, जो tcp_packets_in_flight() चैनल पर सीसीविन में काम करने के लिए थोड़ा ऊपर या नीचे किया जाता है.

ज़्यादातर प्रोटोकॉल इवेंट में, tcp_packets_in_flight() एस्टीमेटर में कई अहम बदलाव होते हैं, ताकि उसे वैरिएंट न बनाया जा सके. ऐप्लिकेशन स्टॉल, tcp_laminar_schedule() में अडजस्टमेंट और असल पैकेट लॉस tcp_packets_in_flight() पर सेट हो जाते हैं, जैसा कि होना चाहिए. ACK प्रोसेसिंग, टीएसओ और ज़्यादातर दूसरे इवेंट में प्रोसेस नहीं होते हैं. ध्यान दें कि जब नुकसान होता है, तो फ़्लाइट के पैकेट की असल संख्या तुरंत बदल जाती है, लेकिन tcp_packets_in_flight() एस्टिमेटर में तब तक नहीं दिखती है, जब तक रीट्रांसमिशन मशीन उन्हें खोए हुए और गुम होने के तौर पर मार्क न करें.

पैच पाएं

यह पैच, Dave Miller के नेट-नेक्स्ट के ख़िलाफ़ है और साफ़ तौर पर 3.5-rc2 पर लागू होता है.
NB: भीड़-भाड़ वाले कंट्रोल के ऐसे दूसरे मॉड्यूल जिन्हें Reno और CUBIC को अपडेट नहीं किया गया है और उन्हें कंपाइल नहीं किया जाएगा. अगर आपके कॉन्फ़िगरेशन में कंजेशन कंट्रोल के अन्य मॉड्यूल, जैसे कि वेज, स्केलेबल, हाईस्पीड वगैरह बनाए गए हैं, तो उन्हें सबसे पहले बंद करना होगा.