Протоколы Internet

         

Сетевая диагностика с применением протокола SNMP


5.1 Сетевая диагностика с применением протокола SNMP

Семенов Ю.А. (ГНЦ ИТЭФ)

Обслуживание и диагностирование больших многосегментных, многопротокольных сетей, размещенных на большой территории, а в некоторых случаях и в нескольких городах (например, корпоративные сети типа Интранет), представляет собой тяжелую проблему.

Так как сеть может быть построена с использованием различных физических сред и протоколов, наиболее привлекательным, если не единственным, средством диагностики представляется протокол snmp, который служит для целей управления в ISDN, X.25, FDDI, ATM, TCP/IP и других сетях. Протокол SNMP (std15, RFC-1448, -1592, -1901, 1902-1907, 1908-1910) использует управляющую базу данных mib (RFC-1213, -1158, -1792, -1042; std16, std17), доступ к которой определяется администратором локальной сети или конкретной ЭВМ (ссылки, выделенные полужирным шрифтом, являются стандартами Интернет). Для того чтобы база данных была доступна, необходимо наличие snmp-демона с режимом свободного доступа (поле community = public). Рассмотрим сеть, изображенную на рис. 4.1.1.

Рис. 4.1.1. Пример диагностируемой сети

Для диагностики сегмента, непосредственно связанного с ЭВМ-тестером, можно использовать режим 6 Ethernet-интерфейса ЭВМ-тестера. Этот режим, при котором принимаются все пакеты, следующие по сегменту, позволяет регистрировать распределение пакетов по адресам отправителя и получателя, протоколам, длинам пакетов и т.д.. Запуская определенные программы на ЭВМ 1 или 2 (сегмент С-1), можно получить исчерпывающую информацию о состоянии сегмента. Этот способ диагностики не пригоден для сегментов, к которым подключены ЭВМ 3 (сегмент С-2), 4 и 5 (сегмент С-3). В случае, если все ЭВМ сети поддерживают протокол tcp/ip, возможно применение для целей диагностики протокола icmp (RFC-1256, -1788, -1885, -792). Этот протокол также как и snmp пригоден для диагностики не только локальной сети но и каналов Интернет. Если использовать icmp не только для трассировки маршрутов, но и для измерения процента испорченных пакетов, можно получить весьма полезную информацию, а при длинных сегментах зарегистрировать ухудшение качества сегмента при подключении слишком большого числа ЭВМ. Такая техника может прогнозировать ухудшение пропускной способности канала при подключении дополнительных ЭВМ. Но применение icmp ограничено ЭВМ, поддерживающими протоколы Интернет, да и получаемые данные весьма ограничены.


Следует иметь в виду, что в многопротокольных средах структуры MIB могут заметно отличаться, варьируется несколько и формат SNMP-пакетов. В настоящее время существует достаточно большой выбор коммерческих программ сетевой SNMP-диагностики (их цены лежат в диапазоне 5-45 тыс. дол.). Особую ценность представляют аппаратно-программные комплексы (15-55 тыс. дол.), которые способны диагностировать состояние оборудования и кабельных сегментов. К сожалению, для отечественных пользователей они по причине цены практически недоступны.

