मल्टीप्लेयर गेम के लिए टीसीपी या यूडीपी?


18

यह एक ऐसा सवाल है जिसे मैं बहुत देखता हूं। ज्यादातर लोगों का कहना है कि UDP टीसीपी की तुलना में वास्तविक समय के खेल के लिए हमेशा बेहतर है। मेरी समझ यह है कि टीसीपी पैकेट को फिर से भेजने की कोशिश करता है और दूसरी तरफ उन्हें देता है जबकि UDP को कोई परवाह नहीं है।

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

क्या मेरी सामान्य समझ यहाँ गलत है? क्या कोई मेरे लिए यह स्पष्ट कर सकता है?


7
internet is now pretty fast and reliableनहीं यह नहीं। बैंडविड्थ नाटकीय रूप से वृद्धि हुई है, हाँ, लेकिन विलंबता अभी भी बहुत अधिक है। शुद्ध टीसीपी के साथ आपको सर्वर टिक समय की आवश्यकता होती है ताकि अधिकतम सस्ती विलंबता से अधिक हो, जब तक आप पैकेट स्क्विशिंग नहीं करते हैं - जो कि यूडीपी के माध्यम से क्लाइंट पर सबसे अच्छा किया जाता है। समस्या यह है कि एक गेम में कुछ जानकारी को विश्वसनीय होने की आवश्यकता होती है, जबकि कुछ अन्य को तेज करने की आवश्यकता होती है। यूडीपी के शीर्ष पर कस्टम प्रोटोकॉल इसके लिए अनुमति देते हैं, साथ ही साथ स्वामित्व वाले लोगों का एक समूह है जो आपको एक अच्छे पैकेज में आपकी जरूरत की हर चीज देता है।
साधारण

4
वे UDP पर TCP को ठीक से लागू नहीं करते हैं। कुछ विशेषताएं हैं जो टीसीपी की पेशकश करती हैं जो वांछनीय हैं और जिन्हें यूडीपी के शीर्ष पर लागू किया गया है। यूडीपी का उपयोग करने का एक प्रमुख बिंदु यह है कि यदि आप एक पैकेट भेजते हैं, जो समय पर t0कभी प्राप्त नहीं होता है, तो आप नई दुनिया को समय पर भेजते हैं t1, आपको तब तक इंतजार नहीं करना पड़ता जब तक कि ग्राहक वास्तव में पहला पैकेज प्राप्त न कर लें। जो पहले से ही अप्रचलित है।
विन्सेन्ट सवार्ड

@ मुझे लगता है कि यह मेरे सवाल का जवाब देता है :) धन्यवाद
फ्लोब्लेबिट

4
यह भी ध्यान रखें कि UDP IP स्पूफिंग के लिए प्रवण है जो आपके सर्वर को DDoS हमलों के लिए खुला बना सकता है यदि यह एक चिंता का विषय है। आप एक "नियंत्रण" टीसीपी कनेक्शन होने से बच सकते हैं जो क्लाइंट को आईपी पते और सर्वर को अन्य विवरण भेजता है जो फिर "प्रमाणित" पते से यूडीपी पैकेट स्वीकार करता है। इसके अलावा, आपको अपनी एन्क्रिप्शन परत को लागू करना पड़ सकता है क्योंकि UDP के लिए कोई खुले मानक नहीं हैं।
अरौ

@ blownie55 वहां अच्छे अंक
नरेश कुमार

जवाबों:


12

यदि आप पीयर-टू-पीयर, क्लाइंट / सर्वर के साथ सर्वर चलाने वाले उपयोगकर्ताओं या क्लाइंट / सर्वर के साथ डेटा सेंटर चलाने वाले सर्वर के बारे में बात कर रहे हैं, तो यह निर्भर करता है। केवल बाद वाले-सबसे मामले में इंटरनेट वास्तव में तेज और विश्वसनीय है। आपके उपयोगकर्ताओं के कंप्यूटर तेज़ होने की गारंटी नहीं है , और निश्चित रूप से विश्वसनीय नहीं होंगे।

यूडीपी आपको टीसीपी की तरह कार्यान्वयन पर अधिक नियंत्रण की अनुमति देता है। यह आपको पैकेटों को क्रम से निष्पादित करने के लिए अधिक लचीलापन देता है, ऐसे पैकेटों को त्यागें जिन्हें आप अनावश्यक मानते हैं, पैकेटों को पुनःप्राप्त करने के दौरान आप महत्वपूर्ण मानते हैं, उस तरह की चीज। लेकिन यह केवल जरूरत पड़ने पर किया जाना चाहिए और यदि आपके पास आवश्यक विशेषज्ञता है।

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


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

1
अब हालात बदल सकते हैं कि QUIC ( en.wikipedia.org/wiki/QUIC ) जो HTTP / 3 का हिस्सा होगा जो UDP का उपयोग करता है और डिफ़ॉल्ट रूप से TLS का उपयोग करके एन्क्रिप्ट किया जाता है। इसे व्यापक रूप से उपलब्ध होने में कुछ समय लगेगा और आगे देखने के लिए कुछ है। कुछ मुद्दों पर अधिक जानकारी जो कि यहाँ संभाला जाना आवश्यक है। blog.cloudflare.com/the-road-to-quic
ARau

3

यह कहना एक धारणा होगी कि "इंटरनेट अब बहुत तेज़ और विश्वसनीय है" जैसा कि @Ordous ने बताया, और एक खतरनाक भी।

डिलीवरी-क्रिटिकल पैकेट के लिए यूडीपी + कस्टम प्रोटोकॉल ज्यादातर गेमों पर जादू करता है, यही कारण है कि कई बार यह "ठीक" हो सकता है यदि आप कुछ पैकेट खो देते हैं (जैसे कि। खेल खेलने को पूरा करने के लिए माध्यमिक गैर-महत्वपूर्ण घटनाएँ) , ऐसे समय भी होते हैं, जहां इसके "बिल्कुल ठीक नहीं" जैसे कुछ डेटा को खोना है जैसे कि कर्सर आंदोलन आदि (मैं एक जीवित के लिए खेल विकास नहीं करता हूं इसलिए मेरे अस्पष्ट-ईश उदाहरणों को क्षमा करें)

UDP डिफ़ॉल्ट रूप से उन्हें बार-बार धकेलने में समय बर्बाद नहीं करता है।

और, कई खेलों में संयोग से "कभी-कभी हारने के लिए ठीक है" पैकेट से अधिक "हमेशा विफल होने के बिना वितरित करने के लिए" पैकेट की आवश्यकता होती है। इसलिए इस कार्य के लिए एक प्राकृतिक फिट बनाना।

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

अब यह तय करना कि आपका अधिकांश डेटा किस तरह का ट्रैफ़िक है, जो आपके द्वारा प्रसारित किया जा सकता है, आपको बेहतर निर्णय लेने में मदद करेगा।

टीसीपी के खिलाफ बिंदु यह होगा कि रिट्रीट पर बिताए गए समय को पैकेट भेजने पर खर्च किया जा सकता है जो अब मायने नहीं रखता।

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

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