سؤال

ومتى يمكن أن أتوقع اتصال TCP العميل / الخادم إلى آخر في البرية؟

وأريد أن البقاء على اتصال دائم، ولكن الأمور تحدث، وبالتالي فإن العميل لديك لإعادة الاتصال. ما هي النقطة أقول أن هناك مشكلة في رمز بدلا من هناك مشكلة مع بعض المعدات الخارجية؟

هل كانت مفيدة؟

المحلول

وأنا أتفق مع زان لينكس. ليس هناك ضمان، ولكن يمكنك الحفاظ على اتصال على قيد الحياة إلى أجل غير مسمى تقريبا عن طريق إرسال بيانات أكثر من ذلك، على افتراض عدم وجود مشكلات في الاتصال أو عرض النطاق الترددي.

وعموما لقد ذهبت لنهج المحافظة على الحياة على مستوى التطبيق، على الرغم من أن هذا عادة ما يكون بسبب انها كانت في المواصفات العميل حتى لقد كان للقيام بذلك. ولكن مجرد ارسال بعض قطعة قصيرة من كل البيانات دقيقة أو اثنتين، والتي تتوقع نوعا من الإقرار.

وإذا كنت تعول فشل واحد للاعتراف كاتصال بعد أن فشلت متروك لكم. عموما هذا هو ما فعلته في الماضي، على الرغم من أن هناك حالة كان لي الانتظار لمدة ثلاثة فشلت الردود في صف واحد لإسقاط الاتصال لأن التطبيق في الطرف الآخر من الاتصال ومقشر للغاية حول الرد على "هل أنت هناك ؟ " الطلبات.

إذا فشل الاتصال، التي في مرحلة ما فإنه على الأرجح سوف، حتى مع الأجهزة على نفس الشبكة، ثم مجرد محاولة لإعادة عليه. اذا فشل ذلك عدد محدد من المرات ثم لديك مشكلة. إذا فشل الاتصال الخاصة بك باستمرار بعد تم توصيله لبعض الوقت ثم مرة أخرى، لديك مشكلة. على الأرجح في كلتا الحالتين هو على الأرجح بعض مشكلة في شبكة، بدلا من التعليمات البرمجية الخاصة بك، أو ربما كان معروفا مشكلة مع مكدس TCP / IP على جهازك (: واجهت مشاكل مع هذا على نسخة قديمة من QNX - it'd تقع فقط عشوائيا فوق). أما وقد قلت ذلك قد يكون لديك مشكلة في البرنامج، والسبيل الوحيد لنعرف على وجه اليقين هو في كثير من الأحيان إلى إرفاق المصحح، أو للحصول على بعض قطع الأشجار في هناك. مثلا إذا كان يمكنك الاتصال دائما بنجاح، ولكن بعد فترة التوقف عن الحصول على رسائل تأكيد الوصول، حتى بعد إعادة الاتصال، ثم ربما الخادم الخاص بك وأصاب بالجمود، أو أن يعلقوا في حلقة أو شيء من هذا.

ما هو مفيد حقا لاقامة سلسلة من الاختبارات التي طال أمدها في ظل مجموعة متنوعة من ظروف الحمل، من مجرد إرسال الحفاظ على قيد الحياة أنت هناك طلبات؟ / ACK والردود، إلى الضرب على الاطلاق الخادم. وهذا يعطي عادة لك المزيد من الثقة حول مكونات البرنامج، ويمكن أن تكون مفيدة حقا في الرج بعض المشاكل غريبة حقا الذي لن بالضرورة يسبب مشكلة مع الاتصال، على الرغم من أنها قد تؤدي إلى مشاكل مع المعاملات الجارية. على سبيل المثال، كنت أكتب مرة واحدة في تطبيق الخادم الاتصالات التي تقدم خدمات مثل الترجمة العدد، وكنا مجرد ترك الأمر تشغيل لعدة أيام في المرة الواحدة. كان الشيء الذي عندما جاء السبت جولة، ليوم كامل، انها سترفض كل طلب الدعوة التي جاءت في والتي بلغت الملايين من المكالمات، وكان لدينا أي فكرة عن السبب. اتضح أن يكون ذلك بسبب وجود خطأ إملائي واحد في بعض تاريخ شفرة التحويل التي تسببت فقط مشكلة في أيام السبت.

وعلى أمل أن يساعد.

نصائح أخرى

وأعتقد أن الفكرة الأكثر أهمية هنا هي نظرية مقابل الممارسة.

وكانت النظرية الأصلية التي الاتصالات ليس لها عمر. إذا كان لديك اتصال، فإنه بقي مفتوحا إلى الأبد، حتى لو كان هناك أي حركة المرور، حتى حدث تسبب ذلك إغلاقه.

والنظرية الجديدة هي أن معظم النشرات OS تحولت على توقيت المحافظة على الحياة. وهذا يعني أن الاتصالات سوف تستمر إلى الأبد، ما دام النظام على الطرف الآخر يستجيب لتبادل على مستوى TCP في بعض الأحيان.

في الواقع، سيتم إنهاء العديد من الاتصالات بعد مرة، مع مجموعة متنوعة من المعايير والمواقف.

واثنين من الأمثلة الجيدة حقا هي: العميل عن بعد يستخدم DHCP، انتهاء عقد الإيجار، وتغيير عنوان IP

وثمة مثال آخر هو الجدران النارية، والتي يبدو أن يكون ذكيا على نحو متزايد، ويمكن التعرف على حركة المحافظة على الحياة مقابل بيانات حقيقية، وصلات وثيقة تستند إلى أي معايير عالية المستوى، والوقت لا سيما الخمول.

وكيف تريد تطبيق منطق إعادة الاتصال يعتمد كثيرا على الهندسة المعمارية الخاص بك، وبيئة العمل، وأهداف الأداء.

وينبغي أن لا يهم حقا، يجب تصميم التعليمات البرمجية لإعادة الاتصال تلقائيا إذا كان هذا هو السلوك المطلوب.

وهناك حقا أي وسيلة لمعرفة ذلك. لا يوجد شيء أصيل في TCP التي من شأنها أن تتسبب في اتصال لإسقاط فقط بعد فترة معينة من الزمن. شخص ما على اتصال موثوقة يمكن أن يكون عاما من الجهوزية، بينما شخص على اتصال مختلفة يمكن أن يكون لإعادة كل 5 دقائق. ليس هناك طريقة لمعرفة أو حتى تخمين.

وسوف تحتاج بعض البيانات الذهاب عبر اتصال دوريا لإبقائه على قيد الحياة - والعديد من نظام التشغيل أو جدران الحماية إسقاط اتصال نشط

واختيار القيمة. قطرة واحدة كل ساعة وربما غرامة. قطرات عشرة اتصال غير متوقع في 5 دقائق ربما يشير إلى وجود مشكلة.

واتصالات TCP تستمر عادة حوالي ساعتين من دون أي حركة المرور. إما نهاية يمكن أن ترسل المحافظة على الحياة الحزم، والتي هي، كما أعتقد، مجرد ACK على الحزمة تلقى الماضية. يمكن عادة أن يتم تعيين هذا في المقبس أو بشكل افتراضي على كل اتصال TCP.

وهناك مستوى التطبيق المحافظة على قيد الحياة هو ممكن أيضا. لبروتوكول أسلوب تلنت مثل FTP، SMTP، POP أو IMAP شيء من هذا القبيل إرسال المقابل، سطر جديد والعودة موجه الأوامر.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top