सामान्य प्रोटोकॉल संदेश विनिमय के लिए, जो कुछ पैकेट नुकसान को सहन कर सकता है। टीसीपी पर यूडीपी कितना अधिक कुशल है?
सामान्य प्रोटोकॉल संदेश विनिमय के लिए, जो कुछ पैकेट नुकसान को सहन कर सकता है। टीसीपी पर यूडीपी कितना अधिक कुशल है?
जवाबों:
UDP TCP की तुलना में तेज़ है, और इसका साधारण कारण यह है कि इसकी गैर-मौजूदगी स्वीकार पैकेट (ACK) है जो TCP के आकार और गोल-यात्रा समय का उपयोग करके परिकलित पैकेट के बजाय TCP के बजाय एक सतत पैकेट प्रवाह की अनुमति देता है। (RTT)।
अधिक जानकारी के लिए, मैं सरल, लेकिन बहुत समझदार स्कलबॉक्स विवरण (टीसीपी बनाम यूडीपी) की सिफारिश करता हूं
लोगों का कहना है कि टीसीपी आपको जो प्रमुख चीज देती है, वह विश्वसनीयता है। लेकिन यह वास्तव में सच नहीं है। सबसे महत्वपूर्ण बात जो टीसीपी आपको देता है वह है कंजेशन कंट्रोल: आप अधिकतम गति से जा रहे एक डीएसएल लिंक पर 100 टीसीपी कनेक्शन चला सकते हैं, और सभी 100 कनेक्शन उत्पादक होंगे, क्योंकि वे सभी उपलब्ध बैंडविड्थ को "समझ" लेते हैं। कोशिश करें कि 100 अलग-अलग यूडीपी अनुप्रयोगों के साथ, सभी पुश पैकेट जितनी तेजी से वे जा सकते हैं, और देखें कि आपके लिए चीजें कितनी अच्छी हैं।
बड़े पैमाने पर, यह टीसीपी व्यवहार वह है जो इंटरनेट को "भीड़भाड़ पतन" में बंद करने से रोकता है।
यूडीपी की ओर अनुप्रयोगों को धक्का देने वाली चीजें:
समूह वितरण शब्दार्थ: टीसीपी के बिंदु-टू-प्वाइंट पावती की तुलना में बहुत अधिक कुशलता से लोगों के समूह को विश्वसनीय वितरण करना संभव है।
आउट-ऑफ-ऑर्डर डिलीवरी: जब तक आप सभी डेटा प्राप्त नहीं करते तब तक बहुत सारे अनुप्रयोगों में, आपको परवाह नहीं है कि यह किस क्रम में आता है; आप एक आउट-ऑफ-ऑर्डर ब्लॉक को स्वीकार करके ऐप-स्तरीय विलंबता को कम कर सकते हैं।
दोस्ती: एक लैन पार्टी पर, आप परवाह नहीं कर सकते हैं कि जब तक आप संभवतः जितना संभव हो उतना तेजी से अपने वेब ब्राउज़र को नेटवर्क पर अपडेट कर रहे हैं।
लेकिन भले ही आप प्रदर्शन के बारे में परवाह करते हैं, आप शायद यूडीपी के साथ नहीं जाना चाहते हैं:
आप अभी विश्वसनीयता के लिए हुक पर हैं, और विश्वसनीयता को कार्यान्वित करने के लिए आपके द्वारा की जा सकने वाली बहुत सी चीज़ें पहले से ही टीसीपी की तुलना में धीमी हो सकती हैं।
अब आप नेटवर्क-अनफ्रेंडली हैं, जो साझा वातावरण में समस्या पैदा कर सकते हैं।
सबसे महत्वपूर्ण बात, फायरवॉल आपको ब्लॉक करेगा।
आप कई टीसीपी कनेक्शनों को एक साथ "ट्रंकिंग" करके कुछ टीसीपी प्रदर्शन और विलंबता के मुद्दों को दूर कर सकते हैं; iSCSI लोकल एरिया नेटवर्क पर कंजेशन कंट्रोल पाने के लिए ऐसा करता है, लेकिन आप इसे लो-लेटेंसी "अर्जेंट" मैसेज चैनल बनाने के लिए भी कर सकते हैं (TCP का "URGENT" व्यवहार पूरी तरह से टूट गया है)।
listen
-> accept
-> ग्राहक राज्य स्वाभाविक रूप से अन्य ग्राहकों से स्वतंत्र है)। किसी एकल क्लाइंट से कई कनेक्शनों को संभालना विशेष रूप से UDP के साथ बहुत मुश्किल हो जाता है। और यूडीपी के पक्ष में एक बिंदु यूडीपी स्टैक वास्तव में लागू करना आसान है, जो एम्बेडेड सिस्टम (माइक्रोकंट्रोलर, एफपीजीएएस आदि) पर एक बड़ा प्लस है, विशेष रूप से एक एफपीजीए के लिए टीसीपी कार्यान्वयन आमतौर पर कुछ ऐसा है जिसे आप सिर्फ किसी और के साथ खरीदना चाहते हैं। और इसके बारे में नहीं सोचते)।
कुछ अनुप्रयोगों में टीसीपी यूडीपी की तुलना में तेज (बेहतर थ्रूपुट) है।
यह ऐसा मामला है जब MTU आकार के सापेक्ष बहुत सारे छोटे लेखन करते हैं। उदाहरण के लिए, मैंने एक प्रयोग पढ़ा जिसमें ईथरनेट (1500 बाइट एमटीयू) पर 300 बाइट पैकेट की एक धारा भेजी जा रही थी और टीसीपी यूडीपी की तुलना में 50% तेज था ।
इसका कारण यह है कि टीसीपी डेटा की कोशिश और बफर करेगा और एक पूर्ण नेटवर्क सेगमेंट को भरेगा और इस प्रकार उपलब्ध बैंडविड्थ का अधिक कुशल उपयोग करेगा।
दूसरी ओर यूडीपी पैकेट को तुरंत तार पर रख देता है और इस तरह नेटवर्क को बहुत सारे छोटे पैकेटों के साथ जोड़ देता है।
जब तक आपके पास ऐसा करने का कोई विशेष कारण नहीं है, आपको शायद यूडीपी का उपयोग नहीं करना चाहिए। खासकर जब से आप नागल एल्गोरिथ्म को अक्षम करके यूडीपी के समान टीसीपी लेटेस्ट दे सकते हैं (उदाहरण के लिए यदि आप वास्तविक समय सेंसर डेटा संचारित कर रहे हैं और आप बहुत छोटे पैकेट के साथ नेटवर्क को जीतने के बारे में चिंतित नहीं हैं)।
नुकसान सहिष्णु के साथ
क्या आपका मतलब "नुकसान सहिष्णुता के साथ" है?
मूल रूप से, यूडीपी "नुकसान सहिष्णु" नहीं है। आप किसी को 100 पैकेट भेज सकते हैं, और वे केवल उन पैकेटों में से 95 प्राप्त कर सकते हैं, और कुछ गलत क्रम में हो सकते हैं।
वीडियो स्ट्रीमिंग, और मल्टीप्लेयर गेमिंग जैसी चीज़ों के लिए, जहाँ एक पैकेट को मिस करना बेहतर है, उसके पीछे अन्य सभी पैकेटों को देरी करने के लिए, यह स्पष्ट पसंद है
अधिकांश अन्य चीजों के लिए, एक लापता या 'पुनर्व्यवस्थित' पैकेट महत्वपूर्ण है। यदि चीजें छूट गईं, और सही क्रम लागू करने के लिए आपको UDP के शीर्ष पर चलने के लिए कुछ अतिरिक्त कोड लिखना होगा। यह कुछ स्थानों पर ओवरहेड का एक छोटा सा जोड़ देगा।
शुक्र है, कुछ बहुत ही स्मार्ट लोगों ने ऐसा किया है, और उन्होंने इसे टीसीपी कहा है।
इसे इस तरह से सोचें: यदि एक पैकेट गायब हो जाता है, तो क्या आप केवल अगले पैकेट को जितनी जल्दी हो सके और जारी रखेंगे (यूडीपी का उपयोग करें), या क्या आपको वास्तव में उस लापता डेटा (टीसीपी का उपयोग करें) की आवश्यकता है। ओवरहेड तब तक मायने नहीं रखेगा जब तक कि आप वास्तव में एज-केस परिदृश्य में न हों।
कौन सा प्रोटोकॉल बेहतर कार्य करता है (थ्रूपुट के संदर्भ में) - यूडीपी या टीसीपी - वास्तव में नेटवर्क विशेषताओं और नेटवर्क ट्रैफ़िक पर निर्भर करता है। उदाहरण के लिए, रॉबर्ट एस। बार्न्स एक परिदृश्य बताते हैं जहां टीसीपी बेहतर प्रदर्शन करता है (छोटे आकार का लेखन)। अब, उस परिदृश्य पर विचार करें जिसमें नेटवर्क भीड़भाड़ में है और इसमें टीसीपी और यूडीपी दोनों ट्रैफ़िक हैं। टीसीपी का उपयोग कर रहे नेटवर्क में प्रेषक 'जमाव' को समझेंगे और उनकी भेजने की दरों में कटौती करेंगे। हालाँकि, UDP के पास कोई भीड़-भाड़ से बचने या भीड़-भाड़ नियंत्रण तंत्र नहीं है, और UDP का उपयोग करने वाले प्रेषक डेटा को उसी दर पर पंप करना जारी रखेंगे। धीरे-धीरे, टीसीपी प्रेषक अपनी न्यूनतम दरों को भेजना कम कर देंगे और अगर यूडीपी भेजने वालों के पास नेटवर्क पर भेजे जाने के लिए पर्याप्त डेटा है, तो वे उपलब्ध बैंडविड्थ के बहुमत को रोक देंगे। तो, ऐसे मामले में, यूडीपी भेजने वालों के पास अधिक थ्रूपुट होगा, क्योंकि उन्हें नेटवर्क बैंडविड्थ का बड़ा पाई मिलती है। वास्तव में, यह एक सक्रिय शोध विषय है - यूडीपी ट्रैफिक की उपस्थिति में टीसीपी थ्रूपुट में सुधार कैसे करें। एक तरीका, जो मुझे पता है, जिसके उपयोग से टीसीपी अनुप्रयोग कई टीसीपी कनेक्शन खोलकर थ्रूपुट में सुधार कर सकते हैं। इस तरह, भले ही प्रत्येक टीसीपी कनेक्शन का थ्रूपुट सीमित हो सकता है, सभी टीसीपी कनेक्शन के थ्रूपुट का योग यूडीपी का उपयोग करने वाले एप्लिकेशन के लिए थ्रूपुट से अधिक हो सकता है।
"तेज क्या है" की बात करते समय - कम से कम दो बहुत अलग पहलू होते हैं: थ्रूपुट और विलंबता।
यदि थ्रूपुट के बारे में कहा जाए - टीसीपी का प्रवाह नियंत्रण (जैसा कि अन्य उत्तरों में बताया गया है), अत्यंत महत्वपूर्ण है और यूडीपी पर तुलनीय कुछ भी कर सकता है, जबकि निश्चित रूप से संभव है, एक बड़ा सिरदर्द (टीएम) होगा। परिणामस्वरूप - जब आपको थ्रूपुट की आवश्यकता होती है तो यूडीपी का उपयोग करना , , शायद ही कभी एक अच्छे विचार के रूप में योग्य होता है (जब तक कि आप टीसीपी पर अनुचित लाभ प्राप्त नहीं करना चाहते हैं)।
हालांकि, अगर विलंबता के बारे में बात कर रहे हैं - पूरी बात पूरी तरह से अलग है। जबकि पैकेट नुकसान की अनुपस्थिति में टीसीपी और यूडीपी एक समान व्यवहार करते हैं (कोई अंतर, यदि कोई हो, सीमांत होना) - पैकेट खो जाने के बाद, पूरे पैटर्न में भारी बदलाव होता है।
किसी भी पैकेट के नुकसान के बाद, टीसीपी कम से कम 200ms (RFC6298 के प्रति पैरा 2.4 वर्ग प्रति 1sec) के लिए प्रतीक्षा करेगा, लेकिन व्यावहारिक आधुनिक कार्यान्वयन इसे 200ms तक कम करते हैं)। इसके अलावा, टीसीपी के साथ, यहां तक कि वे पैकेट जो गंतव्य होस्ट तक पहुंच गए थे - जब तक कि लापता पैकेट प्राप्त नहीं हो जाता है, तब तक आपके ऐप पर वितरित नहीं किया जाएगा (यानी, पूरे संचार में ~ 200ms देरी हो रही है) - BTW, यह प्रभाव, हेड-ऑफ के रूप में जाना जाता है -लीन ब्लॉकिंग, सभी विश्वसनीय ऑर्डर किए गए स्ट्रीमों के लिए अंतर्निहित है, चाहे टीसीपी या विश्वसनीय + यूडीपी का आदेश दिया गया हो। चीजों को और भी बदतर बनाने के लिए - यदि रिट्रांस्ड पैकेट भी खो गया है, तो हम ~ 600ms की देरी के बारे में बात करेंगे (तथाकथित घातीय बैकऑफ़ के कारण, 1 रिट्रांसमिट 200ms है, और दूसरा 200 * 2 = 400ms है)। यदि हमारे चैनल में 1% पैकेट का नुकसान है (जो कि आज के मानकों से बुरा नहीं है), और हमारे पास प्रति सेकंड 20 अपडेट के साथ एक गेम है - ऐसे 600ms देरी औसतन हर 8 मिनट में होगी। और जैसा कि आप तेजी से खेल में मारे जाने के लिए 600ms से अधिक पर्याप्त है - ठीक है, यह गेमप्ले के लिए बहुत बुरा है। ये प्रभाव ठीक उसी कारण हैं कि gamedevs अक्सर TCP पर UDP को प्राथमिकता देते हैं।
हालांकि, यूडीपी को विलंबता को कम करने के लिए उपयोग करते समय - यह महसूस करना महत्वपूर्ण है कि केवल "यूडीपी का उपयोग करना" पर्याप्त विलंबता सुधार प्राप्त करने के लिए पर्याप्त नहीं है, यह सब है कि आप यूडीपी का उपयोग कैसे कर रहे हैं। विशेष रूप से, जबकि RUDP पुस्तकालय आमतौर पर "एक्सपोनेंशियल बैकऑफ़" से बचते हैं और छोटे रिट्रांसमीटर समय का उपयोग करते हैं - यदि उन्हें "विश्वसनीय आदेश" स्ट्रीम के रूप में उपयोग किया जाता है, तो उन्हें अभी भी हेड-ऑफ-लाइन ब्लॉकिंग से पीड़ित होना पड़ता है (इसलिए दोहरे के मामले में) पैकेट की हानि, 600ms के बजाय हम लगभग 1.5 * 2 * RTT - या एक बहुत अच्छा 80ms RTT के लिए प्राप्त करेंगे, यह एक ~ 250ms देरी है, जो एक सुधार है, लेकिन यह अभी भी बेहतर करना संभव है)। दूसरी ओर, यदि http://gafferongames.com/networked-physics/snapshot-compression/ और / या http: // ithare में चर्चा की गई तकनीकों का उपयोग किया जाता है। , यह पूरी तरह से हेड-ऑफ-लाइन ब्लॉकिंग को खत्म करने के लिए संभव है (इसलिए 20 अपडेट / सेकंड के साथ गेम के लिए डबल-पैकेट नुकसान के लिए, आरटीटी की परवाह किए बिना देरी 100ms होगी)।
और एक साइड नोट के रूप में - यदि आप केवल टीसीपी तक पहुँच प्राप्त करते हैं, लेकिन कोई यूडीपी नहीं है (जैसे कि ब्राउज़र में, या यदि आपका क्लाइंट यूडीपी को अवरुद्ध करने वाले 6-9% बदसूरत फ़ायरवॉल में से एक के पीछे है) - तो ऐसा लगता है यूडीपी-ओवर-टीसीपी को बहुत अधिक विलंब के बिना लागू करें, यहां देखें : http://ithare.com/almost-zero-additional-latency-udp-over-tcp/ (टिप्पणियों को पढ़ने के लिए सुनिश्चित करें! (!)।
डेटा प्रसारित होने से पहले प्रत्येक टीसीपी कनेक्शन को एक प्रारंभिक हैंडशेक की आवश्यकता होती है। इसके अलावा, टीसीपी हेडर में विभिन्न संकेतों और संदेश वितरण का पता लगाने के लिए बहुत अधिक ओवरहेड है। एक संदेश विनिमय के लिए, यूडीपी संभवतः पर्याप्त होगा यदि विफलता का एक छोटा मौका स्वीकार्य है। यदि रसीद को सत्यापित किया जाना चाहिए, तो टीसीपी आपका सबसे अच्छा विकल्प है।
@ और , मैं अलग करने के लिए भीख माँगती हूँ। प्रदर्शन की आवश्यकताओं के कारण यूडीपी कुछ प्रकार के आवेदन में विकल्प है। एक क्लासिक उदाहरण वीडियो कॉन्फ्रेंसिंग है। इस तरह का एप्लिकेशन टीसीपी नियंत्रण के लिए अच्छी तरह से प्रतिक्रिया नहीं देता है।
अन्य पहलुओं पर विचार करने के लिए यदि आप मल्टीकास्ट की जरूरत है। यदि हां, तो यूडीपी का उपयोग करें।
मैं सिर्फ बातें स्पष्ट करूंगा। टीसीपी / यूडीपी दो कारें हैं जिन्हें सड़क पर चलाया जा रहा है। मान लें कि ट्रैफ़िक संकेत और बाधाएं ट्रैफ़िक संकेतों के लिए त्रुटियाँ टीसीपी परवाह हैं, चारों ओर सब कुछ का सम्मान करता है। धीमी गति से ड्राइविंग क्योंकि कार में कुछ हो सकता है। जबकि यूडीपी केवल ड्राइव करता है, पूर्ण गति सड़क संकेतों के लिए कोई सम्मान नहीं है। कुछ नहीं, एक पागल चालक। यूडीपी में त्रुटि सुधार नहीं है, यदि कोई बाधा है, तो यह बस इसके साथ टकराएगा। जबकि टीसीपी यह सुनिश्चित करता है कि सभी पैकेट पूरी तरह से भेजे और प्राप्त किए जाएं, कोई त्रुटि नहीं है, इसलिए, कार बस टकराए बिना बाधाओं को पार करती है। मुझे उम्मीद है कि यह समझने के लिए यह एक अच्छा उदाहरण है, गेमिंग में यूडीपी को क्यों पसंद किया जाता है। गेमिंग को गति चाहिए। टीसीपी डाउनलोड में पूर्वनिर्मित है, या डाउनलोड की गई फाइलें दूषित हो सकती हैं।
यूडीपी मेरे अनुभव में थोड़ा तेज है, लेकिन बहुत ज्यादा नहीं है। चुनाव प्रदर्शन पर नहीं बल्कि संदेश सामग्री और संपीड़न तकनीकों पर होना चाहिए।
यदि यह संदेश विनिमय के साथ एक प्रोटोकॉल है , तो मेरा सुझाव है कि टीसीपी के साथ आपके द्वारा लिया गया बहुत मामूली प्रदर्शन इसके लायक है। आपको दो अंत बिंदुओं के बीच एक कनेक्शन दिया जाता है जो आपको आपकी जरूरत की हर चीज प्रदान करेगा। UDP के शीर्ष पर अपने स्वयं के विश्वसनीय दो-तरफ़ा प्रोटोकॉल का प्रयास करें और निर्माण न करें, जब तक कि आप वास्तव में आश्वस्त नहीं हों कि आप क्या कर रहे हैं।
ध्यान रखें कि टीसीपी आमतौर पर तार पर कई संदेश रखता है। यदि आप इसे UDP में लागू करना चाहते हैं, तो यदि आप इसे मज़बूती से करना चाहते हैं तो आपके पास बहुत काम होंगे। आपका समाधान या तो कम विश्वसनीय, कम तेज़ या काम की अविश्वसनीय राशि होने वाला है। यूडीपी के वैध अनुप्रयोग हैं, लेकिन यदि आप यह सवाल पूछ रहे हैं तो शायद आप नहीं हैं।
प्रोग्रामर को दोनों दुनिया के लाभों के लिए अनुमति देने के लिए कुछ काम किया गया है।
SCTP
यह एक स्वतंत्र परिवहन परत प्रोटोोल है, लेकिन इसे यूडीपी पर अतिरिक्त परत प्रदान करने वाले पुस्तकालय के रूप में इस्तेमाल किया जा सकता है। संचार की मूल इकाई एक संदेश है (एक या अधिक यूडीपी पैकेट के लिए मैप किया गया)। इसमें बनाया गया कंजेशन कंट्रोल है। प्रोटोकॉल में स्विच करने के लिए नॉब्स और ट्विडल्स हैं
यदि आपके किसी विशेष एप्लिकेशन के लिए इसमें से किसी की आवश्यकता है।
इसके साथ एक मुद्दा यह है कि कनेक्शन स्थापना एक जटिल है (और इसलिए धीमी प्रक्रिया)
अन्य समान सामान
एक और समान स्वामित्व वाली प्रायोगिक चीज़
यह टीसीपी के तिहरे तरीके से सुधार करने और तेज लाइनों से बेहतर तरीके से निपटने के लिए भीड़ नियंत्रण को बदलने की कोशिश करता है।
नेटवर्क स्थिति को ध्यान में रखे बिना टीसीपी या यूडीपी के बारे में बात करना निरर्थक है। यदि दो बिंदुओं के बीच के नेटवर्क की गुणवत्ता बहुत अधिक है, तो UDP TCP की तुलना में पूरी तरह से तेज़ है, लेकिन कुछ अन्य मामलों जैसे कि GPRS नेटवर्क में, TCP UDP की तुलना में अधिक तेज़ और अधिक विश्वसनीयता वाला हो सकता है।
किसी भी माप के लिए नेटवर्क सेटअप महत्वपूर्ण है। इससे बहुत फर्क पड़ता है, अगर आप अपने स्थानीय मशीन पर या दुनिया के दूसरे छोर पर सॉकेट्स के माध्यम से संचार कर रहे हैं।
तीन बातें जिन्हें मैं चर्चा में जोड़ना चाहता हूं: