2009-10-03 11 views
8

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

+1

क्या आप वाकई इसके लायक हैं? बस एक सिद्ध तकनीक बनाम एक होमब्रू प्रणाली का उपयोग कर। क्या प्रदर्शन लाभ स्पष्ट है या आप अभी समय से अनुकूलन कर रहे हैं? –

+0

सिस्टम वास्तविक समय है और पहले से ही उस नमूने के अनुरूप है जो यूडीपी के लिए कहता है। एक महान संदर्भ के लिए –

उत्तर

0

कठिन समस्या। मैं कहूंगा, आप टीसीपी की विश्वसनीयता को प्राप्त करने में सक्षम नहीं होंगे। हालांकि, मैं समझता हूं कि कभी-कभी, आपको विश्वसनीय यूडीपी होना चाहिए।

Gamedev forum

RUDP (थोड़ा अधिक कट्टर)

Old Thread about reliable UDP

5

अध्याय 8 और स्टीवन के UNIX Network Programming, volume 1 के अध्याय 20 पर एक नजर डालें। वह कई अलग-अलग दृष्टिकोणों को शामिल करता है। धारा 20.5 "यूडीपी आवेदन में विश्वसनीयता जोड़ना" शायद आपके लिए सबसे दिलचस्प है।

+0

+1। जब पहले प्रोग्रामिंग असाइनमेंट के लिए कुछ ऐसा ही किया जाता था, तो वह अनुभाग बहुत अच्छा था। – mrduclaw

4

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

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

8

टीसीपी इंटरविवाइन 3 सेवाएं जो प्रासंगिक हो सकती हैं (ठीक है टीसीपी करता है बहुत कुछ, लेकिन मैं केवल 3 के बारे में बात करने जा रहा हूं।)

  1. में वितरण व्यवस्था
  2. विश्वसनीय वितरण
  3. प्रवाह नियंत्रण

आपने अभी कहा कि आप प्रवाह नियंत्रण की जरूरत नहीं है, तो मैं भी समाधान नहीं होगा कि (आप कैसे विज्ञापन हैं एक खिड़की का आकार, इत्यादि, सिवाय इसके कि आपको शायद एक खिड़की की आवश्यकता होगी। मैं इसे प्राप्त करूंगा।)

आपने कहा था कि आपको विश्वसनीय वितरण की आवश्यकता है। यह बहुत कठिन नहीं है - आप यह दिखाने के लिए एसीके का उपयोग करते हैं कि प्रेषक को एक पैकेट प्राप्त हुआ है।

  1. भेजने वाले पैकेट
  2. रिसीवर पैकेट प्राप्त करता है भेजता है और फिर इस (एक टाइमर के रूप में) एक पावती प्राप्त नहीं है, वह resends तो एक पावती
  3. भेजता है: बेसिक विश्वसनीय वितरण की तरह दिखता है पैकेट।

    1. क्या होगा अगर एसीके खो जाए:

    उन तीन चरणों इन मुद्दों से निपटने नहीं है?

  4. क्या होगा यदि पैकेट आदेश से बाहर आ जाए?

तो आपके आवेदन के लिए, आपने कहा कि आपको केवल विश्वसनीय वितरण की आवश्यकता है - लेकिन क्रमशः उन्हें आवश्यकतानुसार कुछ भी नहीं कहा। यह आपके प्रोटोकॉल को लागू करने के तरीके को प्रभावित करेगा।

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

तो इस धारणा पर जा रहा है कि आपको केवल विश्वसनीय की आवश्यकता है (क्योंकि आपने अपनी पोस्ट में यही कहा है), आप इसे कई तरीकों से प्राप्त कर सकते हैं।

आपका प्रेषक अनजान पैकेट का ट्रैक रख सकता है। तो अगर यह # 3, 4, 5, और 6 भेजता है, और उसे 3 और 4 के लिए एसीके नहीं मिलता है, तो प्रेषक जानता है कि उसे पुनः प्रेषण करने की आवश्यकता है। (हालांकि प्रेषक को पता नहीं है कि पैकेट 3 और 4 बहुत सारे थे, या यदि उनके एसीके खो गए थे। किसी भी तरह से, हमें पुनः प्रेषण करना होगा।)

लेकिन फिर आपका प्रेषक संचयी एसीके कर सकता है - इसलिए उपर्युक्त उदाहरण में , अगर यह 3, 4, और 5 प्राप्त हुआ तो यह केवल # 6 होगा। इसका मतलब है कि रिसीवर पैकेट 6 ड्रॉप करेगा यदि उसे पहले प्राप्त नहीं हुआ था। यदि आपका नेटवर्क बहुत विश्वसनीय है, तो यह एक बुरा विकल्प नहीं हो सकता है।

ऊपर वर्णित प्रोटोकॉल, हालांकि, एक खिड़की है - यानी, प्रेषक एक बार में कितने पैकेट भेजता है? जिसका अर्थ है कि आपको किसी प्रकार की खिड़की की आवश्यकता है, लेकिन प्रवाह नियंत्रण के उद्देश्य के लिए नहीं। आप विंडो आकार कैसे प्रसारित करेंगे?

आप खिड़की के आकार को स्थिर रखते हुए, या स्टॉप-एंड-वेट जैसे कुछ करके खिड़की के बिना ऐसा कर सकते हैं। पूर्व एक बेहतर विकल्प हो सकता है।

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

शुभकामनाएं!

0

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

संबंधित मुद्दे