क्या यह समझ में आता है कि एक ही बार में टीसीपी और यूडीपी दोनों का उपयोग किया जा सकता है?


10

पढ़ने के बाद क्या यूडीपी डेटा-हैवी रियलटाइम गेम के लिए टीसीपी से बेहतर है? , मैं सोच रहा था कि यह एक ही समय में टीसीपी और यूडीपी दोनों का उपयोग करने के लिए समझ में आता है, लेकिन अलग-अलग चीजों के लिए:

  • टीसीपी जानकारी भेजने के लिए जिसे बार-बार भेजा जाता है, लेकिन इसे विश्वसनीय तरीके से पहुंचने की गारंटी दी जानी चाहिए।
    जैसे कि खेल की दुनिया में स्कोर अपडेट, एक खिलाड़ी का नाम, या एक लाइट की ऑन / ऑफ स्थिति।

  • UDP जानकारी को लगातार अपडेट करने के लिए और कभी-कभी खो सकती है, क्योंकि नई जानकारी हमेशा रास्ते में होती है।
    जैसे कि स्थिति, रोटेशन, आदि।

क्या यह एक उचित विचार है? संभावित कमियां क्या हैं?
क्या इसे संभालने के बेहतर तरीके हैं?


इस साइट पर udp और tcp के विषय में बाकी सूत्र पढ़ना सुनिश्चित करें। आपको कई विवरण मिलेंगे जो अनिवार्य रूप से आपके प्रश्नों से निपटते हैं। एक परिकल्पना के रूप में: मुझे संदेह है कि यूडीपी पर हाइब्रिड प्रोटोकॉल हैं जो दोनों दुनिया से बाहर निकलने की कोशिश करते हैं, यानी कम विलंबता, विवाद रणनीति, भार संतुलन और वितरण की गारंटी। जैसा कि सुझाव दिया गया है, विषय पर संबंधित प्रश्नों की खोज करें और अपने प्रश्न को उस चीज़ तक सीमित करें जो आपको लगता है कि अभी तक यहां संबोधित नहीं किया गया है।
तेओद्रोन

@teodron आपको संदेह नहीं है। जैसा कि मेरे उत्तर में कहा गया है, यह एक तथ्य है।
इंजीनियर

जवाबों:


8

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

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

उन का एक उदाहरण ओपन सोर्स एनेट लाइब्रेरी है , इसकी प्राथमिक विशेषता वैकल्पिक विश्वसनीय है, यूडीपी पर पैकेटों का वितरण।


1
उत्तर को "मीटियर" बनाने के लिए, क्या आप यूडीपी-आधारित परिवहन पुस्तकालयों के लिए विकल्पों / संदर्भों की एक छोटी (बहुत छोटी) सूची प्रदान कर सकते हैं? (शायद ईएनईटी, आरकेनेट, शून्यएमक्यू, यूडीटी?)। उपरोक्त मेरी टिप्पणी के अनुसार, मुझे यकीन है कि मैंने इस साइट पर कहीं न कहीं इन पर एक चर्चा देखी है, लेकिन यह उस सूचनापट के एक टुकड़े की नकल करने के लायक हो सकता है।
तियोड्रोन

1
@Arcane इंजीनियर क्या होगा अगर यूडीपी और टीसीपी सॉकेट विभिन्न बंदरगाहों पर चल रहे हैं?
केआरजेड

@KareZ को कोई फर्क नहीं पड़ना चाहिए। जो अध्ययन किए गए हैं (लिंक में लिंक देखें) मान्य नहीं होगा यदि यह बंदरगाहों में विभाजित होने का एक साधारण मामला था। दिन के अंत में, एक बंदरगाह सिर्फ एक सॉफ्टवेयर पोर्ट है। यह वास्तव में नेटवर्क विशेषताओं को प्रभावित नहीं करता है, जो कि यह उबाल है।
इंजीनियर

जो आप कहते हैं वह समझ में आता है, लेकिन मैं मदद नहीं कर सकता, लेकिन अगर यह अभी भी लागू होता है, जहां बहुत कम टीसीपी ट्रैफिक है। यदि टीसीपी पर केवल थोड़ी मात्रा में जानकारी प्रसारित की जाती है, तो हर एक ~ 10 सेकंड में औसतन एक या दो बार कहें, क्या यह वास्तव में यूडीपी ट्रैफ़िक को प्रभावित करेगा?
gandalf3

