UDP बनाम TCP, यह कितना तेज है? [बन्द है]


194

सामान्य प्रोटोकॉल संदेश विनिमय के लिए, जो कुछ पैकेट नुकसान को सहन कर सकता है। टीसीपी पर यूडीपी कितना अधिक कुशल है?


आप टीसीपी के बारे में सवाल के बाद भी "tcp" टैग जोड़ सकते हैं।
क्रिस्टियन सियुपिटु

5
"सामान्य प्रोटोकॉल संदेश विनिमय" का क्या अर्थ है? सवाल स्पष्ट करने की जरूरत है कि दक्षता किस बारे में है। क्या हम एक छोटे संदेश के लिए कम विलंबता चाहते हैं? या, क्या हम डेटा की एक सतत धारा के लिए एक उच्च प्रवाह चाहते हैं?
जोहान बोउले

Tcp में स्पीड को छोड़कर UDP की तुलना में अधिक बेहतर विशेषताएं हैं।
RAJKUMAR NAGARETHINAM

3
टीसीपी बनाम यूडीपी गति का सवाल मूक है। आपके शीर्षक का प्रश्न वास्तव में प्रश्न के शरीर से मेल नहीं खाता है। टीसीपी और यूडीपी दोनों पैकेट एक ही माध्यम पर समान गति से यात्रा करते हैं।
रॉन मूपिन

जवाबों:


86

UDP TCP की तुलना में तेज़ है, और इसका साधारण कारण यह है कि इसकी गैर-मौजूदगी स्वीकार पैकेट (ACK) है जो TCP के आकार और गोल-यात्रा समय का उपयोग करके परिकलित पैकेट के बजाय TCP के बजाय एक सतत पैकेट प्रवाह की अनुमति देता है। (RTT)।

अधिक जानकारी के लिए, मैं सरल, लेकिन बहुत समझदार स्कलबॉक्स विवरण (टीसीपी बनाम यूडीपी) की सिफारिश करता हूं


19
वास्तव में ऐसे कई मामले हैं जहां टीसीपी वास्तव में यूडीपी से तेज है। नीचे मेरा जवाब देखें।
रॉबर्ट एस। बार्न्स

2
जो तेज है वह पूरी तरह से यातायात विशेषताओं पर निर्भर करता है।

4
हालांकि उत्तर सही हो सकता है, यह सवाल का जवाब नहीं देता है, और बार-बार उल्लेख किए गए ज्ञान को दोहराता है। यह भी उल्लेख करने में विफल रहता है कि एसीके के साथ विश्वसनीय यूडीपी विधियां टीसीपी की तुलना में काफी तेज हो सकती हैं।
इलियट वुड्स

268

लोगों का कहना है कि टीसीपी आपको जो प्रमुख चीज देती है, वह विश्वसनीयता है। लेकिन यह वास्तव में सच नहीं है। सबसे महत्वपूर्ण बात जो टीसीपी आपको देता है वह है कंजेशन कंट्रोल: आप अधिकतम गति से जा रहे एक डीएसएल लिंक पर 100 टीसीपी कनेक्शन चला सकते हैं, और सभी 100 कनेक्शन उत्पादक होंगे, क्योंकि वे सभी उपलब्ध बैंडविड्थ को "समझ" लेते हैं। कोशिश करें कि 100 अलग-अलग यूडीपी अनुप्रयोगों के साथ, सभी पुश पैकेट जितनी तेजी से वे जा सकते हैं, और देखें कि आपके लिए चीजें कितनी अच्छी हैं।

बड़े पैमाने पर, यह टीसीपी व्यवहार वह है जो इंटरनेट को "भीड़भाड़ पतन" में बंद करने से रोकता है।

यूडीपी की ओर अनुप्रयोगों को धक्का देने वाली चीजें:

  • समूह वितरण शब्दार्थ: टीसीपी के बिंदु-टू-प्वाइंट पावती की तुलना में बहुत अधिक कुशलता से लोगों के समूह को विश्वसनीय वितरण करना संभव है।

  • आउट-ऑफ-ऑर्डर डिलीवरी: जब तक आप सभी डेटा प्राप्त नहीं करते तब तक बहुत सारे अनुप्रयोगों में, आपको परवाह नहीं है कि यह किस क्रम में आता है; आप एक आउट-ऑफ-ऑर्डर ब्लॉक को स्वीकार करके ऐप-स्तरीय विलंबता को कम कर सकते हैं।

  • दोस्ती: एक लैन पार्टी पर, आप परवाह नहीं कर सकते हैं कि जब तक आप संभवतः जितना संभव हो उतना तेजी से अपने वेब ब्राउज़र को नेटवर्क पर अपडेट कर रहे हैं।

लेकिन भले ही आप प्रदर्शन के बारे में परवाह करते हैं, आप शायद यूडीपी के साथ नहीं जाना चाहते हैं:

  • आप अभी विश्वसनीयता के लिए हुक पर हैं, और विश्वसनीयता को कार्यान्वित करने के लिए आपके द्वारा की जा सकने वाली बहुत सी चीज़ें पहले से ही टीसीपी की तुलना में धीमी हो सकती हैं।

  • अब आप नेटवर्क-अनफ्रेंडली हैं, जो साझा वातावरण में समस्या पैदा कर सकते हैं।

  • सबसे महत्वपूर्ण बात, फायरवॉल आपको ब्लॉक करेगा।

आप कई टीसीपी कनेक्शनों को एक साथ "ट्रंकिंग" करके कुछ टीसीपी प्रदर्शन और विलंबता के मुद्दों को दूर कर सकते हैं; iSCSI लोकल एरिया नेटवर्क पर कंजेशन कंट्रोल पाने के लिए ऐसा करता है, लेकिन आप इसे लो-लेटेंसी "अर्जेंट" मैसेज चैनल बनाने के लिए भी कर सकते हैं (TCP का "URGENT" व्यवहार पूरी तरह से टूट गया है)।


18
अच्छा जवाब, मैं और भी सामान्य जाऊंगा, "प्रवाह नियंत्रण" (जैसा कि भीड़ नियंत्रण के विपरीत है, जो प्रवाह नियंत्रण का सबसेट है)। न केवल कई टीसीपी कनेक्शन एक लिंक साझा कर सकते हैं, बल्कि अगर यह किसी भी कारण से आने वाले डेटा को संसाधित करता है, तो यह प्रेषक के बफर को ओवरफ्लो करने से भी रोकता है।
एलेक्स बी

1
@ एरोनएलएस: पैकेट की हानि और आरटीटी (राउंडट्रिप समय) बढ़ जाती है (जिसे कतार में देरी के लिए प्रॉक्सी के रूप में देखा जा सकता है ) / हैं (उदाहरण के लिए: वाईफाई नेटवर्क वास्तविक भीड़भाड़ के बिना पैकेट खो सकते हैं, कुछ टीसीपी भीड़ नियंत्रण एल्गोरिदम को भीड़भाड़ से बचाव में बेवकूफ बनाते हैं) भीड़ संकेतक।
नवजाल

2
UDP से निपटने के लिए एक कमीने व्यक्ति है ... मैं इस पर पहले से ही जला हुआ हूं। कोई फर्क नहीं पड़ता कि मैं क्या करता हूं, मुझे प्रदर्शन, विलंबता, थ्रूपुट, विश्वसनीयता का संतुलन नहीं मिल रहा है। वास्तविक समय की चीजों के लिए बढ़िया है जैसे टाइमर पर चीजें ... लेकिन मैं यूडीपी और फॉरवर्ड एरर करेक्शन का उपयोग करते हुए एक टीसीपी प्रतिस्थापन पर काम कर रहा हूं और यह बहुत कठिन है जितना मैंने सोचा था कि यह होने वाला था। भीड़ नियंत्रण। एक सार्वभौमिक प्रणाली जो 1 जीबी नेटवर्क और वायरलेस नेटवर्क पर काम करती है, सभी एक ही कला का काम है। मुझे लगता है कि मैं पैकेट को फिर से इकट्ठा करने की कोशिश कर रहा हूं जिसे एक बन्दूक में लोड किया गया था।
जेसन नेल्सन

