| PING(8) | iputils | PING(8) |
نام (NAME)
ping - ارسال بسته ICMP ECHO_REQUEST به میزبانهای شبکه
خلاصه دستور (SYNOPSIS)
ping [-aAbBdCDfhHLnOqrRUvV346] [-c count] [-e identifier] [-F flowlabel] [-i interval] [-I interface] [-l preload] [-m mark] [-M pmtudisc_option] [-N nodeinfo_option] [-w deadline] [-W timeout] [-p pattern] [-Q tos] [-s packetsize] [-S sndbuf] [-t ttl] [-T timestamp option] [hop...] {destination}
توضیحات (DESCRIPTION)
ping از دیتاگرام اجباری ECHO_REQUEST در پروتکل ICMP برای درخواست یک پاسخ ECHO_RESPONSE از یک میزبان یا دروازه (gateway) استفاده میکند. دیتاگرامهای ECHO_REQUEST (یا همان “ping”ها) دارای یک سرآیند IP و ICMP هستند که پس از آنها یک struct timeval و سپس تعداد دلخواهی بایت پرکننده (“pad”) برای تکمیل بسته قرار میگیرد.
ping هم با IPv4 و هم با IPv6 کار میکند. استفاده انحصاری از هر یک از آنها را میتوان با مشخص کردن -4 یا -6 اجبار کرد.
ping همچنین میتواند پرسوجوهای اطلاعات گره IPv6 یا همان Node Information Queries (RFC4620) را ارسال کند. ممکن است hopهای میانی مجاز نباشند، زیرا مسیریابی مبدا در IPv6 منسوخ شده است (RFC5095).
گزینهها (OPTIONS)
-3
-4
-6
-a
-A
-b
-B
-c count
-C
-d
-D
-e identifier
-f
-F flow label
-h
-H
-i interval
-I interface
-l preload
-L
-m mark
-M pmtudisc_opt
-N nodeinfo_option
help
name
ipv6
ipv6-global
ipv6-sitelocal
ipv6-linklocal
ipv6-all
ipv4
ipv4-all
subject-ipv6=ipv6addr
subject-ipv4=ipv4addr
subject-name=nodename
subject-fqdn=nodename
-n
-O
-p pattern
-q
-Q tos
در RFC2474، این فیلدها به عنوان سرویسهای متمایز (DS) ۸ بیتی تفسیر میشوند، متشکل از: بیتهای ۰-۱ (۲ بیت کمارزشتر) از دادههای مجزا، و بیتهای ۲-۷ (۶ بیت باارزشتر) از نقطه کد سرویسهای متمایز (DSCP). در RFC2481 و RFC3168، بیتهای ۰-۱ برای ECN استفاده میشوند.
از دید تاریخی (RFC1349، که توسط RFC2474 منسوخ شده)، این موارد به این صورت تفسیر میشدند: بیت ۰ (کمارزشترین بیت) برای رزرو (که در حال حاضر به عنوان کنترل ازدحام بازتعریف شده است)، بیتهای ۱-۴ برای نوع سرویس (Type of Service) و بیتهای ۵-۷ (باارزشترین بیتها) برای اولویت (Precedence).
-r
-R
-s packetsize
-S sndbuf
-t ttl
-T timestamp option
-U
-v
-V
-w deadline
-W timeout
هنگام استفاده از ping برای جداسازی خطا و عیبیابی، ابتدا باید آن را روی میزبان محلی اجرا کرد تا بررسی شود که رابط شبکه محلی فعال و در حال کار است. سپس، میزبانها و دروازهها در فاصلههای دورتر و دورتر باید “پینگ” شوند. زمانهای رفتوبرگشت و آمارهای گم شدن بستهها محاسبه میشوند. اگر بستههای تکراری دریافت شوند، در محاسبه بستههای گمشده منظور نمیشوند، هرچند زمان رفتوبرگشت این بستهها در محاسبه مقادیر کمینه/میانگین/بیشینه/mdev برای زمانهای رفتوبرگشت به کار میرود.
انحراف معیار جامعه (mdev)، اساساً میانگینی از میزان فاصله RTT هر پینگ از میانگین RTT است. هرچه mdev بالاتر باشد، RTT متغیرتر است (در طول زمان). با متغیر بودن بالای RTT، در انتقالهای حجیم داده با مشکلات سرعت مواجه خواهید شد (بیشتر از آنچه واقعاً نیاز است زمان میبرند، زیرا این نوسان در نهایت باعث میشود فرستنده منتظر بستههای ACK بماند) و کیفیت VoIP شما متوسط تا ضعیف خواهد بود.
هنگامی که تعداد مشخصشده از بستهها ارسال (و دریافت) شد یا اگر برنامه با SIGINT متوقف شود، خلاصه کوتاهی نمایش داده میشود. با ارسال سیگنال SIGQUIT میتوان آمارهای کوتاهتر جاری را بدون پایان دادن به فرایند به دست آورد.
این برنامه برای استفاده در آزمون، سنجش و مدیریت شبکه در نظر گرفته شده است. به دلیل باری که میتواند بر شبکه تحمیل کند، استفاده از ping در حین عملیات عادی یا از طریق اسکریپتهای خودکار عاقلانه نیست.
محیط (ENVIRONMENT)
تنظیم متغیر محیطی IPUTILS_PING_PTR_LOOKUP روی 0، تحلیل معکوس DNS (جستجوی PTR) را به طور پیشفرض غیرفعال میکند. این تنظیم توسط گزینه -H یا -n بازنویسی (override) خواهد شد.
وضعیت خروج (EXIT STATUS)
اگر ping هیچ بسته پاسخی دریافت نکند، با کد 1 خارج میشود. اگر هر دو مقدار count و deadline مشخص شده باشند، و تا زمان فرا رسیدن deadline کمتر از count بسته دریافت شده باشد، باز هم با کد 1 خارج خواهد شد. در صورت بروز خطاهای دیگر، با کد 2 خارج میشود. در غیر این صورت با کد 0 خارج خواهد شد. این امر استفاده از کد خروج را برای بررسی زنده بودن یا نبودن یک میزبان ممکن میسازد.
مقصدهای محلی پیوند در IPV6 (IPV6 LINK-LOCAL DESTINATIONS)
برای IPv6، هنگامی که نشانی مقصد دارای محدوده محلی پیوند (link-local) است و ping از ICMP datagram sockets استفاده میکند، رابط خروجی باید مشخص شود. هنگامی که ping از raw sockets استفاده میکند، مشخص کردن رابط خروجی اکیداً ضروری نیست اما باید برای جلوگیری از ابهام در صورت وجود چندین رابط خروجی ممکن انجام شود.
دو راه برای مشخص کردن رابط خروجی وجود دارد:
• با استفاده از نشانهگذاری %
ping fe80::5054:ff:fe70:67bc%eth0
ping fe80::5054:ff:fe70:67bc%2
• با استفاده از گزینه -I
جزئیات بستههای ICMP (ICMP PACKET DETAILS)
یک سرآیند IP بدون گزینهها ۲۰ بایت است. یک بسته ICMP ECHO_REQUEST شامل ۸ بایت اضافه سرآیند ICMP است که پس از آن مقدار دلخواهی داده قرار میگیرد. هنگامی که یک packetsize داده میشود، این نشاندهنده اندازه این بخش داده اضافی است (پیشفرض ۵۶ است). بنابراین مقدار داده دریافتی در داخل یک بسته IP از نوع ICMP ECHO_REPLY همواره ۸ بایت بیشتر از فضای داده درخواستی (سرآیند ICMP) خواهد بود.
اگر فضای داده حداقل به اندازه struct timeval باشد، ping از بایتهای ابتدایی این فضا برای گنجاندن یک برچسب زمانی استفاده میکند که از آن در محاسبه زمانهای رفتوبرگشت بهره میبرد. اگر فضای داده کوتاهتر باشد، هیچ زمان رفتوبرگشتی ارائه نمیشود.
بستههای تکراری و آسیبدیده (DUPLICATE AND DAMAGED PACKETS)
دستور ping بستههای تکراری و آسیبدیده را گزارش میکند. بستههای تکراری هرگز نباید رخ دهند، و به نظر میرسد ناشی از ارسالهای مجدد نامناسب در سطح پیوند (link-level) باشند. بستههای تکراری ممکن است در موقعیتهای مختلفی رخ دهند و به ندرت (در صورت وقوع) نشانه خوبی هستند، اگرچه وجود سطوح پایینی از تکرارها ممکن است همواره دلیلی برای هشدار نباشد.
بستههای آسیبدیده آشکارا دلیلی جدی برای هشدار هستند و اغلب نشاندهنده سختافزار خراب در جایی در مسیر بسته ping هستند (در شبکه یا در میزبانها).
تداخلهای شناسه (ID COLLISIONS)
برخلاف TCP و UDP که از درگاه (port) برای شناسایی یکتای گیرنده جهت تحویل داده استفاده میکنند، ICMP از فیلد شناسه (ID) برای شناسایی بهره میبرد. بنابراین، اگر روی یک دستگاه به طور همزمان دو فرایند پینگ از یک شناسه یکسان استفاده کنند، پاسخ echo ممکن است به گیرنده نادرست تحویل داده شود. این یک مشکل شناختهشده به دلیل اندازه محدود فیلد ۱۶ بیتی شناسه است. این یک محدودیت تاریخی پروتکل است که در حال حاضر قابل رفع نیست، مگر اینکه شناسهای را در بار مفید (payload) بسته پینگ کدگذاری کنیم. دستور ping خطای DIFFERENT ADDRESS را چاپ میکند و درصد بستههای گمشده منفی میشود.
دستور ping از PID برای به دست آوردن یک عدد یکتا استفاده میکند. مقدار پیشفرض /proc/sys/kernel/pid_max برابر ۳۲۷۶۸ است. در سیستمهایی که استفاده سنگینی از پینگ دارند و مقدار pid_max در آنها بیشتر از ۶۵۵۳۵ باشد، تداخلها حتماً رخ خواهند داد.
آزمودن الگوهای مختلف داده (TRYING DIFFERENT DATA PATTERNS)
لایه (بین-)شبکه هرگز نباید با بستهها بر اساس دادههای موجود در بخش داده رفتار متفاوتی داشته باشد. متاسفانه، مشکلات وابسته به داده به درون شبکهها رخنه کرده و برای دورههای طولانی ناشناخته باقی ماندهاند. در بسیاری از موارد، الگوی خاصی که دچار مشکل میشود، چیزی است که “گذارها” (transitions) کافی ندارد، مانند همه یکها یا همه صفرها، یا الگویی درست در لبه، مانند تقریباً همه صفرها. مشخص کردن یک الگوی داده مثلاً از همه صفرها در خط فرمان لزوماً کافی نیست، زیرا الگوی مورد نظر در سطح پیوند داده (data link) قرار دارد و رابطه میان آنچه تایپ میکنید و آنچه کنترلرها ارسال میکنند میتواند پیچیده باشد.
این بدان معناست که اگر با مشکلی وابسته به داده مواجه شدید، احتمالاً باید آزمایشهای زیادی برای پیدا کردن آن انجام دهید. اگر خوششانس باشید، ممکن است فایلی بیابید که یا از طریق شبکه شما ارسال نمیشود یا انتقال آن بسیار طولانیتر از سایر فایلهای با اندازه مشابه طول میکشد. سپس میتوانید این فایل را برای الگوهای تکراری بررسی کرده و آنها را با استفاده از گزینه -p در ping بیازمایید.
جزئیات TTL (TTL DETAILS)
مقدار TTL در یک بسته IP نشاندهنده حداکثر تعداد مسیریابهای IP است که بسته میتواند پیش از دور انداخته شدن از آنها عبور کند. در عملکرد فعلی، میتوانید انتظار داشته باشید که هر مسیریاب در اینترنت مقدار فیلد TTL را دقیقاً یک واحد کاهش دهد.
فیلد TTL برای بستههای TCP ممکن است مقادیر گوناگونی بگیرد. حداکثر مقدار ممکن برای این فیلد ۲۵۵ و مقدار اولیه توصیهشده ۶۴ است. برای اطلاعات بیشتر، بخش رابط سطح پایین TCP در RFC9293 را ببینید.
در عملکرد عادی، ping مقدار TTL را از بستهای که دریافت میکند چاپ میکند. هنگامی که یک سیستم دوردست بسته پینگ را دریافت میکند، میتواند در پاسخ خود با فیلد TTL یکی از سه کار زیر را انجام دهد:
ایرادات (BUGS)
همچنین ببینید (SEE ALSO)
تاریخچه (HISTORY)
دستور ping در 4.3BSD پدیدار شد.
نسخهای که در اینجا شرح داده شده، نواده مختص لینوکس آن است.
از نسخه s20150815، باینری ping6 دیگر وجود ندارد. این برنامه درون ping ادغام شده است. ایجاد یک پیوند نمادین (symlink) با نام ping6 که به ping اشاره دارد، همان عملکرد پیشین را ارائه خواهد داد.
امنیت (SECURITY)
دستور ping برای اجرا نیاز به مجوز CAP_NET_RAW دارد: ۱) در صورتی که برنامه برای پرسوجوهای غیر echo به کار رود (گزینه -N را ببینید) یا هنگامی که فیلد شناسه برای ECHO_REQUEST روی 0 تنظیم شده باشد (گزینه -e را ببینید)، یا ۲) اگر هسته از سوکتهای دیتاگرام ICMP پشتیبانی نکند، یا ۳) اگر کاربر مجاز به ساختن یک سوکت echo در ICMP نباشد. برنامه ممکن است به صورت set-uid root به کار رود.
در دسترس بودن (AVAILABILITY)
دستور ping بخشی از بسته iputils است.
| iputils 20250605 |