Ping و Tracert ، دو برنامه مفيد به منظور تست وضعيت ارتباطی گره های موجود در يک شبکه مبتنی بر TCP/IP می باشند . در اين بخش با برنامه بسيار سودمند ping آشنا خواهيم شد و در بخش های بعدی به بررسی دستور tracert خواهيم پرداخت .
دستور Ping
دستور Ping می تواند نقطه شروع مناسبی برای اشکال زدائی يک شبکه مبتنی بر TCP/IP باشد . از برنامه فوق برای تست وضعيت ارتباط بين دو سيستم موجود در شبکه استفاده می شود . اين برنامه از پروتکل ICMP ( اقتباس شده از Internet Control Message Protocol ) به منظور مبادله بسته های اطلاعاتی با سيستم راه دور استفاده می کند (ICMP از پروتکل UDP برای حمل داده استفاده می نمايد ) .
برنامه Ping در ابتدا توسط Mike Muuss و با عملکردی ساده ، پياده سازی گرديد. اين برنامه از پروتکل ICMP به منظور ارسال پيام های UDP به يک آدرس ( ECHO REQUEST ) استفاده می نمايد و پس از ارسال پيام ، در انتظار دريافت پاسخ ( ECHO REPLY ) می ماند . سيستم راه دور، يک بسته اطلاعاتی از نوع پاسخ ( REPLY ) را برای فرستنده پيام ارسال می نمايد و بر اساس آن Round-trip ( ارسال يک درخواست و دريافت پاسخ ) محاسبه می گردد .
ساختار بسته های اطلاعاتی ECHO REQUEST و ECHO REPLY در جدول زير نشان داده شده است . از فيلد اطلاعاتی "نوع پيام " به منظور مشخص نمودن نوع پيام ، استفاده می شود . در صورتی که مقدار اين فيلد هشت باشد ، بسته اطلاعاتی از نوع ECHO REQUEST و در صورتی که مقدار اين فيلد صفر باشد ، بسته اطلاعاتی از نوع ECHO REPLY خواهد بود .


ساختار بسته های اطلاعاتی ECHO REQUEST و ECHO REPLY
نوع پيام ICMP
( صفر و يا هشت )

کد صفر
CheckSum
Identifier
Sequence number
Optional data
استفاده از Ping
Ping دارای عملکردی بسيار ساده است . در ابتدا فيلد Sequence number مقدار صفر را خواهد گرفت و به ازای ارسال هر بسته اطلاعاتی، يک واحد به آن اضافه می شود . مقدار فيلد Identifier ، منحصر بفرد بوده تا امکان تشخيص بسته های اطلاعاتی برگردانده شده وجود داشته باشد ( در مواردی که بيش از يک کاربر بطور همزمان از دستور Ping بر روی يک ماشين استفاده می نمايند) . در اکثر نسخه های يونيکس و لينوکس ، مقدار فيلد Identifier معادل Process ID پردازه ای در نظر گرفته می شود که پيام ECHO REQUEST را ارسال نموده است .
پس از دريافت پيام ECHO REQUEST توسط کامپيوتر دريافت کننده ، وی يک پاسخ ( REPLY ) را برای فرستنده ارسال می نمايد که شامل Identifier و Sequence number مشابه بسته اطلاعاتی ارسالی است .
با توجه به پاسخ ارائه شده توسط دريافت کننده بسته های اطلاعاتی می توان به نتايج متفاوتی دست يافت :

  • تمامی بسته های اطلاعاتی ارسالی ، مجددا" برگردانده می شوند . ( بين سيستم ارسال کننده و دريافت کننده مشکل ارتباطی وجود ندارد ) .
  • برخی از بسته های اطلاعاتی ارسالی، توسط دريافت کننده برگردانده نمی شوند ( کاهش بسته های اطلاعاتی ارسالی ) و يا با اولويتی که ارسال می گردند با همان اولويت دريافت نمی شوند . اين مسئله می تواند نشاندهنده وجود اشکال در يک شبکه باشد . در اين رابطه احتمال ديگری نيز وجود دارد : سيستم از راه دور ( سيستمی که می بايست به پيام های ارسالی پاسخ دهد ) درگير پردازش های متعددی است و قادر به پاسخگوئی پيام های ECHO REQUEST در مدت زمان مشخص شده نمی باشد .