1
टीसीपी के पक्ष में एक और एक Btw यह है कि यह स्वाभाविक रूप से कनेक्शन उन्मुख है, जो अनुप्रयोग क्लाइंट हैंडलिंग लॉजिक को सरल करता है ( listen-> accept-> ग्राहक राज्य स्वाभाविक रूप से अन्य ग्राहकों से स्वतंत्र है)। किसी एकल क्लाइंट से कई कनेक्शनों को संभालना विशेष रूप से UDP के साथ बहुत मुश्किल हो जाता है। और यूडीपी के पक्ष में एक बिंदु यूडीपी स्टैक वास्तव में लागू करना आसान है, जो एम्बेडेड सिस्टम (माइक्रोकंट्रोलर, एफपीजीएएस आदि) पर एक बड़ा प्लस है, विशेष रूप से एक एफपीजीए के लिए टीसीपी कार्यान्वयन आमतौर पर कुछ ऐसा है जिसे आप सिर्फ किसी और के साथ खरीदना चाहते हैं। और इसके बारे में नहीं सोचते)।
जेसन सी

1
यह सब केवल यह मानते हुए है कि हम बड़े पैमाने पर डेटा वितरण में रुचि रखते हैं (बिना विलंबता के बारे में बहुत अधिक ध्यान दिए बिना)। काफी कुछ ऐप्स (गेम्स / वीओआईपी) में, स्थिति काफी भिन्न होती है: हमारे पास डेटा की बहुत अधिक मात्रा है, लेकिन अक्षांश ए लॉट के बारे में ध्यान रखें; यह साधारण बात है जो यूडीपी के लिए 99% कानूनी उपयोग के लिए जिम्मेदार है। और कुछ नाइटपिक्स: (ए) समूह वितरण इंटरनेट पर काम नहीं करता है (और कभी भी संभावना नहीं है), इसलिए यह इंट्रानेट-केवल क्षेत्र है; (b) प्रति Google, केवल 8-9% इंटरनेट आबादी में UDP के साथ समस्याएँ हैं; (c) "नेटवर्क अनफ्रेंडली" फिक्स्ड-रेट स्ट्रीम के लिए लागू नहीं होता है
No-Bugs Hare

93

कुछ अनुप्रयोगों में टीसीपी यूडीपी की तुलना में तेज (बेहतर थ्रूपुट) है।

यह ऐसा मामला है जब MTU आकार के सापेक्ष बहुत सारे छोटे लेखन करते हैं। उदाहरण के लिए, मैंने एक प्रयोग पढ़ा जिसमें ईथरनेट (1500 बाइट एमटीयू) पर 300 बाइट पैकेट की एक धारा भेजी जा रही थी और टीसीपी यूडीपी की तुलना में 50% तेज था

इसका कारण यह है कि टीसीपी डेटा की कोशिश और बफर करेगा और एक पूर्ण नेटवर्क सेगमेंट को भरेगा और इस प्रकार उपलब्ध बैंडविड्थ का अधिक कुशल उपयोग करेगा।

दूसरी ओर यूडीपी पैकेट को तुरंत तार पर रख देता है और इस तरह नेटवर्क को बहुत सारे छोटे पैकेटों के साथ जोड़ देता है।

जब तक आपके पास ऐसा करने का कोई विशेष कारण नहीं है, आपको शायद यूडीपी का उपयोग नहीं करना चाहिए। खासकर जब से आप नागल एल्गोरिथ्म को अक्षम करके यूडीपी के समान टीसीपी लेटेस्ट दे सकते हैं (उदाहरण के लिए यदि आप वास्तविक समय सेंसर डेटा संचारित कर रहे हैं और आप बहुत छोटे पैकेट के साथ नेटवर्क को जीतने के बारे में चिंतित नहीं हैं)।


3
मैंने वास्तव में इस आशय के मानदंड किए हैं। मैं ऐसे पैकेट भेज रहा था जो बड़े अपवाद के रूप में यूडीपी के समर्थन के बिना थे (जावा में) और टीसीपी बहुत तेज था। मैं बहुत से OS, ड्राइवर और हार्डवेयर ऑप्टिमाइज़ेशन का अनुमान लगाऊंगा और यह भी इसका हिस्सा हैं।
चार्ली

