SokolovS Posted April 9, 2010 Posted April 9, 2010 (edited) Есть база FDB по всей сети, в виде id-железки, ip-железки, mac, unit, port. Т.е. в базе есть все маки со всех коммутаторов в сети. Вобщем то задача построить по этим данным дерево. Понятно что нужно выбрать корневую точку (id-железки), ну или любую начальную точку. Так же понятно что нужно выбрать какой-то MAC который у всех висит на аплинке, для того чтобы выцепить номер порта на аплинке. Дальше пока не понятно. Возможно кто-то уже подобную задачу решал, расскажите варианты решения. Я уже нашел 2 варианта, но пока оба не очень быстрые. Один из них, самый оптимальный пока, это перебирать все маки с порта и смотреть какой из них не входят в собственную FDB таблицу. Edited April 9, 2010 by SokolovS Вставить ник Quote
Koka Posted April 9, 2010 Posted April 9, 2010 Есть база FDB по всей сети, в виде id-железки, ip-железки, mac, unit, port. Т.е. в базе есть все маки со всех коммутаторов в сети.Вобщем то задача построить по этим данным дерево. Понятно что нужно выбрать корневую точку (id-железки), ну или любую начальную точку. Так же понятно что нужно выбрать какой-то MAC который у всех висит на аплинке, для того чтобы выцепить номер порта на аплинке. Дальше пока не понятно. Возможно кто-то уже подобную задачу решал, расскажите варианты решения. Я уже нашел 2 варианта, но пока оба не очень быстрые. Один из них, самый оптимальный пока, это перебирать все маки с порта и смотреть какой из них не входят в собственную FDB таблицу. Дальше считаешь сколько маков на каждой железке. Исходишь из того что что на конечных железках будет меньше маков чем на корневых. Берешь любой мак и удаляешь его(в смысле из базы) с тех свитчей на которых количество маков больше чем на выбранном ну и т.д. Поподробнее попозже попробую изложить Вставить ник Quote
SokolovS Posted April 9, 2010 Author Posted April 9, 2010 Исходишь из того что что на конечных железках будет меньше маков чем на корневых. Это условие не всегда верное, т.к. на аплинке могут висеть маки с соседних веток. Вставить ник Quote
Koka Posted April 9, 2010 Posted April 9, 2010 Исходишь из того что что на конечных железках будет меньше маков чем на корневых.Это условие не всегда верное, т.к. на аплинке могут висеть маки с соседних веток. Откиньте все аплинки(если в порту видим мак шлюза то он аплинк) Вставить ник Quote
SokolovS Posted April 11, 2010 Author Posted April 11, 2010 Т.е. общее количество маков минус кол-во маков на аплинке, это брать за критейрий удаленности от центра. Так? Вставить ник Quote
s.lobanov Posted April 11, 2010 Posted April 11, 2010 А колец(или случайных петель) у вас типа нет? Вставить ник Quote
wtyd Posted April 11, 2010 Posted April 11, 2010 Есть база FDB по всей сети, в виде id-железки, ip-железки, mac, unit, port. Т.е. в базе есть все маки со всех коммутаторов в сети.Вобщем то задача построить по этим данным дерево. Понятно что нужно выбрать корневую точку (id-железки), ну или любую начальную точку. Так же понятно что нужно выбрать какой-то MAC который у всех висит на аплинке, для того чтобы выцепить номер порта на аплинке. Дальше пока не понятно. Возможно кто-то уже подобную задачу решал, расскажите варианты решения. Я уже нашел 2 варианта, но пока оба не очень быстрые. Один из них, самый оптимальный пока, это перебирать все маки с порта и смотреть какой из них не входят в собственную FDB таблицу. Скажите, а зачем это надо ? Просто давным давно, лет 7-8 назад, когда я был молодым и глупым, я тоже захотел прописать на всех коммутаторах все маки статически. Это было связано не только с безопасностью, ещё с другими проблемами, про которые долго рассказывать. Я даже написал программу на перле с интерактивным пользовательским интерфейсом на псевдографике, цветную :-). программа составляла FDB для всех коммутаторов сети, т.е. в базку заносились мутаторы, их топология (какой от которогоподключен) и маки абонов. На выходе получались команды для занесения на мутаторы. Как же хорошо, что хватило мозгов не применить это на практике ... зато на перле писать потренировался :-). Прогу ту я потерял. Вставить ник Quote
Koka Posted April 11, 2010 Posted April 11, 2010 А колец(или случайных петель) у вас типа нет?Нет Скажите, а зачем это надо ?Как я понял Человек хочет построить дерево коммутаторов, что за чем идет и куда воткнуто. 2 SokolovS 1. Снимаем все маки со всех свитчей(получаем базу ip - port - маки за портом, для удобства маки преобразовать в ip) 2. находим аплинки и помечаем их (если в порту вижу мак шлюза считаю его аплинком) 3. считаем количество маков на свитче не учитывая аплинков и заносим в базу 4. удаляем с аплинков лишние маки 5. перебираешь все маки из базы и удаляешь этот мак с тех свитчей где он встречается И на которых количество маков больше чем на выбранном 6. в конце базе останется ip - port - 1 мак след. устройсва 7. Группируем по адресам и наносим на ГИС, по конкретному адресу прорисовываем в graphviz А вообще извращение это =))) Есть же замечательный протокол LLDP, куда проще и точнее Вставить ник Quote
6PATyCb Posted April 12, 2010 Posted April 12, 2010 А тебе ее именно рисовать надо или просто вычислять с какого коммутатора и через какие все идет? Вставить ник Quote
SokolovS Posted April 12, 2010 Author Posted April 12, 2010 Скажите, а зачем это надо ? Просто давным давно, лет 7-8 назад, когда я был молодым и глупым, я тоже захотел прописать на всех коммутаторах все маки статически. Это было связано не только с безопасностью, ещё с другими проблемами, про которые долго рассказывать. Я даже написал программу на перле с интерактивным пользовательским интерфейсом на псевдографике, цветную :-). программа составляла FDB для всех коммутаторов сети, т.е. в базку заносились мутаторы, их топология (какой от которогоподключен) и маки абонов. На выходе получались команды для занесения на мутаторы. Как же хорошо, что хватило мозгов не применить это на практике ... зато на перле писать потренировался :-). Прогу ту я потерял. Мне нужна просто топология, не более :) Никакой статики в FDB мне не нужно! Вставить ник Quote
SokolovS Posted April 12, 2010 Author Posted April 12, 2010 А колец(или случайных петель) у вас типа нет?Нет Скажите, а зачем это надо ?Как я понял Человек хочет построить дерево коммутаторов, что за чем идет и куда воткнуто. 2 SokolovS 1. Снимаем все маки со всех свитчей(получаем базу ip - port - маки за портом, для удобства маки преобразовать в ip) 2. находим аплинки и помечаем их (если в порту вижу мак шлюза считаю его аплинком) 3. считаем количество маков на свитче не учитывая аплинков и заносим в базу 4. удаляем с аплинков лишние маки 5. перебираешь все маки из базы и удаляешь этот мак с тех свитчей где он встречается И на которых количество маков больше чем на выбранном 6. в конце базе останется ip - port - 1 мак след. устройсва 7. Группируем по адресам и наносим на ГИС, по конкретному адресу прорисовываем в graphviz А вообще извращение это =))) Есть же замечательный протокол LLDP, куда проще и точнее Ок. Спс, попробую по данному алгоритму.LLDP конечно клево, но не универсально, BRIDGE-MIB поддерживает любой мало-мальски управляемый L2, а вот LLDP есть далеко не везде, к тому же, какой плюс в нем если снимать данные нужно все равно по SNMP. Вставить ник Quote
SokolovS Posted April 15, 2010 Author Posted April 15, 2010 (edited) Все получилось, алгоритм я немного оптимизировал. После того как я нашел все другие коммутаторы на которых встречается искомый МАК и откинул те, на которых он висит на аплинке, остаются только его прямые соседи, т.е. все те у кого он на даунлинке. Чтобы упорядочить использую простейший запрос: SELECT COUNT(DISTINCT mac) AS prio FROM global_fdb WHERE mac IN ('neighbor_mac1', 'neighbor_mac2', 'neighbor_mac3'); Получаемое в результате запроса значение и есть приоритет для построения пути. Вторая фишка в том что не нужно забивать в конфиги маки шлюзов для поиска аплинков, можно забивать IP или ID. Сами маки можно взять из той же FDB, только в состоянии SELF а не LEARN. Это облегчает поддержку, когда на шлюз добавляются новые сегменты. Спс за подсказки! Edited April 15, 2010 by SokolovS Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.