دستور Ping ، مدت زمان Round-trip بر حسب ميلی ثانيه را محاسبه و نمايش می دهد . برای محاسبه مدت زمان Round-trip ، برنامه ping زمان ارسال بسته اطلاعاتی را در فيلد Optional data قرار داده و پس از برگشت بسته اطلاعاتی، زمان ذخيره شده را با زمان جاری سيستم مقايسه نموده تا در نهايت مدت زمان رفت و برگشت يک بسته اطلاعاتی مشخص گردد . دستور Ping همچنين مقدار TTL ( اقتباس شده از Time To Live ) را در خروجی نمايش خواهد داد .TTL مدت زمان اعتبار يک بسته اطلاعاتی را مشخص نموده و هر host و يا روتر موجود در مسير بسته اطلاعاتی معمولا" به ميزان يک ثانيه آن را کاهش می دهد .
در برخی موارد ممکن است در زمان ارسال درخواست های متوالی ping ، مدت زمان Round-trip کاهش پيدا نمايد . اين موضوع می تواند دلايل متعددی داشته باشد :

  • ماشين مقصد ( و يا روتر gateway ) در آن مقطع زمانی در جدول محلی ARP نمی باشد و مدت زمانی طول خواهد کشيد ( ميلی ثاينه ) تا arp آدرس سخت افزاری اولين بسته اطللاعاتی را بدست آورد .
  • در صورتی که به همراه دستور ping در مقابل استفاده از آدرس IP از نام host استفاده شود ، ممکن است يافتن سرويس دهنده DNS که برنامه ping می بايست با آن ارتباط برقرار نمايد( ترجمه نام host به آدرس IP ) ، زمان خاص خود را داشته باشد .
