Почему тормозит локальная сеть?

network_brakes

Почему медленно работает сеть?

Хааа, да что за тупой вопрос? Почему угодно. 100500+ причин. Но т.к. недавно столкнулся с одним интересным для себя малограмотного случаем, обязательно его тут отмечу. Итак, в упрощенном до безобразия виде дана такая вырезка из топология LAN организации:

Тормозит сеть

Тут есть два больших коммутатора HP ProCurve 5412zl выполняющие роль корневых коммутаторов и выделенные на схеме красным. Через них, как положено, проходит львиная доля всего трафика ЛВС. Представлены здесь и два коммутатора 10.200.2.110 и 10.200.2.13, символизирующие собой свитчи уровня доступа, к которым подключены ПК пользователей, их IP телефоны и даже, по глупости, некоторые серверы. Синим цветом выделены аплинки, пропускная способность которых не меньше 1000Мбит/сек, красным же цветом отмечены тупые аплинки, работающие по какой-то причине на 10Мбит/сек.

Теперь о проблеме. Однажды случилось так, что голос людей в IP телефонах стал похож на голос Валли из одноименного мультфильма. Выяснилось, что неудачно собранный кластер терминальных серверов практически непрерывно генерировал в сеть до 10Мбит паразитного трафика (об этом, кста, детально написано здесь). Естественно, все устройства, согласовавшие с портами их свитчей скорость 10Мбит/сек (многие IP телефоны, некоторые ПК и т.п.) сильно пострадали, т.к. для их взаимодействия с миром в их сетевых портах совсем не осталось места.

Проблем с тупым терминальным кластером (ТК) быстро не решалась и поэтому телефоны, что давно следовало сделать, были вынесены в отдельный голосовой VLAN, куда, естественно, не проникал ненужный флуд от ТК. Таким образом возникшие проявления проблемы были устранены. То есть флуд в 10Мбит по прежнему никуда не делся, но все значимые устройства, ему подверженные и работающие на 10Мбит/сек были вынесены в отдельный VLAN, в то время как флуд остался в дефолтном первом VLANe.

Но дальше возникает такая вещь. Появляются странные задержки при обмене пакетами между хостами, подключенными в разных участках LAN. Смотрим на картинку. Например, обычный ICMP ping от Хоста 1 до Хоста 2 (оба находятся в VLAN 1) варьируется между 1 и 100+ msec, а некоторые пакеты вообще пропадают. Казалось бы, как так может быть, если это LAN, а не интернет и все линки от хоста 1 до хоста 2 имеют пропускную способность не меньше 1Гбит сек. При таких условиях ping должен стабильно летать туда-сюда за 1 мсек с оочень редкими девиациями от этой цифры. Даже если и благодаря флуду от ТК в сети постоянно висит паразитный фон в 10Мбмит/сек, это всего лишь 1% от пропускной способности канала между Хостом 1 и Хостом 2. В чем же проблема?

Как оказалось, проблема в некоторых хостах, которые по прежнему остались в первом VLANе и подключены в сеть аплинками с пропускной способностью 10Мбит/сек. Один такой хост и показан на картинке под именем Linux Router и воткнут прямо в порт I2 корневого коммутатора Core 1 и находится в VLAN 1. Хоть этот Linux Router и не лежит на пути трафика проходящего от хоста 1 до хоста 2, он еще как влияет на скорость прохождения этого трафика. Чтобы понять, почему это происходит, нужно посмотреть, например, на счетчики интерфейса J1 Core 1.

Core1# sh interfaces J1

Status and Counters — Port Counters for port J1

MAC Address : 0021f7-bc9c27
Link Status : Up
Totals (Since boot or last clear) :
Bytes Rx : 812,984,141 Bytes Tx : 679,714,496
Unicast Rx : 2,571,865,283 Unicast Tx : 3,329,931,025
Bcast/Mcast Rx : 178,784,611 Bcast/Mcast Tx : 1,447,609,757
Errors (Since boot or last clear) :
FCS Rx : 0 Drops Tx : 0
Alignment Rx : 0 Collisions Tx : 0
Runts Rx : 0 Late Colln Tx : 0
Giants Rx : 0 Excessive Colln : 0
Total Rx Errors : 0 Deferred Tx : 0
Others (Since boot or last clear) :
Discard Rx : 10,086,697 Out Queue Len : 0
Unknown Protos : 0
Rates (5 minute weighted average) :
Total Rx (Kbps) : 453,128 Total Tx (Kbps) : 449,464
Unicast Rx (Pkts/sec) : 216,867 Unicast Tx (Pkts/sec) : 109,209
B/Mcast Rx (Pkts/sec) : 256 B/Mcast Tx (Pkts/sec) : 107,624
Utilization Rx : 04.53 % Utilization Tx : 04.49 %

Что тут видно? Видно, что счетчик Discard Rx имеет неплохое значение, которое постоянно увеличивается. Забитость интерфейса по счетчикам Utilization Rx, Tx, как писалось выше, ну уж совсем незначительна, т.е. с точки зрения загрузки порты почти спят. Из всего этого, после долгих раздумий, родилось предположение, что происходит все так (смотрим с позиции Core1):

1. На коммутатор Core1 в интерфейс J1, прилетает пакет (ну да, на деле этой фрейм, а не пакет, т.к. речь о L2, но не будем умничать), адресованный LinuxRouter, или, как в случае с бродкаст-флудом, о котором выше упомянуто, пакет/фрейм адресован всем в сети, в том числе и LinuxRouter. Коммутатор видит, что линк I2 до этого самого LinuxRouter  уже забит донЕльзя и ставит этот пакет в очередь на интерфейсе, где получил его, т.е. на J1.

2. Таких пакетов прилетает великое множество и места в очереди J1 становится ну ооочень мало, а в некоторые моменты его нет вообще.

3. На Core 1 прилетает тот самый пакет от Хоста 1, адресованных Хосту 2. Пакет прилетает именно в тот  момент, когда очередь интерфейса J1 забита на 100% и, как следствие, Core 1 его выбрасывает. А если место все же есть, то пакет в итоге долетает до Хоста 2, но с некоторой задержкой, в зависимости от того, сколько он простоял «в очереди» на Core 1. Вот и все.

В результате, из за одного тупого хоста, согласовавшего медленный линк с коммутатором уровня ядра, через который пролетает большая часть трафика LAN медленно работает вся сеть, т.к. очереди транзитных магистралей этого Core 1 напрочь забиты тем, чего ждет тот, кто в данном случае называется LinuxRouter. И большая пропускная способность всех аплинков между коммутаторами тут ну никак не помогает.

В моем случае вылечилось все выключением интерфейса I2 на Core 1. Это можно было сделать т.к. LinuxRouter уже давно никем не использовался и просто висел и работал как полуживой памятник.

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


Не забывайте оставлять комментарии, если пост был вам полезен!
Опубликовано в Сети Метки: , , ,

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Заодно посмотрите мои фоты в моем профиле вконтакте. Любые вопросы по существу статей можете задать там же.
Hostenko — лучший WordPress-хостинг