14
@Myforwik: सबसे पहले, यह कार्यान्वयन परिभाषित नहीं है, यह टीसीपी प्रोटोकॉल का हिस्सा है। इसे नागले एल्गोरिदम कहा जाता है। यह रोकने में मदद करता है जिसे आमतौर पर सिली विंडो सिंड्रोम के रूप में जाना जाता है। दोनों शब्दों को देखें। दूसरा, टीसीपी के पीओवी से पैकेट की कोई अवधारणा नहीं है। अंत में, पुस्तक "प्रभावी टीसीपी / आईपी प्रोग्रामिंग" इस विषय पर एक पूरा अध्याय और टीसीपी बनाम यूडीपी का उपयोग करने के लिए संबंधित विषय के कई अन्य अध्यायों को जानने के लिए समर्पित करता है। मैं इस स्थिति को लाता हूं (जो वास्तव में काफी सामान्य है) क्योंकि ओपी ने एक सामान्य प्रश्न पूछा था, और यह कई संभावित उत्तरों में से एक है।
रॉबर्ट एस। बार्न्स

46
@Myforwik। दूसरों में नैतिकता का सुझाव देते समय, यह महसूस करने की कोशिश करें कि हम सभी को हमारे ज्ञान में अंतराल है - आपने शामिल किया। अतः, आखिरकार, ज्ञान-साझा करने के लिए एक मंच है। बहुत ज्यादा सभी पहले व्यक्ति निशानेबाज यूडीपी का उपयोग करते हैं, और उनके लिए एमटीयू जितना बड़ा आकार कहीं भी पैकेट भेजना दुर्लभ है। यदि आप जॉन कार्मैक के पास जाना और सुझाव देना चाहते हैं, तो इस दृष्टिकोण के साथ आने के लिए वह एक मूर्ख व्यक्ति था, मैं आपको इस संबंध में खुद को अच्छी तरह से शिक्षित करने के लिए प्रोत्साहित करूंगा। 15 साल, और उच्च प्रदर्शन नेटवर्किंग कोड के लायक एक उद्योग नीचे झूठ नहीं बोलता है और मर जाता है क्योंकि आपको लगता है कि यह "नैतिक" है।
इंजीनियर

2
" मैंने एक प्रयोग पढ़ा, जिसमें 300 बाइट पैकेटों की एक धारा को ईथरनेट (1500 बाइट एमटीयू) पर भेजा जा रहा था और टीसीपी यूडीपी की तुलना में 50% तेज था। " - क्या आप इस प्रयोग को लिंक कर सकते हैं?
लेविथान

3
@ लेविथान यह प्रभावी टीसीपी / आईपी प्रोग्रामिंग पुस्तक में है।
रॉबर्ट एस। बार्न्स

31

नुकसान सहिष्णु के साथ

क्या आपका मतलब "नुकसान सहिष्णुता के साथ" है?

मूल रूप से, यूडीपी "नुकसान सहिष्णु" नहीं है। आप किसी को 100 पैकेट भेज सकते हैं, और वे केवल उन पैकेटों में से 95 प्राप्त कर सकते हैं, और कुछ गलत क्रम में हो सकते हैं।

वीडियो स्ट्रीमिंग, और मल्टीप्लेयर गेमिंग जैसी चीज़ों के लिए, जहाँ एक पैकेट को मिस करना बेहतर है, उसके पीछे अन्य सभी पैकेटों को देरी करने के लिए, यह स्पष्ट पसंद है

अधिकांश अन्य चीजों के लिए, एक लापता या 'पुनर्व्यवस्थित' पैकेट महत्वपूर्ण है। यदि चीजें छूट गईं, और सही क्रम लागू करने के लिए आपको UDP के शीर्ष पर चलने के लिए कुछ अतिरिक्त कोड लिखना होगा। यह कुछ स्थानों पर ओवरहेड का एक छोटा सा जोड़ देगा।

शुक्र है, कुछ बहुत ही स्मार्ट लोगों ने ऐसा किया है, और उन्होंने इसे टीसीपी कहा है।

इसे इस तरह से सोचें: यदि एक पैकेट गायब हो जाता है, तो क्या आप केवल अगले पैकेट को जितनी जल्दी हो सके और जारी रखेंगे (यूडीपी का उपयोग करें), या क्या आपको वास्तव में उस लापता डेटा (टीसीपी का उपयोग करें) की आवश्यकता है। ओवरहेड तब तक मायने नहीं रखेगा जब तक कि आप वास्तव में एज-केस परिदृश्य में न हों।


