2012-01-24 10 views
5

यह एक पुरानी समस्या है जिसे मैंने थोड़ी देर पहले छोड़ा था क्योंकि मुझे कोई समाधान नहीं मिला और यह केवल एक सर्वर को प्रभावित कर रहा था (इसलिए मैंने अपनी सेवा कहीं और रखी है)।.NET रनटाइम में टीसीपी बफरिंग ब्रेकेज

  • सी # .net तुल्यकालिक TCP सर्वर
  • एक TcpClient वस्तु AcceptTcpClient विधि
  • एक बार वहाँ एक TcpClient वस्तु है के साथ एक TcpListener पर अवरुद्ध करके असाइन किया गया है: उपयोगकर्ता This मेरा के समान लक्षणों के साथ एक समस्या है , मैं इसे एक थ्रेड पर पास करता हूं जो नेटवर्कस्ट्रीम
  • बनाने के लिए क्लाइंट की गेटस्ट्रीम विधि को आमंत्रित करता है, यह नेटवर्कस्ट्रीम एक नेटवर्क स्ट्रीम करने वाले प्रत्येक पुनरावृत्ति में लूप हो गया है। रीड (कुछ बफर, 0, 4096)
  • अभी क्लाइंट और सर्वर एक ही नेटवर्क पर, कोई भीड़ के साथ
  • की बात करने के लिए अपने सर्वर
  • अतिरिक्त स्मृति के बहुत सारे है कि अगर मैं एक और मशीन पर अपने सर्वर सॉफ्टवेयर लोड स्थित हैं, समस्या दूर हो जाने
  • किकर: एक नेटवर्क लिनक्स बॉक्स के यातायात ठीक से और समय पर हो जाता है

एक समय में एक मिनट के आसपास के लिए tcpClient.AcceptTcpClient() विधि ब्लॉक, सर्वर में जिसके परिणामस्वरूप को पढ़ने के लिए होने थोड़ी देर बाद बाइट्स का एक बड़ा ब्लॉक, इसके बजाय इसे क्या करना चाहिए। इसे नेटवर्कस्ट्रीम करना चाहिए। बाइट्स के छोटे ब्लॉक जितनी बार भेजे जाते हैं (और क्लाइंट उन्हें हर 5s भेजता है, एक मिनट में नहीं)।

अन्य उपयोगकर्ता को पिछली टिप्पणियों का सुझाव है कि उपपर नेटवर्किंग या कनेक्टिविटी के मुद्दों को दोषी ठहराया जा सकता है, जो पहले उचित लगता है। लेकिन यह वास्तव में मामला नहीं है।

मैं एक कदम आगे गया और क्लाइंट और सर्वर दोनों में पैकेट विश्लेषक स्थापित किया। परिणाम:

  • तत्काल ग्राहक एक भेजता है यह सर्वर के विश्लेषक पर दिखाई देता है
  • नेटवर्क विलंबता या कनेक्टिविटी समस्या
  • पैकेट/फ्रेम सही समय
  • पर सर्वर में आ रहे हैं नहीं कर रहे हैं
  • मेरे इंटरफ़ेस की निगरानी करने वाले नेटवर्क इंटरफ़ेस कार्ड के बीच कहीं और मेरा एप्लिकेशन कुछ इस देरी का कारण बन रहा है
  • .NET रनटाइम मेरे एप्लिकेशन और नेटवो के बीच एकमात्र चीज है rk इंटरफ़ेस
  • .NET में सॉकेट त्रुटि किसी तरह इस विशाल विलंबता का कारण है

पर्यावरण:

    मेरी विशिष्ट मामले में
  • मैं एक इंटेल प्रो/1000 उपयोग कर रहा हूँ एमटी नेटवर्क कार्ड, और .NET
  • मानक संस्करण सर्वर 2003 R2, SP2
  • .NET Frameworks स्थापित: 2.0 SP2, 3.0 SP2, 3।5 एसपी 1, 4 क्लाइंट प्रोफाइल, 4 विस्तारित

यदि किसी के पास कोई सलाह है तो मुझे यह जानना बहुत पसंद होगा कि यह क्या है।

+1

आप समवर्ती अनुरोधों से कैसे निपट रहे हैं? यानी क्या आप प्रति क्लाइंट, या कुछ और थ्रेड फेंकते हैं? , और जब ऐसा होता है, तो यह डिबग करने में सहायक हो सकता है कि उस समय कितने समवर्ती ग्राहक जुड़े हुए हैं (यह सुनिश्चित करने के लिए कि आप उस सीमा को मार नहीं रहे हैं जहां कई मृत/टूटे हुए क्लाइंट घूमते हैं, यह केवल किसी को पोर्ट कर सकता है अपने ऐप में धागे के टन की आग लगाने के लिए स्कैनिंग) – nos

+0

@nos एक एकल प्रविष्टि बिंदु है और अद्वितीय क्लाइंट को अपनी अनूठी टीसीपी क्लाइंट ऑब्जेक्ट असाइन की जाती है, जो नेटवर्कस्ट्रीम की आने वाली सामग्री को संसाधित करने के लिए अपना स्वयं का धागा मिलता है। पढ़ें()। तो हाँ, प्रति ग्राहक 1 थ्रेड, कुछ ग्राहकों के साथ अचूक भविष्य के लिए सेवा का उपयोग कर। और परीक्षण में केवल 1 ग्राहक जुड़ा हुआ है। –

+2

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

उत्तर

1

यह निम्न में से किसी एक के कारण हो सकता है।

  • सबसे अधिक संभावना: हार्डवेयर टीसीपी ऑफलोड।

अन्य स्थितियों में टीसीपी ऑफ़लोड के साथ परेशानी के लिए नेटवर्क कार्ड का मॉडल देखा गया है। आप डिवाइस ड्राइवर कॉन्फ़िगरेशन पर इसे अक्षम कर सकते हैं।

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

उदाहरण: http://forums.novell.com/novell-product-support-forums/netware/nw-other/communications/187741-offload-tcp-segmentation-intel-pro-1000-mt.html

  • कम संभावना: पथ MTU समस्याओं।

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

  • कम संभावना: प्रयास IPSec कनेक्शन विफलता सेट अप करने के लिए।

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

+0

हल, अपवित्र। यही समस्या है। धन्यवाद दस लाख, मैं अपने आप पर इस निष्कर्ष पर कभी नहीं पहुंचा होता। –

+0

वास्तव में, एक और त्वरित सवाल। क्या हार्डवेयर टीसीपी कुछ ऐसा हो सकता है जो हो सकता है और फिर जितनी जल्दी दिखाई देता है उतनी जल्दी चले जाते हैं? मुझे यह समस्या 3 दिनों के लिए थी, और तीसरे दिन सब कुछ सामान्य हो गया। कोई अपडेट नहीं, एक ही सॉफ्टवेयर। क्या हार्डवेयर टीसीपी ऑफ़लोड समस्या हमेशा के लिए जारी रहती है या संभवतः चुपचाप अपमानजनक होती है? –

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