2
"टीसीपी यूडीपी पैकेट नुकसान को प्रेरित करता है" पेपर की कोई तारीख नहीं है। इसका सबसे हालिया संदर्भ 1996 से है। पेपर कब से है? क्या निष्कर्ष अभी भी मान्य है?
एंड्रियास

4

यहाँ gafferongames.com पर एक टिप्पणी से सैम Jansen द्वारा एक उद्धरण है :

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

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

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

यूडीपी पैकेट हानि के पेपर के लक्षण: टीसीपी ट्रैफिक के प्रभाव ने एक साथ कई टीसीपी कनेक्शन खोलकर और नेटवर्क को डेटा के साथ भर दिया। इससे वैश्विक सिंक्रनाइज़ेशन के बाद भीड़भाड़ होती है , जिसके कारण दोनों पैकेट गिरा दिए जाते हैं। जाहिर है, एक गेम क्लाइंट एक बार में एक दर्जन कनेक्शन नहीं खोलेगा और डेटा के साथ नेटवर्क को बाढ़ देगा, और इसलिए आपके परिणाम अलग होंगे।

तुम्हारे प्रश्न का उत्तर देने के लिए:

मुझे आश्चर्य है कि अगर यह एक ही समय में टीसीपी और यूडीपी दोनों का उपयोग करने के लिए समझ में आता है, लेकिन विभिन्न चीजों के लिए [...]

हां, यह मानने योग्य बात है कि आप अपनी बैंडविड्थ सीमा के भीतर रहें।

  • टीसीपी जानकारी भेजने के लिए जिसे बार-बार भेजा जाता है, लेकिन इसे विश्वसनीय तरीके से पहुंचने की गारंटी दी जानी चाहिए। जैसे कि खेल की दुनिया में स्कोर अपडेट, एक खिलाड़ी का नाम, या एक लाइट की ऑन / ऑफ स्थिति।

टीसीपी और यूडीपी दोनों का उपयोग करते समय, आपको हमेशा यूडीपी पर अधिक से अधिक और टीसीपी पर जितना संभव हो उतना कम भेजना पसंद करना चाहिए।

अब, मैं आपसे यह पूछता हूं: क्या टीसीपी पर स्कोर, खिलाड़ी का नाम और प्रकाश की स्थिति को भेजना वास्तव में आवश्यक है? हालांकि यह सच है कि आपको अंततः यह डेटा प्राप्त करने की आवश्यकता है, क्या यह सच है कि आपको यह डेटा सख्ती से-क्रम में और एक बार प्राप्त करने की आवश्यकता है?

शायद ऩही।

यूडीपी इन मामलों के लिए ठीक काम करता है, और क्वेक 3 इसका एक अच्छा उदाहरण है।

तो UDP के साथ TCP का एक अच्छा उदाहरण क्या है? खैर, एक गेम के चैटबॉक्स के बारे में सोचें। इस चैटबॉक्स (यानी पाठ की नई पंक्तियों) के अपडेट को विश्वसनीय और सख्ती से आदेश दोनों में भेजने की आवश्यकता है। इस प्रकार, टीसीपी एक अच्छा फिट है।


3

क्या यह एक उचित विचार है?

  • हाँ

संभावित कमियां क्या हैं?

  • पैकेट हानि, अधिक कोड जटिलता, प्रबंधन के लिए एक और कनेक्शन == डिस्कनेक्ट के लिए अधिक मौका, समय बहिष्कार, अपवाद, जो भी ...

क्या इसे संभालने के बेहतर तरीके हैं?

  • किसी मौजूदा विश्वसनीय UDP लाइब्रेरी का उपयोग करें। दो सबसे लोकप्रिय हैं: Lidgren नेटवर्क (C #), RakNet (C ++)। अनुभव से मैं कह सकता हूँ कि Lidgren का उपयोग करना, तेज, और विश्वसनीय सुपर आसान है।

1

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

सीमाएं नेटवर्क सिस्टम में सेटिंग्स द्वारा परिभाषित की जाती हैं। इसके अतिरिक्त हर कनेक्शन कुछ मेमोरी का उपयोग करता है जिसे सर्वर पर कहीं से आना होता है।

एक समाधान केवल एक अस्थायी टीसीपी कनेक्शन खोलना है जबकि डेटा स्थानांतरित किया जाता है और इसे तुरंत बंद कर दें। यह लेनदेन को धीमा कर देगा, टीसीपी कनेक्शन खोलना एक "महंगी" प्रक्रिया है। हमेशा की तरह, यह बड़ी वृद्धि की अनुमति देने के लिए शुरुआत से ही एक मजबूत प्रणाली तैयार करने के बारे में है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.