1
100 में से 5 पैकेट? यह काफी है। मुझे लगता है कि यह सिर्फ एक उदाहरण है। प्रश्न: वास्तविक स्थिति में कितने पैकेट खो सकते हैं? क्योंकि अगर यह उदाहरण के लिए 10000 में से 2 (प्लस माइनस 1) है, तो मुझे इस बारे में चिंता नहीं होगी।
अजीब

1
@ अजीब, हाँ यह सिर्फ एक उदाहरण था। पैकेट लॉस की वास्तविक मात्रा आपके कनेक्शन, अपस्ट्रीम नेटवर्क आदि पर निर्भर करती है। मैं बहुत सारे ऑनलाइन गेम खेलता था, और मुझे लगता है कि अगर यह सिर्फ इंटरनेट कनेक्शन का उपयोग कर रहा था, तो मुझे कोई पैकेट नुकसान नहीं होगा, लेकिन जैसे ही मैं एक पृष्ठभूमि डाउनलोड लॉन्च करूंगा, मुझे कुछ (शायद 10% -20%) मिलना शुरू हो जाएगा। यह लगभग 5 साल पहले था, और तेज इंटरनेट कनेक्शन मदद कर सकता है।
ओरियन एडवर्ड्स

2
इंटरनेट राउटर udp को tcp से पहले छोड़ देता है
user1496062

19

कौन सा प्रोटोकॉल बेहतर कार्य करता है (थ्रूपुट के संदर्भ में) - यूडीपी या टीसीपी - वास्तव में नेटवर्क विशेषताओं और नेटवर्क ट्रैफ़िक पर निर्भर करता है। उदाहरण के लिए, रॉबर्ट एस। बार्न्स एक परिदृश्य बताते हैं जहां टीसीपी बेहतर प्रदर्शन करता है (छोटे आकार का लेखन)। अब, उस परिदृश्य पर विचार करें जिसमें नेटवर्क भीड़भाड़ में है और इसमें टीसीपी और यूडीपी दोनों ट्रैफ़िक हैं। टीसीपी का उपयोग कर रहे नेटवर्क में प्रेषक 'जमाव' को समझेंगे और उनकी भेजने की दरों में कटौती करेंगे। हालाँकि, UDP के पास कोई भीड़-भाड़ से बचने या भीड़-भाड़ नियंत्रण तंत्र नहीं है, और UDP का उपयोग करने वाले प्रेषक डेटा को उसी दर पर पंप करना जारी रखेंगे। धीरे-धीरे, टीसीपी प्रेषक अपनी न्यूनतम दरों को भेजना कम कर देंगे और अगर यूडीपी भेजने वालों के पास नेटवर्क पर भेजे जाने के लिए पर्याप्त डेटा है, तो वे उपलब्ध बैंडविड्थ के बहुमत को रोक देंगे। तो, ऐसे मामले में, यूडीपी भेजने वालों के पास अधिक थ्रूपुट होगा, क्योंकि उन्हें नेटवर्क बैंडविड्थ का बड़ा पाई मिलती है। वास्तव में, यह एक सक्रिय शोध विषय है - यूडीपी ट्रैफिक की उपस्थिति में टीसीपी थ्रूपुट में सुधार कैसे करें। एक तरीका, जो मुझे पता है, जिसके उपयोग से टीसीपी अनुप्रयोग कई टीसीपी कनेक्शन खोलकर थ्रूपुट में सुधार कर सकते हैं। इस तरह, भले ही प्रत्येक टीसीपी कनेक्शन का थ्रूपुट सीमित हो सकता है, सभी टीसीपी कनेक्शन के थ्रूपुट का योग यूडीपी का उपयोग करने वाले एप्लिकेशन के लिए थ्रूपुट से अधिक हो सकता है।


2
यह सही नहीं है कि राउटर टीसीपी से पहले यूडीपी छोड़ देगा। एक साझा तार पर आप यूडीपी द्वारा डूब सकते हैं लेकिन ओवरसूप्ली स्थिति में क्या होने की संभावना है, प्रौद्योगिकी पर निर्भर करता है लेकिन यूडीपी के लिए यह बहुत आसान है कि बहुत कम बस टकराव भेजा जा रहा है।
user1496062

