Маршрутные заморочки Докучаев Дмитрий aka Forb Хакер, номер #080, стр. 080-026-3 1 -> 1 B -> 1 – маршрутизатору C и 1 -> 1 C -> 1 – маршрутизатору B. Получив эти данные, скажем, маршрутизатор C, начинает их обработку. Сперва он проверяет, чтобы метрика не превышала 16, затем ищет в своей таблице роутинга сети назначения. При их отсутствии он внесет всю информацию, но предварительно увеличит все метрики на единицу. Затем роутер C передаст следующие данные маршрутизатору D: 1 -> 2 B -> 2 A -> 1 Но предположим, что роутер B уже передал эти сведения раньше. При этом у маршрутизатора D уже успела сформироваться точно такая же таблица. В этом случае табличные и полученные метрики окажутся одинаковыми. Тогда D просто проигнорирует данные и не сохранит их в памяти. То же самое произошло, если бы D получил метрики, превышающие собственные до той же сети. Через определенное время все роутеры будут знать обо всех сетях в общей автономной системе. После этого обмен данными будет происходить раз в 30 секунд, но если сведения о сети не были получены в течение 180 секунд, маршрутизатор установит метрику до сети равной 16, что будет говорить об ее недоступности. Таким образом, обнаруживаются отключения шлюзов, либо аварии на каналах. Бывают случаи, когда происходят внештатные ситуации, получившие названия «зацикливание» и «счет до бесконечности». Эти вредные явления засоряют сеть ложной информацией и могут длиться до получаса. Зацикливание происходит после отключения одной из сети, когда сторонний роутер оповестит соседа, что сеть доступна через него (в случае, если сосед не успеет оповестить маршрутизатор о недоступности сети). Таким образом, между шлюзами образуется петля. Чтобы избежать петель, вводят два ограничения в протокол RIP. Первое называется «правилом разделения горизонта». Оно гласит, что маршрутизатор A не должен отправлять данные о сети B, маршрутизатору C, если последний ему сообщил о сети B. Иными словами, роутер не шлет инфу о сети соседу, если изначально получил сведения об этой сети от него. Второе ограничение обязывает шлюз изменить метрику маршрута, если ее разослал тот же самый роутер. Отчасти, эти добавления спасают от петель, но не всегда. Бывает, что маршрутизатор получает ложные данные от стороннего шлюза по цепочке. Но мы не будем углубляться в такие сложности :). Счет до бесконечности происходит в результате несвоевременного оповещения станций. При этом ложный маршрут может существовать, пока метрика сети не станет равной 16. Вот как это происходит. Предположим, что произошло внезапное отключение сети 1. Маршрутизатор A, обнаруживая пропажу линка, рассылает шлюзам B и C вектор расстояния 1->16. До шлюза C эта информация дошла сразу, и он своевременно изменил маршрут (согласно второму ограничению). Однако до шлюза B эта инфа не дошла (произошла задержка). В это время шлюз B рассылает информацию роутеру C, гласящую о том, что сеть A доступна через него и имеет метрику 2. Маршрутизатор C принимает эту информацию, увеличивает метрику на единицу и рассылает данные дальше – шлюзу A. Допустим, в это время пакет к шлюзу B с вектором расстояния 1->16 все-таки дошел. Но следом дошел и пакет с расстоянием 3 от того же шлюза A. В конечном итоге вся эта инфа будет циркулировать по всем трем роутерам до тех пор, пока во всех таблицах не будет установлена метрика 16. Это явление и получило название «счета до бесконечности». |