Книга: TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security)
8.9.8 Деление горизонта и опасный реверс
8.9.8 Деление горизонта и опасный реверс
Почему иногда происходит зацикливание трафика в RIP? Причина в том, что после изменения проходит некоторое время, пока все маршрутизаторы не обновят информацию. На рис. 8.7 показан простой пример (он взят из RFC 1058). Маршрутизатор D имеет два пути к сети N. Один из них короткий (в одно попадание), а другой — длинный (в 10 попаданий). Если оборвется связь по короткому пути, маршрутизатор D заменит его на альтернативный (длинный) путь с метрикой 10.
Рис. 8.7. Маршрутизация после неисправности в сети
Однако в сообщениях RIP об изменении; посланных маршрутизаторам А, В и С, будут только следующие сведения:
Сеть N Метрика = 2
Нет никакого способа указать в сообщении, что путь проходит через маршрутизатор D. Что же произойдет, когда маршрутизатор D получит изменения от А до того, как укажет А на собственные изменения?
? D изменит строку своей таблицы на:
Назначение | Следующее попадание | Метрика |
---|---|---|
Сеть N | А | 3 |
? D попытается переслать трафик к сети N через А (последний отправит трафик обратно).
? D отправит объявления об изменении своей таблицы на А, В и С (что он может достичь сети N за три попадания).
? Маршрутизаторы ответят, что они теперь смогут попасть в сеть N за четыре попадания. Маршрутизаторы В и С столкнутся с неоднозначностью и, в зависимости от времени поступления изменений, могут пытаться отправлять свои трафики к сети N друг через друга, через А или D.
? Изменения RIP будут распространяться дальше и глубже.
Хорошо то, что метрики для сети N в А, В и С будут постоянно увеличиваться с приходом каждого нового изменения, пока не достигнут значения 11 и не будет определен правильный маршрут. Два простых механизма позволяют избежать путаницы в сети, которая может возникнуть во время устранения неисправности.
Деление горизонта (split horizon) требует, чтобы маршрутизаторы не посылали своих объявлений о пути к системам со следующим попаданием по этому пути. В примере на рис. 8.7 маршрутизаторы А, В и С не будут указывать D, что могут достичь сети N, поскольку путь к N проходит через сам маршрутизатор D.
Опасный реверс (poisoned reverse) идет еще дальше. По этому алгоритму маршрутизаторы А, В и С (см. рис. 8.7) предотвращают распространение неверных сведений с помощью специального сообщения, означающего "Не пытайтесь передавать через меня!". Более точно — изменения будут включать элемент:
Сеть N Метрика = 16
Это исключает проблемы в небольших сетях, но для сетей с большим диаметром колец зацикливания они остаются, даже когда реально нельзя достичь точки назначения. Метрики все равно когда-нибудь увеличатся до 16, и будет восстановлен правильный маршрут. Этот процесс называется подсчетом до бесконечности (counting to infinity).
Способы, идентичные рассмотренным выше алгоритмам, можно обнаружить в любом из маршрутизаторов RIP. Однако существует десяток версий RIP, написанных для слишком простых устройств (возможно, для кухонных тостеров). Если нет достоверных данных о способе работы конкретной модели маршрутизатора, его лучше переместить в небольшую сеть и конфигурировать вручную.
Несколько очевидных недостатков сообщений протокола RIP версии 1 мы рассмотрим в следующих разделах.
- 8.9.1 Инициализация RIP
- 8.9.2 Обновление таблиц RIP
- 8.9.3 Механизм RIP версии 1
- 8.9.4 Сообщения об изменениях в RIP версии 1
- 8.9.5 Поля сообщения об изменениях в RIP версии 1
- 8.9.6 Настройка RIP
- 8.9.7 Триггерные изменения и хранение
- 8.9.8 Деление горизонта и опасный реверс
- 8.9.9 Нет маски подсети
- 8.9.10 Широковещательные рассылки в локальной сети
- 8.9.11 Отсутствие аутентификации
- 8.9.12 Отсутствие распознавания медленных и быстрых связей
- 8.9.13 Избыточный трафик
- 1.2. Определение количества информации. Единицы измерения количества информации
- Определение версии клиента
- Определение пользовательского формата числовых данных
- Определение целей. Построение цепочек
- 4.2. Создание трехмерной модели и построение горизонтальной проекции детали
- 3.2.1.2. Начальное выделение памяти: malloc()
- Определение необходимого системного вызова
- Раздел 1 Лояльность: определение и ключевые факторы
- Определение позиционного уровня
- Распределение торговой площади по категориям
- 3.3. Определение объектов защиты
- Определение собственной миссии