در زمان استفاده از دستور Ping بهتر است که در ابتدا عمليات ping را در ارتباط با اينترفيس محلی و يا آدرس ( Loopback ( IP: 127.0.0.1 شروع نمود . آدرس loopback در پشته TCP/IP استفاده شده و می توان از آن به منظور حصول اطمينان از صحت کارکرد پشته محلی ، استفاده نمود . آدرس فوق ، يک آدرس IP رزو شده است که امکان استفاده از آن در اينترنت وجود ندارد . در صورتی که نمی توان آدرس IP سستم محلی را ping نمود ، ممکن است پيکربندی سيستم دارای مشکل باشد . در صورتی که نمی توان آدرس Loopback را ping نمود ، ممکن است پشته TCP/IP و يا آداپتور شبکه مشکل داشته باشند .
استفاده از Ping در ويندوز
جدول زير گرامر دستور Ping به همراه عملکرد برخی از سوئيچ های متداول آن را نشان می دهد :


گرامر دستور Ping در ويندوز
ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS]
[-r count] [-s count] [[-j host-list] | [-k host-list]]
[-w timeout] destination-list
عملکرد
سوئيچ
به صورت پيوسته عمليات Ping را انجام می دهد. برای توقف برنامه ping می توان از کليدهای CTRL+C استفاده نمود .
-t
ترجمه آدرس به نام را انجام می دهد
-aتعداد بسته های اطلاعاتی ICMP ECHO REQUEST ارسالی را مشخص می نمايد . -n countاندازه بافر را ارسال می نمايد.-1 size مقدار TTL را مشخص می نمايد .-i TTLمدت زمان انتظار پاسخ برحسب ميلی ثانيه -w timeout
نحوه استفاده از دستور Ping :

تايپ دستور
خروجی
C:\>ping www.google.com
Pinging www.google.akadns.net [64.233.187.99] with 32 bytes of data:

Reply from 64.233.187.99: bytes=32 time=421ms TTL=238
Reply from 64.233.187.99: bytes=32 time=430ms TTL=238
Reply from 64.233.187.99: bytes=32 time=431ms TTL=238
Reply from 64.233.187.99: bytes=32 time=430ms TTL=238

Ping statistics for 64.233.187.99:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 421ms, Maximum = 431ms, Average = 428ms
توضيحات :
  • چهار بسته اطلاعاتی ارسال شده است که همان چهار بسته نيز دريافت شده اند ( در زمان انتقال، هيچيک از بسته های اطلاعاتی گم نشده اند )
  • زمان پاسخ حدودا" 430 ميلی ثانيه بوده است
  • اندازه بسته های اطلاعاتی ارسالی ، سی و دو بايت است .
اشکال زدائی ارتباط بين گره های يک شبکه با استفاده از دستور Ping
برای اشکال زدائی ارتباط بين گره های يک شبکه ، می توان مراحل زير را دنبال نمود :

  • آيا پيکربندی TCP/IP بر روی سيسم محلی ( ارسال کننده ) درست است ؟ برای پاسخ به سوال فوق می توان آدرس IP سيستم محلی را Ping و نتايج را مشاهده نمود . در صورت عدم ارائه پاسخ مناسب ،می تواند مشکل مربوط به پيکربندی تنظيمات TCP/IP بر روی سيستم محلی باشد .
  • آيا امکان ping نمودن نام host وجود دارد ؟ برای پاسخ به سوال فوق به همراه دستور ping از نام host استفاده نمائيد . ping ، قبل از ارسال بسته اطلاعاتی برای host مورد نظر ، نام آن را به يک آدرس IP ترجمه می نمايد . اگر آدرسی که Ping ترجمه می نمايد ، آدرسی نيست که تصور آن را داريد ، می بايست پيکربندی سيستم خود را بررسی نمائيد . در چنين مواردی ممکن است شما کامپيوتر خود را بگونه ای پيکربندی نموده ايد که از يک آدرس IP خاص استفاده نمايد ولی در سرويس دهنده DNS ، به کامپيوتر شما يک آدرس IP ديگر مرتبط شده است . در اين رابطه می توان از دستور nslookup به منظور اشکال زدائی ترجمه استفاده نمود .
  • آيا امکان ارتباط با سيستمی ديگر در شبکه وجود دارد ؟ برای پاسخگوئی به سوال فوق می بايست يک سيستم ديگر را که مطمئن هستيد در Subnet شما وجود دارد ، ping نمائيد . در صورتی که نتايج موفقيت آميز باشد ، شما می توانيد با اعضاء broadcast Domain ارتباط برقرار نمائيد .
  • آيا امکان ارتباط با Default Gateway وجود دارد ؟ Default Gateway ، روتر و يا دستگاهی ديگر است که Subnet شما را به ساير شبکه ها متصل می نمايد. در صورت عدم امکان ping نمودن Default Gateway ، دو احتمال می تواند وجود داشته باشد : احتمال اول : ممکن است آدرس Subnet شما اشتباه باشد . در چنين مواردی می بايست پيکربندی سيستم بررسی گردد تا اين اطمينان حاصل شود که شما از يک آدرس درست برای روتر و يا host ديگر که مسئول فورواردينگ بسته های اطلاعاتی در Local Subnet است ، استفاده می نمائيد . احتمال دوم : ممکن است خود Default gateway دارای مشکل باشد . برای اطمينان از اين موضوع ، می توان از طريق يک سيستم ديگر موجود در شبکه ، Default Gateway را ping نمود . در صورتی که مشکل همچنان باقی است ، می بايست برای حل مشکل بر روی Default Gateway متمرکز گرديد .
  • آيا امکان ارتباط با ساير سيستم های موجود در خارج از شبکه محلی وجود دارد ؟ برای پاسخ به سوال فوق ، می توان يک سيستم راه دور را ping نمود . در صورتی که عمليات توام با موفقيت باشد ، ارتباط شما از طريق Default gateway به درستی برقرار شده است و در صورت عدم موفقيت ، دلايل متعددی می تواند وجود داشته باشد : بروز اشکال در سيستم مقصد ، بروز اشکال در روتينگ به سيستم مقصد و يا تجهيزات موجود در خارج از شبکه محلی
و اما دو نکته که بد نيست به آنان نيز اشاره ای داشته باشيم :
  • نکته اول : همانگونه که ملاحظه گرديد ، دستور ping دارای امکاناتی مفيد و قدرتمند به منظور اشکال زدائی ارتباط بين گره ها در شبکه های مبتنی بر TCP/IP است، ولی Ping of Death که احتمالا" نام آن را تاکنون شنيده ايد دارای وضعيتی اينچنين نمی باشد . Ping of Death يک نوع تهاجم در شبکه های کامپيوتری است که در آن يک مهاجم با استفاده از برنامه هائی خاص ، بسته های اطلاعاتی ICMP را توليد می نمايد که دارای اندازه ای بيش از حد مجاز می باشند . در صورتی که نرم افزار موجود بر روی سيستم مقصد به درستی Patch نشده باشد ، بسته های اطلاعاتی ارسالی توسط مهاجمان دريافت و بخش عمده ای از حافظه را اشغال نموده و می تواند سرريز حافظه را بدنبال داشته باشد . مديران شبکه می بايست يک محيط ايمن به منظور استفاده از ping را در شبکه فراهم نموده تا امکان تحقق چنين حملاتی در شبکه وجود نداشته باشد .
  • نکته دوم : در صورتی که نتوان يک کامپيوتر راه دور را ping نمود ، نمی توان با قاطعيت اعلام نمود که سيستم مقصد به شبکه متصل نمی باشد و يا مشکل مربوط به کابل کشی شبکه است . در اين رابطه دلايل متعددی می تواند وجود داشته باشد : بروز اشکال در هر يک از دستگاه های موجود در مسير ارتباطی نظير هاب ، سوئيچ ، روتر و يا Default Gateway . به همين دليل ، می بايست همواره يک طرح کامل از شبکه به همراه جزئيات مربوطه وجود داشته باشد تا در صورت بروز مشکلاتی اينچنين به سرعت بتوان مسير مربوطه را برای اشکال زدائی بررسی نمود . در چنين مواردی ، می بايست هر دستگاه موجود در مسير ارتباطی بررسی گردد .