سؤال هل Ping طريقة موثوقة للتحقق مما إذا كان الخادم متاحًا؟


في تطبيقي ، أقوم بإجراء اختبار ping لخادم وانتظر الرد. أستخدم هذا لتحديد ما إذا كان الخادم متوفرًا أم لا.

هل هذه طريقة موثوقة لتحديد التوافر؟ أفترض جدار حماية يمكن تصفية حركة icmp ... هل هناك أي عيوب أخرى؟ هل هناك طريقة أكثر موثوقية؟


89
2017-09-19 10:00


الأصل




الأجوبة:


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

على سبيل المثال ، أحصل دائمًا على موازنات الحمل للحصول على استجابة فعلية "رأسية" من خوادم الويب الخاصة بنا ، ويمكنك القيام بنفس الشيء عند تحديد صغير على صندوق DB إذا أردت ، أو أيًا كان خادمك الفعلي. وبصفتك نصيحة ، يمكنك إنشاء "online.txt" (أو أي اسم تريد إعطاؤه) على خوادم الويب لديك ، فحاول LBs الحصول على هذا الملف وإذا فشلت ، فإنه يزيل الخادم من VIP. طريقة لطيفة لإخراج الملقمات الفردية من الشخصيات المهمة الخاصة بك ببساطة عن طريق إعادة تسمية ملف واحد.

لا يختبر Ping سوى القدرة على الاستجابة للأوامر ، وهذا هو نظام التشغيل الأساسي ، وأجزاء من مكدس IP والروابط الفعلية - ولكن هذا كل شيء ، كل شيء آخر قد يكون منخفضًا ولا تعرفه.

أعلم أن هذا مذكور أدناه ، لكنه يحمل التكرار مرارًا وتكرارًا.

يتم إنشاء ICMP Echo Requests (ويعرف أيضاً بـ "Pings") (ويعرف أيضاً بـ ICMP Type 8) على مواصفات مكدس IP ، نعم ، ولكن لا يلزم تنفيذها أو استخدامها. في واقع الأمر ، هناك عدد كبير من مزودي خدمات الإنترنت الذين يرفضون إرسال تلك الطلبات وإسقاط تلك الطلبات في صمت ، لأنها تشكل شكلاً من أشكال الهجوم على الشبكة (يطلق عليه اسم pingflood).

كما ذكر أعلاه ، يتم التعامل مع هذا بواسطة نظام التشغيل (وتحديدًا على مستوى كدسة الشبكة) ومن ثم فإن الأمر متروك لتهيئة نظام التشغيل للاستجابة لتلك أو لا. إذا تم إيقاف تشغيل هذا (احتياط أمان؟) ، فلا يمكنك فعل أي شيء بخصوص تلقي ردود ping من الطرف الآخر. هذا هو السبب في أنه غير موثوق.


137
2017-09-19 10:10



ماذا قال الرجل! أنا دائما تقديم المشورة للعملاء أن أفضل طريقة لمعرفة ما إذا كان الخادم يقدم حاليا خدمة X هو طلب الخدمة X. - MadHatter
نحن نبني بالفعل واجهة برمجة تطبيقات RESTful "اختبار" في تطبيقاتنا مجرد لهذا. لذلك نحن نعلم أنه إذا كان أحد التطبيقات يستجيب إلى blah / whatever_app / pulse ، فإنه يتم تقديم طلبات الخدمة ، ويحتوي على جميع الأدوات التي يحتاجها (DB ، والاعتمادات الخ) - tsykoduk
للإضافة إلى MadHatter ، غالبًا ما يكون إجراء اختبار ping وطلبًا أمرًا جيدًا. وبهذه الطريقة يمكنك أن تعرف على الفور ما إذا كنت تتعامل مع اتصال الشبكة أو انقطاع الخدمة ... فإما أن تميل إلى خلق أشياء مختلفة تمامًا عن الأخرى. - user606723
لا يعتبر Ping اختبارًا موثوقًا يمكن للخادم نفسه من الاستجابة لـ ping - إذا لم يكن كل ما تعرفه هو أن شيئًا بينك وبينه يقوم بتصفية حركة مرور ICMP - Rob Moir
بافتراض أن الماكينة تستجيب لأداء ping في الظروف العادية ، يمكنك استخدام ping على شكل نوع ما من عوامل التصفية المزهرة: إذا فشل اختبار ping ، فستتوقف الخدمة بالتأكيد (لديك مشكلة في الشبكة ، لأننا قمنا بتأسيس أعمال ping عادةً). ومع ذلك ، إذا كان ping قد نجح في الخدمة يمكن أن يكون أسفل كما هو موضح في هذا الجواب - 3Doubloons