मुझे आपका स्पष्टीकरण पसंद है लेकिन एक बिंदु नहीं मिलता। यदि उस स्थिति में UDP कनेक्शन सभी ट्रैफ़िक प्राप्त कर सकते हैं (यदि बैंडविड्थ कम है या डेटा अधिक है) तो उस स्थिति में आपका आवेदन यदि TCP का उपयोग कर रहा है तो मूल रूप से UDP का उपयोग करने वालों को बंधक बना लिया जाता है। यदि सभी एप्लिकेशन टीसीपी का उपयोग कर रहे हैं, तो वे एक-दूसरे के साथ "अच्छा खेलते हैं"। तो फिर यूडीपी को पहले स्थान पर क्यों रखा गया?
इगोर 26ordaš

@PSIXO: खैर, टीसीपी और यूडीपी अलग-अलग एप्लिकेशन आवश्यकताओं को पूरा करते हैं, इसलिए दोनों का उपयोग अनुप्रयोगों द्वारा किया जाता है। आपके सुझाव का निहितार्थ यह है कि हमारे पास टीसीपी और यूडीपी ट्रैफ़िक के लिए अलग-अलग नेटवर्किंग अवसंरचना होनी चाहिए - एक महंगा प्रस्ताव, और निश्चित रूप से ऐसा कुछ नहीं है जो हम अभी कर सकते हैं, विशेष रूप से पहले से ही किए गए सभी निवेशों के साथ। इसीलिए शोधकर्ता 'सॉफ्टवेयर' में संघर्ष को संतुलित करने के लिए वैकल्पिक तरीके खोजने में व्यस्त हैं।
गजैन

अच्छी तरह से अनिवार्य रूप से हाँ, दो इन्फ्रास्ट्रक्चर होना एक सही समाधान होगा लेकिन दुर्भाग्य से यह प्रशंसनीय नहीं है। जो मैं अपनी टिप्पणी के साथ कहना चाहता था, वह यह था कि आप UDP को TCP में हिट कर रहे हैं क्योंकि अगर ऐसा होता है कि बहुत से कारक लोग सिर्फ UDP को राउटर पर अक्षम कर देते हैं (जैसा कि वे कभी-कभी कंपनियों में करते हैं) अगर उन्हें तेजी से काम करने के लिए टीसीपी की आवश्यकता होती है। यह भी ध्यान रखें कि यूडीपी के पैकेटों को टीसीपी में छोड़ने की संभावना अधिक होती है। आपके उत्तर के बाकी तथ्यों के बारे में मैं पूरी तरह सहमत हूं और इसे काफी मददगार मानता हूं लेकिन मुझे लगता है कि आप कुछ प्रभावों को कम कर रहे हैं।
इगोर 29ordaš

18

"तेज क्या है" की बात करते समय - कम से कम दो बहुत अलग पहलू होते हैं: थ्रूपुट और विलंबता।

यदि थ्रूपुट के बारे में कहा जाए - टीसीपी का प्रवाह नियंत्रण (जैसा कि अन्य उत्तरों में बताया गया है), अत्यंत महत्वपूर्ण है और यूडीपी पर तुलनीय कुछ भी कर सकता है, जबकि निश्चित रूप से संभव है, एक बड़ा सिरदर्द (टीएम) होगा। परिणामस्वरूप - जब आपको थ्रूपुट की आवश्यकता होती है तो यूडीपी का उपयोग करना , , शायद ही कभी एक अच्छे विचार के रूप में योग्य होता है (जब तक कि आप टीसीपी पर अनुचित लाभ प्राप्त नहीं करना चाहते हैं)।

हालांकि, अगर विलंबता के बारे में बात कर रहे हैं - पूरी बात पूरी तरह से अलग है। जबकि पैकेट नुकसान की अनुपस्थिति में टीसीपी और यूडीपी एक समान व्यवहार करते हैं (कोई अंतर, यदि कोई हो, सीमांत होना) - पैकेट खो जाने के बाद, पूरे पैटर्न में भारी बदलाव होता है।

