مقدمة
بداية محور حديثا لن يكون عن برمجة الـ Ping بل عن كيفية عمله في الشبكة
لفهم الـ Ping بشكل أحترافي أكثر يجب أن نتعرف على ماضيه أولا الـ Ping تم كتابته لأول مرة عام 1983 من قبل Mike Muuss بهدف تحديد مواقع الغواصات عن طريق ارسال نبضات صوتية ولندخل أكثر في التفاصيل يجب علينا أن تكون عندنا خلفية بسيطة في مفهوم الطبقات وال TCP/IP
بداية محور حديثا لن يكون عن برمجة الـ Ping بل عن كيفية عمله في الشبكة
لفهم الـ Ping بشكل أحترافي أكثر يجب أن نتعرف على ماضيه أولا الـ Ping تم كتابته لأول مرة عام 1983 من قبل Mike Muuss بهدف تحديد مواقع الغواصات عن طريق ارسال نبضات صوتية ولندخل أكثر في التفاصيل يجب علينا أن تكون عندنا خلفية بسيطة في مفهوم الطبقات وال TCP/IP
كيف يعمل الـ Ping
كما
نعلم جميعا اننا عندما نريد ان نقوم بعمل Ping نبدأ اولا بكتابة كلمة Ping
وبعدها نضيف اسم الموقع أو الايبي المراد عمل التجربة عليه وتكون النتيجة
على الشكل التالي
تدلنا الصورة السابقة على نجاح العملية بينما تدلنا الصورة القادمة على فشل العملية
Ping
بشكل عام هو عبارة عن أداة تستخدم بروتوكول الـ ICMP أو Internet
Control Message Protocol وللذين يجهلون عمل هذا البروتوكول أقول لهم هو
عبارة عن بروتوكول يعمل في الطبقة الثالثة Network Layer وهو المسؤول عن
إرسال رسائل الأخطاء في الشبكة بشكل عام
ماذا يحدث عندما أقوم بأرسال Ping إلى أحد الايبيات ؟
في
الارسال يقوم الـ ICMP بارسال Echo Requests الى الهدف متبوع بي Type 8 ,
Code 0 طيب ماهي معاني هذه الاشياء ولفهمها سوف نطلع أولا على الجدول
التالي وبعدها نكمل
ICMP Message Types
|
||
Description
|
Code
|
Type
|
Echo reply (تستخدم للرد على الطلب)
|
0
|
0
|
Destination network unreachable
|
0
|
3
|
Destination host unreachable | 1 | |
Destination protocol unreachable | 2 | |
Destination port unreachable | 3 | |
Fragmentation required, and DF flag set | 4 | |
Source route failed | 5 | |
Destination network unknown | 6 | |
Source host isolated | 7 | |
موجودة لكن غير مهمة جدا | 13-8 | |
Source quench | 0 | 4 |
Redirect Datagram for the Network | 0 | 5 |
Redirect Datagram for the TOS & network | 1 | |
Redirect Datagram for the TOS & network | 2 | |
Redirect Datagram for the TOS & host | 3 | |
Alternate Host Address | 0 | 6 |
Echo request (تستخدم الطلب) | 0 | 8 |
Router Advertisement | 0 |
9
|
Router discovery/selection/solicitation | 0 | 10 |
TTL expired in transit | 0 | 11 |
Fragment reassembly time exceeded | 1 | |
Pointer indicates the error | 0 | 12 |
Fragment reassembly time exceeded | 1 | |
Bad length | 2 | |
Timestamp | 0 | 13 |
Timestamp reply | 0 | 14 |
Information Request | 0 | 15 |
Information Reply | 0 | 16 |
Address Mask Request | 0 | 17 |
Address Mask Reply | 0 | 18 |
طيب بعد أطلاعنا على هذا الجدول المعقد ماذا نستطيع ان نفهم ؟
لكي نفهم العملية بشكل صحيح يجب علينا ان نضع الـ Header امامنا ونتخيل ماهي محتوياته عند ارسال الطلب وهي بالشكل التالي سوف تكون
ICMP Echo Request
|
||
Header Checksum | Code = 0 | Type = 8 |
Sequence Number | Identifier | |
Data
|
عند
ارسالنا للطلب أو التحقق من الايبي المطلوب يقوم الـ ICMP بتحديد الـ Type
ثمانية وهي يدل على ان هذه الباكيت هي للطلب أما بالنسبة للكود فهو صفر
حسب الجدول السابق الذي يوضح وبشكل منطقي طبعا انه لايوجد خيارات عند الطلب
بعكس رقم الـ Type 3 وهو المسؤول عن عدم إكتمال الـ Ping ونجد في خانة الـ Code هناك عدة خيارات تدل على الخطأ بالضبط
ونستنتج
ان خانة الـ Type تحدد نوع الرسالة في بروتوكول ICMP بينما خانة الـ Code
تستخدم اذا كان هناك خيارات متاحة في هذا النوع من الرسائل
اما بالنسبة لباقي الخانات في الـ Header فهي تقريبا معروفة عند الجميع مثل
Header Checksum المسؤولة عن error detection
Identifier وهي في الاغلب تكون 256 وهي تحوي على process ID
Sequence Number تبدأ بصفر وتزيد مع مرات الطلب Echo
طيب السؤال الان كيف تتم عمية الرد
الجواب
ابسط بكثير بعد مافهمنا كيفية الطلب لان الموضوع ببساطة سوف يكون نفس
الشيء مع تغيير الـ Type والـ Code في حال كان هناك مشكلة في الوصول ولو
نظرنا الى هذا الـ Header
ICMP Echo Request
|
||
Header Checksum
|
Code = 0
|
Type = 0
|
Sequence Number
|
Identifier
|
|
Data
|
سوف
نلاحظ ان العملية ناجحة والطلب قد تم لاننا نرى ان الـ Type يحمل الرقم 0
وبمراجعة الجدول سوف نجد انه يدل على ان العملية تمت والهدف قام بالرد على
الطلب
لكن لو عرضت عليك هذا الجدول ماذا برئيك سوف يحدث ؟
ICMP Echo Request
|
||
Header Checksum
|
Code = 1
|
Type = 3
|
Sequence Number
|
Identifier
|
|
Data
|
الجواب طبعا سوف يكون ان عملية الطلب لم تتم والسبب عدم القدرة على الوصول للهدف (راجع الجدول)
النقطة الاخيرة وهي الـ TTL
أكثر
معضلة واجهتها في هذا الموضوع والاجابات تعددت في الانترنت وفي غوغل فمنهم
من يقول هي عدد الهوب للوصول للهدف وهناك من يقول هي الوقت الذي يستغرقه
الطلب للوصول للهدف وبعد البحث والتجربة توصلت الى انها قيمة تحدد من قبل
كل روتر أو جهاز وهي تزيد او تنقص حسب مسار الباكيت الى الهدف
وكمثال
على ذلك قم بعمل Ping 127.0.0.1 اي لووباك على الجهاز لوجدتها 128 وهذا
يعني أن قيمة الـ TTL في ويندوز تساوي 128ينما القيمة في لينوكس تساوي 64
وللتأكد من هذا الموضوع قمت بهذه التجربة الصغيرة
Ping –i 5 networkset.wordpress.com
وكما هو موضح انا قمت بتحديد ال TTL بي 5
والنتيجة كانت على الشكل التالي
لم
يستطيع الوصول للهدف لان قيمة الTTL كانت قليلة ولم يستطع الطلب الوصول
للهدف ولكي تستطيع ان تعرف مدى فهمك للموضوع حدد ماهو الـ Type و الـ Code
الذين يتطابقان مع آخر مثال ؟
تم بحمد الله ودمتم بود
مواضيع مشابهة أو ذات علاقة بالموضوع :
ليست هناك تعليقات:
إرسال تعليق
أهلا بك ،
أشكر لك إطلاعك على الموضوع و أن رغبت في التعليق ،
فأرجو أن تضع إسمك ولو حتى إسما مستعارا للرد عليه عند تعدد التعليقات
كما أرجو أن نراعي أخلاقيات المسلم;حتى لانضطر لحذف التعليق
تقبل أطيب تحية
ملاحظة: يمنع منعا باتا وضع أية : روابط - إعلانات -أرقام هواتف
وسيتم الحذف فورا ..