معظم الوقت ، نعم ، ومع ذلك:

  • بعض خوادم حظر طلبات ping

  • فقط لأن الخادم يستجيب لا يعني تلقائيا الموقع (أو أي خدمة تتوقع استخدامها) يعمل، يجب عليك أيضًا التحقق مما إذا كانت الاستجابة تتطابق مع المحتويات المتوقعة.


10
2017-09-19 10:08





صحيح أنه في العديد من المناسبات يتم تصفية حركة ICMP بحيث لا يمكن الاعتماد عليها ...

قد يكون أفضل طريقة لتلنت الخادم في منفذ الخدمة الذي تهتم به.

على سبيل المثال telnet 127.0.0.1 8080


5
2017-09-19 10:07





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


5
2017-09-19 10:10





بينغ له 2 عيوب:

  • بينغ يرسل ICMP ، التي يمكن تصفيتها بواسطة جدار الحماية
  • منفذ tcp أو udp يستخدم التطبيق الخاص بك قد يكون مشغولاً أو غير مفتوح - لا يتحقق ping ذلك

أفضل حل هو التحقق من منفذ udp / tcp مباشرة ، لمعرفة ما إذا كانت الخدمة لا تزال متاحة ... :-)


3
2017-09-19 19:20





هناك أدوات خاصة للاختبار والمراقبة مثل Nagios / Icinga.
باستخدام هذه الأدوات ، يمكنك (بالطبع) إجراء فحوصات باستخدام اختبار ping مختلفًا ، وكذلك إجراء فحوصات على خدماتك.

يمكن لجميع الشيكات استخدام القيمة التي تم إرجاعها لتصنيف النتيجة على أنها "جيدة" و "تحذير" و "حرج" ويمكن كتابتها في كل لغة برمجة تقريبًا.

بالطبع ليس من السهل الإعداد (مثل نقطة وانقر) ، ولكن للتخصيص وموثوقة وقابلة للتوسعة. يعمل بشكل جيد على توزيعات Linux و Unix المختلفة.


3
2017-09-19 18:24





اختبر الخدمات التي تبحث عنها ، لا يعني استخدام الخادم ping أن الخدمة تعمل.

فمثلا:

تخيل خادم الويب مع عشرات المواقع ، ثم أحتاج إلى معرفة ما إذا كانت المواقع هي UP ، فعلت نفسي نصي صغير في PHP وتشغيله كل 10 دقائق.

البرنامج النصي يفعل المتابعة ->

<?php
    $website1 = "http://www.mywebsite.com/";
    $myWebsite = file_get_contents($website1);
    $message = 'My website' . $website1 . ' is DOWN at the moment.';
    if (empty($myWebsite)) mail('mail@server.com', 'Website is DOWN', $message);
?>

2
2017-11-28 15:42





يعد استخدام ping لتحديد ما إذا كان الخادم متاحًا كطبيب ER للتحقق مما إذا كان المريض يتنفس. نعم ، إنه مكان جيد للبدء ، ولكن قد تكون هناك مشكلات أخرى.


2
2017-09-19 18:39