किसी भी पैकेट के नुकसान के बाद, टीसीपी कम से कम 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/ (टिप्पणियों को पढ़ने के लिए सुनिश्चित करें! (!)।


13

डेटा प्रसारित होने से पहले प्रत्येक टीसीपी कनेक्शन को एक प्रारंभिक हैंडशेक की आवश्यकता होती है। इसके अलावा, टीसीपी हेडर में विभिन्न संकेतों और संदेश वितरण का पता लगाने के लिए बहुत अधिक ओवरहेड है। एक संदेश विनिमय के लिए, यूडीपी संभवतः पर्याप्त होगा यदि विफलता का एक छोटा मौका स्वीकार्य है। यदि रसीद को सत्यापित किया जाना चाहिए, तो टीसीपी आपका सबसे अच्छा विकल्प है।


विफलता का छोटा मौका और पैकेट के आकार पर एक सीमा।

11

@ और , मैं अलग करने के लिए भीख माँगती हूँ। प्रदर्शन की आवश्यकताओं के कारण यूडीपी कुछ प्रकार के आवेदन में विकल्प है। एक क्लासिक उदाहरण वीडियो कॉन्फ्रेंसिंग है। इस तरह का एप्लिकेशन टीसीपी नियंत्रण के लिए अच्छी तरह से प्रतिक्रिया नहीं देता है।

अन्य पहलुओं पर विचार करने के लिए यदि आप मल्टीकास्ट की जरूरत है। यदि हां, तो यूडीपी का उपयोग करें।


8
यूडीपी का उपयोग इसलिए भी किया जाता है क्योंकि अगर आपको एक पैकेट या दो की याद आती है, तो शायद वैसे भी बहुत देर हो चुकी है, और आप शायद इसे छोड़ दें, और आगे बढ़ें ताकि आप देखना जारी रख सकें। कुछ गिरा पैकेट की वजह से वीडियो में थोड़ा ब्लिप कंजेशन के टन होने से बहुत बेहतर है।
किब्बी

1
सही - नेटवर्क की बहु कास्टिंग बहुत दुर्लभ है सबसे रूटर्स इसे ब्लॉक करते हैं।
user1496062

8

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


1
कोई संदर्भ?
गेरार्ड

8

मैं सिर्फ बातें स्पष्ट करूंगा। टीसीपी / यूडीपी दो कारें हैं जिन्हें सड़क पर चलाया जा रहा है। मान लें कि ट्रैफ़िक संकेत और बाधाएं ट्रैफ़िक संकेतों के लिए त्रुटियाँ टीसीपी परवाह हैं, चारों ओर सब कुछ का सम्मान करता है। धीमी गति से ड्राइविंग क्योंकि कार में कुछ हो सकता है। जबकि यूडीपी केवल ड्राइव करता है, पूर्ण गति सड़क संकेतों के लिए कोई सम्मान नहीं है। कुछ नहीं, एक पागल चालक। यूडीपी में त्रुटि सुधार नहीं है, यदि कोई बाधा है, तो यह बस इसके साथ टकराएगा। जबकि टीसीपी यह सुनिश्चित करता है कि सभी पैकेट पूरी तरह से भेजे और प्राप्त किए जाएं, कोई त्रुटि नहीं है, इसलिए, कार बस टकराए बिना बाधाओं को पार करती है। मुझे उम्मीद है कि यह समझने के लिए यह एक अच्छा उदाहरण है, गेमिंग में यूडीपी को क्यों पसंद किया जाता है। गेमिंग को गति चाहिए। टीसीपी डाउनलोड में पूर्वनिर्मित है, या डाउनलोड की गई फाइलें दूषित हो सकती हैं।


7

यूडीपी मेरे अनुभव में थोड़ा तेज है, लेकिन बहुत ज्यादा नहीं है। चुनाव प्रदर्शन पर नहीं बल्कि संदेश सामग्री और संपीड़न तकनीकों पर होना चाहिए।

यदि यह संदेश विनिमय के साथ एक प्रोटोकॉल है , तो मेरा सुझाव है कि टीसीपी के साथ आपके द्वारा लिया गया बहुत मामूली प्रदर्शन इसके लायक है। आपको दो अंत बिंदुओं के बीच एक कनेक्शन दिया जाता है जो आपको आपकी जरूरत की हर चीज प्रदान करेगा। UDP के शीर्ष पर अपने स्वयं के विश्वसनीय दो-तरफ़ा प्रोटोकॉल का प्रयास करें और निर्माण न करें, जब तक कि आप वास्तव में आश्वस्त नहीं हों कि आप क्या कर रहे हैं।


5

ध्यान रखें कि टीसीपी आमतौर पर तार पर कई संदेश रखता है। यदि आप इसे UDP में लागू करना चाहते हैं, तो यदि आप इसे मज़बूती से करना चाहते हैं तो आपके पास बहुत काम होंगे। आपका समाधान या तो कम विश्वसनीय, कम तेज़ या काम की अविश्वसनीय राशि होने वाला है। यूडीपी के वैध अनुप्रयोग हैं, लेकिन यदि आप यह सवाल पूछ रहे हैं तो शायद आप नहीं हैं।


5

प्रोग्रामर को दोनों दुनिया के लाभों के लिए अनुमति देने के लिए कुछ काम किया गया है।

SCTP

यह एक स्वतंत्र परिवहन परत प्रोटोोल है, लेकिन इसे यूडीपी पर अतिरिक्त परत प्रदान करने वाले पुस्तकालय के रूप में इस्तेमाल किया जा सकता है। संचार की मूल इकाई एक संदेश है (एक या अधिक यूडीपी पैकेट के लिए मैप किया गया)। इसमें बनाया गया कंजेशन कंट्रोल है। प्रोटोकॉल में स्विच करने के लिए नॉब्स और ट्विडल्स हैं

  • संदेशों के वितरण में
  • उपयोगकर्ता द्वारा परिभाषित मापदंडों के साथ, खोए हुए संदेशों का स्वचालित पुन: प्रसारण

यदि आपके किसी विशेष एप्लिकेशन के लिए इसमें से किसी की आवश्यकता है।

इसके साथ एक मुद्दा यह है कि कनेक्शन स्थापना एक जटिल है (और इसलिए धीमी प्रक्रिया)

अन्य समान सामान

एक और समान स्वामित्व वाली प्रायोगिक चीज़

यह टीसीपी के तिहरे तरीके से सुधार करने और तेज लाइनों से बेहतर तरीके से निपटने के लिए भीड़ नियंत्रण को बदलने की कोशिश करता है।


3

नेटवर्क स्थिति को ध्यान में रखे बिना टीसीपी या यूडीपी के बारे में बात करना निरर्थक है। यदि दो बिंदुओं के बीच के नेटवर्क की गुणवत्ता बहुत अधिक है, तो UDP TCP की तुलना में पूरी तरह से तेज़ है, लेकिन कुछ अन्य मामलों जैसे कि GPRS नेटवर्क में, TCP UDP की तुलना में अधिक तेज़ और अधिक विश्वसनीयता वाला हो सकता है।


1

किसी भी माप के लिए नेटवर्क सेटअप महत्वपूर्ण है। इससे बहुत फर्क पड़ता है, अगर आप अपने स्थानीय मशीन पर या दुनिया के दूसरे छोर पर सॉकेट्स के माध्यम से संचार कर रहे हैं।

तीन बातें जिन्हें मैं चर्चा में जोड़ना चाहता हूं:

  1. आप यहां पा सकते हैं खेल विकास के संदर्भ में टीसीपी बनाम यूडीपी के बारे में बहुत अच्छा लेख ।
  2. इसके अतिरिक्त, अपने सवाल का जवाब देने के लिए iperf ( एक GUI के साथ jperf बढ़ाने वाला iperf) एक बहुत अच्छा उपकरण है।
  3. मैंने पायथन में एक बेंचमार्क लागू किया ( यह एसओ प्रश्न देखें )। 10 ^ 6 पुनरावृत्तियों के औसत में 8 बाइट भेजने का अंतर यूडीपी के लिए लगभग 1-2 माइक्रोसेकंड है।

1
बेंचमार्क को वास्तविक विश्व इंटरनेट के लिए प्रासंगिक बनाने के लिए, आपको इसे एक पैकेट नुकसान सिम्युलेटर जैसे कि नेटम के साथ फिर से चलाने की आवश्यकता है। यदि इसे सही (और 100% के सिम्युलेटेड RTT के साथ और 1% के नकली पैकेट नुकसान के साथ) किया जाता है, तो परिणाम काफी भिन्न होंगे। संक्षेप में - जबकि टीसीपी और यूडीपी विलंबता शून्य पैकेट नुकसान के लिए वास्तव में समान हैं - वे प्रत्येक खोए हुए पैकेट के लिए ए लॉट को अलग करना शुरू करते हैं।
नहीं-बग्स हरे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.