پروتکل IP پروتکلی ”بدون اتصّال“ و ”غیر قابل اعتماد“ است!
بدون اتصّال بدین معنا که ، مسیریاب هر بسته را بدون هیچگونه هماهنگی با مقصد بسته یا مسیریاب بعدی ارسال مینماید ، بدون آنکه بتواند اطلاعی از وجود یا عدم وجود مقصد داشته باشد. در ضمن هر مسیریاب پس از ارسال یک بسته آنرا فراموش میکند
و منتظر ”پیام دریافت بسته“ از گیرندۀ آن نخواهد ماند. اگر یک بستۀ IP با خطا به مقصد برسد و یا اصلا به مقصد نرسد این پروتکل هیچ اطلاعی در مورد سرنوشت آن به فرستندۀ بسته نمیدهد.
دلایل مختلفی برای نرسیدن یک بسته به مقصد وجود دارد:
ممکن است ”زمان حیات“ بسته قبل از رسیدن به مقصد منقضی شود؛
ممکن است مسیریاب بسته را به مسیری اشتباه هدایت کند؛
ممکن است در هنگام قطعه قطعه کردن بسته و ارسال آنها ، یکی از قطعات دچار خطا شود یا به هر دلیلی به مقصد نرسد بنابراین کل دیتاگرام قابل بازسازی نخواهد بود؛ ممکن است مقصدِ بسته آمادگی دریافت بسته را نداشته باشد یا اصلاً وجود خارجی
نداشته باشد.
در هنگام بروز هرگونه خطا ، پروتکل IP فرستندۀ بسته هیچ اطلاعی در مورد سرنوشت آن نخواهد داد . عدم گزارشِ خطا به تولید کنندۀ یک بسته منجر به تکرار خطا و حمل بیهوده و زائد بسته هایی میشود که محکوم به فنا و حذف در شبکه هستند.
به عنوان مثال عدم گزارش در مورد آماده نبودن مقصد برای دریافت بسته باعث خواهد شد که فرستندۀ آن اقدام به ارسال بسته های دیگر کند در حالی که این کار بی ثمر خواهد بود و فقط بار ترافیک شبکه را افزایش میدهد و حتی میتواند منجر به بروز
”ازدحام“ شود.
پروتکل ICMP در کنار پروتکل IP برای بررسی انواع خطا و ارسال پیام برای مبدأ بسته در هنگام بروز اشکالات ناخواسته استفاده میشود. در حقیقت ICMP یک سیستم گزارش خطا است که بر روی پروتکل IP نصب میشود تا در صورت بروز هرگونه خطا به فرستندۀ
بسته پیام مناسب را بدهد تا آن خطا تکرار نشود. در واقع ICMP وظیف های در قبال وقوع خطا ندارد بلکه فقط پیامی که بیانگر بروز خطا و نوع آن است به فرستنده برمیگرداند . این پروتکل اشکالات موجود را در قالب یکسری پیام گزارش میکند که این پیام خود
در یک بسته IP قرار میگیرد که از جانب یک مسیریاب یا ماشین مقصد به آدرس فرستنده باز میگردد. در زیر چگونگی قرار گرفتن یک پیام ICMP درون یک بستۀ IP نشان داده شده است:
با توجه به آنکه پیام ICMP خود درون یک بسته IP جاسازی میشود بنابراین فیلد Protocol در سرآیند بستۀ IP باید با شمارۀ مشخصۀ پروتکل ICMP ( یعنی 1 ) تنظیم شود.
دقّت کنید که خود بسته های ICMP نیز ممکن است دچار خطا شوند که برای این گونه خطا پیامی ارسال نخواهد شد.
شکل کلّی و قالب پیام ICMP در زیر مشخص شده است:
فیلد Type :
در این فیلد عددی قرار میگیرد که بیانگر نوع پیام میباشد و ساختار فیلدهای Data و Parameters بسته به عددی که در این فیلد قرار میگیرد متفاوت خواهد بود.
فیلد Code :
گاهی خود نوع پیام به چند ”زیرنوع“ دیگر تقسیم میشود که کد ”زیرنوع“ در این فیلد قرار میگیرد.
فیلد Checksum :
محتوای این فیلد برای سنجش اعتبار و سلامت بستۀ ICMP مورد استفاده قرار میگیرد. تمام بستۀ ICMP بصورت دوبایت دوبایت جمع شده و نهایتاً از مکمل 1 حاصل جمع ،عددی 16 بیتی بدست میآید که درون این فیلد قرار میگیرد.
در ادامه نوع و ساختار پیام های ICMP را توضیح میدهیم:
پیام Destination Unreachable :
این پیام زمانی صادر میشود که زیرشبکه یا یک مسیریاب نتواند آدرس مقصد را تشخیص بدهد یا به هر دلیلی بسته توسط ماشین میزبان تحویل گرفته نشود . (مثلاً بدلیل بزرگ بودن اندازۀ بسته ها و عدم اجازه به مسیریاب برای شکستن آن )
فیلد Time Exceeded:
این پیام زمانی صادر میشود که مهلت قانونی یک بسته منقضی شده باشد و یک مسیریاب مجبور شود آنرا حذف کند؛ در چنین حالتی این پیام به آدرس فرستنده بسته IP برای آگاهی ارسال خواهد شد .
فیلد Parameter Problem :
این پیام زمانی صادر خواهد شد که مقداری نامعتبر در یکی از فیلدهای سرآیند در بسته IP قرار گرفته باشد و مسیریاب قادر به تشخیص و تفسیر سرآیند آن بسته IP نباشد. بعنوان مثال در فیلد Version از بسته IP عدد 5 قرار گرفته باشد و یا Checksum
با سرآیند تناقض داشته باشد.
فیلد Source Quench :
این بسته زمانی برای یک ماشین میزبان ارسال میشود که از آن خواسته شود حجم ارسال بسته هایش را کاهش بدهد چرا که در غیر اینصورت ازدحام پیش خواهد آمد . در مجموع هر گاه ازیک ماشین میزبان تقاضای کاهش نرخ تولید و ارسال بسته های IP
را داشته باشد این پیام را صادر مینماید. اگر ماشین میزبان پس از طی مدّت مشخصی این پیام را دریافت نکرد میتواند سرعت تولید بسته ها را به حالت اول برگرداند.
پیام Redirect :
این پیام زمانی صادر میشود که یک مسیریاب احساس کند بسته یا بسته هایی که برای او ارسال شده است در مسیر صحیح نیستند و احتمالاً اشکالی در مسیریابی وجود دارد . این پیام میتواند برای هشدار خطاهای احتمالی موثر باشد. فرض کنید به
مسیریاب R1 بستهای ارسال شده و او با بررسی جدول مسیریابی آنرا به مسیریاب R2 فرستاده تا او آنرا به مقصد X برساند . حال اگر R2 با مقایسۀ الگوی زیرشبکه به این نتیجه رسید که خود او و فرستنده آن بسته در یک شبکه واقعند با ارسال این پیام به
فرستنده اعلام میکند اگر از این به بعد بسته هایش به جای اینکه به R1 ارسال شود به R2 داده شود ، زودتر به مقصد خواهد رسید؛ ضمناً آدرس IP خودش را نیز در فیلد Gateway Internet Address قرار میدهد .
پیامهای Timestamp Request و Timestamp Reply :
این دو پیام دقیقاً شبیه دو پیام تعریف شده در قبل هستند با این تفاوت که دریافت کنندۀ آن ، زمان دریافت و زمان ارسال بسته را نیز در پاسخ به آن اضافه خواهد کرد. بنابراین ارسال کننده پیام Timestamp Request پس از دریافت پاسخ نه تنها
از قابل دسترس بودن مقصد باخبر میشود بلکه زمان رفت و برگشت یک بسته را نیز میتواند تخمین بزند و به کمک آن جداول مسیریابی و همچنین کارآئی شبکه را اندازه گیری نماید.
پیامهای Echo Request , Echo Reply :
پیام Echo Request وقتی صادر میشود که یک مسیریاب بخواهد بداند آیا یک ماشین خاصّ شبکه قابل دسترس و موجود است یا خیر. در پاسخ به دریافت Echo Request ، مقصد با ارسال پیام Echo Reply به آن پاسخ میدهد . با این پرسش و پاسخ ،
یک ماشین میتواند از قابل دسترس بودن یک مسیریاب یا ماشین میزبان در شبکه مطلع شود.
بدلیل اهمیت بسیار ویژۀ و حساس این دو پیام در تحلیل برخی از حملات ، ساختار بستۀ آنها را معرفی میکنیم:
معنای شماره های مختلف در فیلد Type در بستۀ بالا به شرح زیر است:
8 : برای مشخص کردن پیام Echo Request
0 : برای مشخص کردن پیام Echo Reply
ابتدا پیام Echo Request به سمت ماشین مقصد ارسال میشود. ماشینی که آنرا دریافت کند،به سمت ماشین مقصد ارسال میشود. ماشینی که آنرا دریافت کند،آدرس های مبدا و مقصد را عوض کرده و Type آنرا از 8 به صفر تغییر داده، پس از محاسبۀ
مجدد کد کشف خطا ، آنرا بازمیگرداند. فیلدهای Sequence Number و Identifier برای پیشگیری از اشتباه در همخوانی و تطابق پیامهای رفت و برگشت است تا مبدأ بداند یک پاسخ مربوط به کدام تقاضای اوست. به فرآیند رفت بستۀ Echo و بازگشت پاسخ ،
عمل Ping گفته میشود و کاربرد زیادی دارد.
محمد
برنامه نویس و کارشناس شبکهکارشناس شبکه و نرم افزار