Перейти к содержимому
Калькуляторы

Построить дерево алгоритм

Есть база FDB по всей сети, в виде id-железки, ip-железки, mac, unit, port. Т.е. в базе есть все маки со всех коммутаторов в сети.

Вобщем то задача построить по этим данным дерево. Понятно что нужно выбрать корневую точку (id-железки), ну или любую начальную точку. Так же понятно что нужно выбрать какой-то MAC который у всех висит на аплинке, для того чтобы выцепить номер порта на аплинке. Дальше пока не понятно.

 

Возможно кто-то уже подобную задачу решал, расскажите варианты решения. Я уже нашел 2 варианта, но пока оба не очень быстрые.

 

Один из них, самый оптимальный пока, это перебирать все маки с порта и смотреть какой из них не входят в собственную FDB таблицу.

Изменено пользователем SokolovS

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Есть база FDB по всей сети, в виде id-железки, ip-железки, mac, unit, port. Т.е. в базе есть все маки со всех коммутаторов в сети.

Вобщем то задача построить по этим данным дерево. Понятно что нужно выбрать корневую точку (id-железки), ну или любую начальную точку. Так же понятно что нужно выбрать какой-то MAC который у всех висит на аплинке, для того чтобы выцепить номер порта на аплинке. Дальше пока не понятно.

 

Возможно кто-то уже подобную задачу решал, расскажите варианты решения. Я уже нашел 2 варианта, но пока оба не очень быстрые.

 

Один из них, самый оптимальный пока, это перебирать все маки с порта и смотреть какой из них не входят в собственную FDB таблицу.

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

Поподробнее попозже попробую изложить

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Исходишь из того что что на конечных железках будет меньше маков чем на корневых.

Это условие не всегда верное, т.к. на аплинке могут висеть маки с соседних веток.

Поделиться сообщением


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

Откиньте все аплинки(если в порту видим мак шлюза то он аплинк)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Т.е. общее количество маков минус кол-во маков на аплинке, это брать за критейрий удаленности от центра. Так?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Есть база FDB по всей сети, в виде id-железки, ip-железки, mac, unit, port. Т.е. в базе есть все маки со всех коммутаторов в сети.

Вобщем то задача построить по этим данным дерево. Понятно что нужно выбрать корневую точку (id-железки), ну или любую начальную точку. Так же понятно что нужно выбрать какой-то MAC который у всех висит на аплинке, для того чтобы выцепить номер порта на аплинке. Дальше пока не понятно.

 

Возможно кто-то уже подобную задачу решал, расскажите варианты решения. Я уже нашел 2 варианта, но пока оба не очень быстрые.

 

Один из них, самый оптимальный пока, это перебирать все маки с порта и смотреть какой из них не входят в собственную FDB таблицу.

Скажите, а зачем это надо ?

 

Просто давным давно, лет 7-8 назад, когда я был молодым и глупым, я тоже захотел прописать на всех коммутаторах все маки статически. Это было связано не только с безопасностью, ещё с другими проблемами, про которые долго рассказывать. Я даже написал программу на перле с интерактивным пользовательским интерфейсом на псевдографике, цветную :-). программа составляла FDB для всех коммутаторов сети, т.е. в базку заносились мутаторы, их топология (какой от которогоподключен) и маки абонов. На выходе получались команды для занесения на мутаторы. Как же хорошо, что хватило мозгов не применить это на практике ... зато на перле писать потренировался :-). Прогу ту я потерял.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
А колец(или случайных петель) у вас типа нет?
Нет

 

Скажите, а зачем это надо ?
Как я понял Человек хочет построить дерево коммутаторов, что за чем идет и куда воткнуто.

 

2 SokolovS

1. Снимаем все маки со всех свитчей(получаем базу ip - port - маки за портом, для удобства маки преобразовать в ip)

2. находим аплинки и помечаем их (если в порту вижу мак шлюза считаю его аплинком)

3. считаем количество маков на свитче не учитывая аплинков и заносим в базу

4. удаляем с аплинков лишние маки

5. перебираешь все маки из базы и удаляешь этот мак с тех свитчей где он встречается И на которых количество маков больше чем на выбранном

6. в конце базе останется ip - port - 1 мак след. устройсва

7. Группируем по адресам и наносим на ГИС, по конкретному адресу прорисовываем в graphviz

 

А вообще извращение это =)))

Есть же замечательный протокол LLDP, куда проще и точнее

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А тебе ее именно рисовать надо или просто вычислять с какого коммутатора и через какие все идет?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Скажите, а зачем это надо ?

 

Просто давным давно, лет 7-8 назад, когда я был молодым и глупым, я тоже захотел прописать на всех коммутаторах все маки статически. Это было связано не только с безопасностью, ещё с другими проблемами, про которые долго рассказывать. Я даже написал программу на перле с интерактивным пользовательским интерфейсом на псевдографике, цветную :-). программа составляла FDB для всех коммутаторов сети, т.е. в базку заносились мутаторы, их топология (какой от которогоподключен) и маки абонов. На выходе получались команды для занесения на мутаторы. Как же хорошо, что хватило мозгов не применить это на практике ... зато на перле писать потренировался :-). Прогу ту я потерял.

Мне нужна просто топология, не более :) Никакой статики в FDB мне не нужно!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
А колец(или случайных петель) у вас типа нет?
Нет

 

Скажите, а зачем это надо ?
Как я понял Человек хочет построить дерево коммутаторов, что за чем идет и куда воткнуто.

 

2 SokolovS

1. Снимаем все маки со всех свитчей(получаем базу ip - port - маки за портом, для удобства маки преобразовать в ip)

2. находим аплинки и помечаем их (если в порту вижу мак шлюза считаю его аплинком)

3. считаем количество маков на свитче не учитывая аплинков и заносим в базу

4. удаляем с аплинков лишние маки

5. перебираешь все маки из базы и удаляешь этот мак с тех свитчей где он встречается И на которых количество маков больше чем на выбранном

6. в конце базе останется ip - port - 1 мак след. устройсва

7. Группируем по адресам и наносим на ГИС, по конкретному адресу прорисовываем в graphviz

 

А вообще извращение это =)))

Есть же замечательный протокол LLDP, куда проще и точнее

Ок. Спс, попробую по данному алгоритму.

LLDP конечно клево, но не универсально, BRIDGE-MIB поддерживает любой мало-мальски управляемый L2, а вот LLDP есть далеко не везде, к тому же, какой плюс в нем если снимать данные нужно все равно по SNMP.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Все получилось, алгоритм я немного оптимизировал. После того как я нашел все другие коммутаторы на которых встречается искомый МАК и откинул те, на которых он висит на аплинке, остаются только его прямые соседи, т.е. все те у кого он на даунлинке. Чтобы упорядочить использую простейший запрос:

SELECT COUNT(DISTINCT mac) AS prio FROM global_fdb WHERE mac IN ('neighbor_mac1', 'neighbor_mac2', 'neighbor_mac3');

 

Получаемое в результате запроса значение и есть приоритет для построения пути.

 

Вторая фишка в том что не нужно забивать в конфиги маки шлюзов для поиска аплинков, можно забивать IP или ID. Сами маки можно взять из той же FDB, только в состоянии SELF а не LEARN. Это облегчает поддержку, когда на шлюз добавляются новые сегменты.

 

Спс за подсказки!

Изменено пользователем SokolovS

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас