Как работи програмата ping в Линукс

Ping (пинг) е компютърна програма за мрежова администрация, използвана за проверка на достъпността до активни устройства в интернет или локални мрежи. Името пинг произлиза от сонарната терминология. Ping работи на принципа на ехото, като изпраща съобщение чрез ICMP протокола до отдалечен компютър. Съобщението съдържа „искане“ за отговор от хоста. В този процес се измерва времето от предаване на съобщението до времето на получаването му от първоначалния компютър (двупосочния път) и се записва всяка загуба на пакети. Резултатите от теста се отпечатват на екрана под формата на статистически съобщения.

Нека започнем с един пример да проверим свързаноста с хоста google.com. За целта трябва просто да напишем в един терминал ping google.com, тъй като като програмата няма да спре за да направим това трябва да използваме клавишната комбинация Ctrl+C

Анализирайки резултата установяваме, че google.com отговаря с IP адрес 172.217.169.206, PTR записа в DNS отговаря на sof02s34-in-f14.1e100.net, ttl (time to live) живота на пакетите в хопове (рутери) са възможни още 57, time: отговора във време за което пристига пакета е между 8ms и 9ms което е сравнително добре – но най важната информация всъщност се крие след като спрем програмата и тя ни покаже кратката стаистика:

— google.com ping statistics —
6 packets transmitted, 6 received, 0% packet loss, time 5008ms

Което значи, че до google.com имаме 6 изпратени, 6 получени и 0 загубени пакети за времето от 5008ms забележете, става въпрос за мили секунди !!!

Ping всъщност може да се стартира чрез използване на различни опции в командния ред, които позволяват специални режими на работа, като например да се уточни размера на изпращаните пакети, възможни хопове, брой пакети, скорост на изпращане и много други. Ping е фундаментална програма в мрежовата администрация без която живота на хората които поддържат мрежи щеше да е много по сложен.

Нека направим и един пример на ping с опции ping -n -c 4 -i 10 google.com

където:
-n …… игнорира системата за имена DNS
-c 4 …. изпраща само четири пакета
-i 10 .. изпраща пакетите през 10 секунди

Един от готините трикове в ping е когато системния администратор има съмнения, че има “тесни места” в мрежата. Под “тесни места” се има впредвид, че при нормален тест ping изпраща около 64 bytes големина на пакета и може да не показва наличие на загуби или голямо време за отговор в милисекунди, но ако се увеличи голeмината на пакета например на 20000 bytes, пакета става много голям и доста по трудно се обработва от рутерите. Така, увеличавайки големината на пакетите се увеличава и времето за отговор. Сравнението между тях системния администратор анализира състоянието на мрежата и по точно качеството на връзката до определен хост (което често се бърка със скороста)

Ето ясен пример как от 2 милисекунди един и същ рутер към когото е изпратен по голям пакет 20000 байта започва да отговаря средно на 8 милисекунди. Също не е за подценяване разликата в стойностите 17/8/9 милисекунди, “шарене” на отговорите на рутера което е ясен знак за нестабилност тоест по лошо качество на връзката.

Ако някъде по пътя не е блокиран icmp протокола както обичат да правят неграмотните системни администратори мислейки си, че увеличават сигурноста по този начин можем да се възползваме от опцията -R на която идеята е да проследим и в двете ли посоки пакета пътува през един и същ маршрут. Не всички “специалисти” знаят, че в Интернет е нормално пакет да тръгне през един доставчик и да се върне през друг (честа практика в динамичните протоколи – най вече BGP), но в локалните мрежи при статични маршрути това е недопустимо, още повече, че се случва така нареченото “счупване на рутирането” и определени хостове не се виждат. Опцията -R в този момент е спасението показвайки ни пакета от коя страна на рутерите през какъв пакет преминава: ping -R 85.118.95.6

Ако приемем различните хостове в цветове то зеления е домашният ми рутер който на WAN порта е с публичен адрес 93.155.130.38 а LAN интерфейса тоест домашната ми мрежа е с частен такъв 192.168.101.1 Още по интересно става ако погледнем жълтия рутер който логично е, че след като е следващ да е на доставчика на Интернет при него виждаме също два адреса от моята страна 93.155.130.37 и от към страната на тествания хост 85.118.95.5. Та общо взето от цялата работа разбираме, че пакета отива е и се връща по един и същ маршрут.

ping работи както с ipv4 така и с ipv6 – само трябва да му се покаже 🙂

Някои вече се досещат, че ping няма как да е една програма, със сигурност има “форкове”, разширения и тем подобни. лесно може да се провери с ls /usr/bin | grep ping какво има във вашата дистрибуция. На всяка една команда можете да разгледате документацията с man [команда].

Самият аз много често ползвам fping заради една много удобна опция -l в него която на всеки показан нов ред, в края му, изписва загубата в проценти. ТЪй като се случва в реално време е незаменимо в рамките на 10-20 секунди да се определи има ли проблем със свързаноста на определен хост в мрежата: fping -l itservice-bg.net

В примера по горе в зелената колона е броя на пакетите а в червената загубите в проценти, по този начин дори виждаме интервала през който се случва проблема ако има такъв.

До тук разбхрахме как работи ping, най често използвани опции, ситуации, трикчета, диагностициране за 20 секунди на хост, но какво ще правим ако искаме мониторинг на хост за по голям период от време, например за няколко часа. Очевидно е, че само ping едва ли ще ни помогне, ще ни трябва нещо по мощно което пак изпозлва ping, ще ни трябва скрипт. Моят лидер е prettyping който инсталирам от GitHub по следния начин:

git clone https://github.com/denilsonsa/prettyping.git

и стартирам prettyping с google.com

prettyping/prettyping google.com

Очевидно е как в толкова малко пространство получаваме толкова много информация за всеки един пакет плюс последните два реда от който единия показва цялата информация а другия за последните изпратени 60 пакета.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.