Сеть ИТЭФ, которая была зарегистрирована одной из первых в качестве узла Интернет в 1991 году, в настоящее время содержит более 400 ЭВМ при суммарной длине кабельных сегментов около 10 км и обслуживается 6 сотрудниками. В сети используются протоколы TCP/IP, Novell, Arcnet и др.. Проблема диагностики такой сети достаточно актуальна. Мы сначала использовали традиционные программные средства типа ping, traceroute, netstat, arp, snmpi, dig (venera.isi.edu/pub), hosts, nslookup, ifconfig, ripquery, поставляемые со многими сетевыми пакетами. Позднее пытались адаптировать общедоступные диагностические средства типа: netwatch (windom.ucar.edu), snmpman (http:// www.smart.is/pub/mirror-indstate/snmp), netguard (oslo-nntp,eunet.no/pub/msdos/winsock/apps), ws_watch (bwl.bwl.th-harmstadt.de/windows/util). Среди наиболее часто встречающихся проблем: разрывы кабельных сегментов, несанкционированное использование IP-адресов, некачественное питание сетевого оборудования, отказы тех или иных устройств.

Не все ЭВМ имеют активные SNMP-резиденты, это происходит по причине экономии оперативной памяти или по соображениям безопасности. Еще меньше snmp-агентов, доступных в режиме public (поле SNMP-пакета community; формат пакетов описан, например, в книге Семенова Ю.А. “Протоколы и ресурсы Интернет”, Москва, “Радио и связь”, 1996). Но для контроля ситуации достаточно иметь по одному активному SNMP-резиденту на каждом из кабельных сегментов. При этом не обязательно ставить их в общедоступный режим, можно использовать для получения диагностической информации и пароль.



При написании диагностической программы не нужно пытаться считывать все переменные и таблицы MIB. База данных весьма велика и для целей диагностики не все ее записи представляют интерес. При написании нашей диагностической программы были отобраны 35 переменных (ниже приводится сокращенный список):



interface.iftable.ifentry.ifinucastpkts



Число полученных обычных пакетов;

interface.iftable.ifentry.ifinnucastpkts

Число полученных широковещательных и мультикаст-пакетов;

interface.iftable.ifentry.ifinerrors

Число ошибок при приеме пакетов;

interface.iftable.ifentry.ifoutucastpkts

Число посланных обычных пакетов;

interface.iftable.ifentry.ifinnucastpkts

Число посланных широковещательных и мультикаст-пакетов;

interface.iftable.ifentry.ifinunknownprotos

Число полученных пакетов с неизвестным кодом протокола;

ip.ipinreceives

Полное число ip-дейтограмм, включая полученные с ошибкой;

ip.ipinhdrerrors

Число входных ip-дейтограмм с ошибками в заголовке пакета, включая ошибки контрольной суммы, ttl и т.д.

ip.ipinaddrerrors

Число полученных пакетов с ошибкой в адресе;

ip.ipinunknownprotos

Число входных ip-дейтограмм, с кодами протоколов, которые не поддерживаются данной системой;

ip.ipreasmreqds

Число полученных фрагментов, которые требуют сборки;

ip.ipindelivers

Число ip-дейтограмм, принятых без ошибок (включая icmp);

icmp.icmpinmsgs

Число полученных icmp-пакетов;(другие 10 контролируемых переменных icmp-группы из соображений экономии места из списка исключены);

udp.udpindatagrams

Число принятых udp-дейтограмм;

udp.udpoutdatagrams

Число отправленных udp-дейтограмм;

udp.udpnoports

Полное число udp-дейтограмм, для которых не существует приложения для указанного номера порта;

udp.udpinerrors

Число udp-дейтограмм, которые не могут быть доставлены не по причине отсутствия приложения по указанному порту;

tcp.tcpinsegs

Число принятых tcp-сегментов;

tcp.tcpoutsegs

Число отправленных TCP-сегментов;



tcp.tcpretranssegs

Число tcp-сегментов с повторной пересылкой;

tcp.tcpoutrsts

Число сегментов с флагом rst=1;

tcp.tcpinerror

Число tcp-сегментов, полученных с ошибкой. Выбор определялся тем, что именно эти переменные варьируются динамически в течение суток. Ставилась задача исследования временных вариаций потоков в заданном сегменте и выработки критериев для диагностики потенциально опасных ситуаций. Измерения проводились каждые полчаса в течение недели.

Многие переменные базы MIB не меняются или меняются незначительно, но определяют режим работы и состояние ЭВМ-сервера. Так переменная snmpinbadcommunityuses {snmp 5} может сообщить о попытках несанкционированного доступа к базе mib. Переменные snmpintoobigs {snmp 8}, snmpingenerrs {snmp 12} или ifadminstatus {ifentry 7} и многие другие характеризуют текущее состояние системы и длительное их отслеживание чаще всего не дает полезной информации. Другие переменные, например, ipnettomedianetaddress {ip 22}, ipnettomediaentry или iproutedest и т.д. полезно контролировать при серьезных сбоях и сравнивать их с эталонными значениями. Некоторые переменные важны при анализе эффективности системы, например, ipfragcreate {ip 19} или ipfragfails {ip 18}, последняя переменная говорит о том, сколько встретилось пакетов с флагом, запрещающим фрагментацию, в условиях, когда она необходима, что может свидетельствовать, если ipfragfails велико, о неверном выборе MTU.



Рассмотрим средние значения некоторых переменных за сутки. Так переменные ip.ipinreceives=1379552, ifentryifinucastpkts=1278232, ifentry.ifinnunicastpkts=5083 характеризуют средний поток пакетов на входе сетевого интерфейса. Видно, что широковещательные и мультикастинг-пакеты составляют малую долю потока, что и следует ожидать. Большой поток пакетов типа nonunicast обычно говорит о неисправности в сети. Величины ifentry.ifoutunicastpkts=1369809 и ifentry.ifoutnunicastpkts=90 характеризуют выходной поток пакетов, соотношение обычных и nonunicast-пакетов и здесь нормально. Сравнимое их значение говорило бы о неисправности сетевого интерфейса данной ЭВМ или о порче сетевого программного драйвера. Блок переменных ip.ipinhdrerrors=8, icmp.icmpouterrors=45, icmp.icmpoutdestunreachs=22 и ifentry.ifinunknownprotos=81 указывает на число сбоев в сети, если соотнести эти цифры с входным и выходным потоками пакетов можно сделать вывод о благополучии в данном кабельном сегменте, во всяком случае на протяжении данных суток. Такие ошибки возможны из-за всплеска шумов или наводок (например, по сети переменного тока). Определенное беспокойство может вызвать значение icmpoutdestunreachs, но это может быть результат работы программы ping или traceroute для недоступного узла или опечатка в IP-адресе. Переменная icmp.icmpinsrcquenchs=19 весьма важна, так как она отмечает случаи перегрузки. В данном случае таких ситуаций за сутки случилось мало. Отслеживая эту переменную для разных ЭВМ, можно выявить слабые элементы в сети и скорректировать их параметры (например, увеличить буферную память). Переменные tcp.tcpinsegs=762696, tcp.tcpoutsegs=803676 и tcp.tcpretranssegs=3554 говорят о потоках tcp-пакетов (главного транспортного средства Интернет). Число tcpretranssegs характеризует надежность и правильность настойки параметров сети, чем меньше это число, тем лучше. udp.udpindatagrams=378119, udp.udpoutdatagrams=59429 указывают на входной и выходной потоки UDP-дейтограмм (сравните с потоками TCP-сегментов). Запись в MIB udp.udpnoports является важным диагностическим показателем. Переменные, регистрирующие число тех или иных ошибок, неупомянутые в этом абзаце, оказались равными нулю. Количество пакетов snmp в точности совпадает с их числом, посланным и полученным данной программой-тестером, что говорит об отсутствии какой-либо другой SNMP-активности. Контролировать это время от времени также полезно из соображений сетевой безопасности.







Рис. 4.1.2.

Вариации tcpinsegs и udpindatagrams в течение недели

Для защищенных систем доступ к snmp-резиденту в пакетах должно использоваться поле community = паролю. Но даже эта мера не может блокировать вторжение со стороны LAN, так как в результате перехвата snmp-пакетов пароль может быть открыт. При написании таких программ нужно учитывать версии MIB, используемые анализируемыми узлами, а также тот факт, что snmp-отклики могут иметь для разных операционных сред. Рассмотрим, как варьируются некоторые из перечисленных переменных в течении суток и недели. На рис. 4.1.2 видны спады сетевой активности в ночное время и в выходные дни. Левый край диаграммы соответствует понедельнику 9 сентября (ночь), правый - понедельнику, но уже следующей недели. На рис. 4.1.3 приведена диаграмма вариации некоторых переменных за сутки. Сетевая активность захватывает период от 10 часов утра и спадает почти до нуля к 9-10 вечера, хотя бывают и исключения. Для эффективной интерпретации временных зависимостей можно использовать программу мониторинга last (или любой ее эквивалент), которая позволяет отслеживать появление новых пользователей или процессов (например, ftp). Фрагмент распечатки, выданной программой last на ЭВМ, snmp-резидентом которой пользовалась наша программа, приведен ниже.

ms977 pts/0 vitep5.itep.ru tue sep 10 23:49 - 00:16 (00:27)
ms977 pts/2 vitep5.itep.ru tue sep 10 22:20 - 23:46 (01:26)
ostrouh pts/0 athene.itep.ru tue sep 10 18:30 - 18:43 (00:13)
titovich pts/0 athene.itep.ru tue sep 10 18:30 - 18:30 (00:00)
vita pts/3 athene.itep.ru tue sep 10 14:55 - 15:56 (01:00)
checho pts/12 itep05.itep.ru tue sep 10 13:35 - 13:37 (00:01)
fomin pts/10 hydra.ifh.de tue sep 10 13:16 - 13:22 (00:06)
checho pts/7 itep05.itep.ru tue sep 10 13:09 13:16 (00:07)
illarion pts/7 xt07.itep.ru tue sep 10 12:45 12:45 (00:00)
vita pts/9 athene.itep.ru tue sep 10 11:55 13:03 (01:07)
bely pts/12 pcx01.itep.ru tue sep 10 11:49 12:02 (00:13)
vita pts/13 athene.itep.ru tue sep 10 11:49 11:52 (00:03)
efre pts/4 pcx10.itep.ru tue sep 10 10:05 10:24 (00:18)
checho pts/0 169-151-147.ipt. tue sep 10 05:07 05:09 (00:01)
ssemen ftp clotho.itep.ru mon sep 09 20:14 20:15 (00:01)
ssemen ftp clotho.itep.ru mon sep 09 19:34 19:35 (00:00)
ostrouh pts/3 athene.itep.ru mon sep 09 19:20 19:40 (00:20)
ozero pts/0 athene.itep.ru mon sep 09 19:13 22:44 (03:30)
ozero pts/5 itep05.itep.ru mon sep 09 18:05 18:32 (00:27)
olyalin pts/6 itep05.itep.ru mon sep 09 16:19 16:27 (00:08)
efre ftp pcx10.itep.ru mon sep 09 16:14 16:15 (00:00)
mara pts/1 hpl3pur2.cern.ch mon sep 09 16:02 16:27 (00:24)
mara pts/1 hpl3pur2.cern.ch mon sep 09 15:50 15:54 (00:04)
itep977 pts/2 1mars.itep.ru mon sep 09 15:22 15:23 (00:00)
ozero pts/20 aix0.itep.ru mon sep 09 15:06 15:36 (00:29)
ozero pts/12 itep05.itep.ru mon sep 09 14:56 14:56 (00:00)
galy pts/16 athene.itep.ru mon sep 09 14:27 14:31 (00:03)
bely pts/15 vitep5.itep.ru mon sep 09 14:09 10:36 (20:27)
sed pts/5 pcx11.itep.ru mon sep 09 14:01 14:01 (00:00)
kisel pts/1 vxitep.itep.ru mon sep 09 13:59 15:22 (01:22)
ozero pts/12 itep05.itep.ru mon sep 09 13:53 14:55 (01:02)
ozero pts/2 193.148.166.214 mon sep 09 13:40 13:41 (00:00)
ozero pts/8 193.148.166.214 mon sep 09 13:32 13:37 (00:04)
vita pts/9 aix0.itep.ru mon sep 09 13:32 13:32 (00:00)
vita pts/2 vitep5.itep.ru mon sep 09 13:32 13:32 (00:00)
checho pts/3 itep05.itep.ru mon sep 09 13:11 13:12 (00:00)
efre pts/3 pcx10.itep.ru mon sep 09 12:12 12:23 (00:10)
kisel pts/2 vxitep.itep.ru mon sep 09 12:11 12:43 (00:32)
checho pts/6 itep05.itep.ru mon sep 09 12:02 12:03 (00:00)
kisel ftp pcx11.itep.ru mon sep 09 11:42 11:43 (00:00)
kisel ftp ion04.cern.ch mon sep 09 10:59 11:06 (00:06)
galy pts/1 athene.itep.ru mon sep 09 10:57 10:58 (00:00)
titovich pts/4 athene.itep.ru mon sep 09 10:20 10:21 (00:01)
korol pts/0 193.124.225.174 mon sep 09 05:20 05:57 (00:37)
<


/p> Первая колонка содержит имена пользователей, вторая - тип задачи (PTS/n - удаленный доступ с терминала с номером n), далее следует имя узла или его IP-адрес, с которого осуществлен доступ, дата, время работы и длительность сессии. Как правило, сессии типа FTP или NFS дают большую сетевую загрузку. Нужно учитывать возможность запуска FTP-сессии или другой информационно-емкой процедуры после входа в систему с помощью telnet (PTS). Рассматривая эту распечатку совместно с временными зависимостями переменных базы данных MIB, можно интерпретировать результаты, определить, какая из сессий загружает данный сегмент сети более других. Рассмотрев, например, результаты работы программы last и рис. 5.1.3а, можно видеть, что максимум в период с 18 до 20 часов связан с активностью пользователей ozero, ostrouh и ssemen. Но даже в отсутствии сессий, зафиксированных last, можно наблюдать заметную сетевую активность. Это может быть доставка почтовых сообщений или зондирование сервера пакетами-роботами со стороны удаленных www-клиентов.





Рис. 5.1.3(а, б). Временная зависимость ifinucastpkts, ifoutucastpkts и ifinnucastpkts

По горизонтальной оси отложено время от начала суток. Кривая, отмеченная треугольниками, соответствует правой шкале диаграммы, это справедливо для всех последующих рисунков. Входной и выходной потоки через данный интерфейс практически равны. На рис. 5.1.4(а,б) показана вариация со временем входных потоков IP-дейтограмм (ipinreceives, ipinreasmreqd и ipindelivers). Пик в правой части рис. 5.1.4а (19:00 - 20:00) показывает, что поток ipinreceives превосходит поток ipindelivers почти в два раза. Можно было бы предположить, что разница определяется числом ошибок, но так как по времени это совпадает с пиком в диаграмме ipinreasmreqd, различие следует интерпретировать, как необходимость сборки сообщений. Сопоставление значений ipinreceives, ipinreasmreqd и ipindelivers подтверждает такое предположение. Если такого рода ситуация в сети повторяется часто, нужно просмотреть корректность выбора mtu для объектов, участвующих в данном обмене. Для областей вне указанного пика значения ipinreceives и ipindelivers почти совпадают, что говорит о низком уровне ошибок (это подтверждается и значением потока icmpouterrors, icmpoutdestunreachs и ifinunknownprotos.



На рис. 5.1.5(а и б) показаны суточные вариации потоков udp-дейтограмм, а на рис. 5.1.6(а и б) представлены аналогичные временные зависимости для TCP-сегментов. Если входные и выходные потоки UDP-дейтограмм отличаются друг от друга временами в несколько раз (что вполне естественно), то входные и выходные потоки TCP-сегментов почти не отличаются (ведь каждому посланному пакету в этом протоколе должен соответствовать пакет-подтверждение).





Рис. 5.1.4(а,б). Временные зависимости входных потоков IP-дейтограмм (ipinreceives, ipinreasmreqd и ipindelivers)





Рис. 5.1.5(а,б). Суточные вариации потоков UDP-дейтограмм.





Рис. 5.1.6(а, б). Суточные вариации потоков TCP-сегментов


Содержание раздела