Перед тим як почати читання цієї статті, радимо ознайомитися з матеріалом про розрахунок шляху за алгоритмом Bellman - ford.
Алгоритм дифузного поновлення (Diffusing Update Algorithm -DUAL) - один з двох обговорюваних тут алгоритмів, спочатку призначених для реалізації в розподіленої мережі. Він унікальний тим, що також видаляє інформацію про досяжності і топології, що міститься в кінцевому автоматі алгоритму. Інші обговорювані тут алгоритми залишають видалення інформації на розсуд реалізації протоколу, а не розглядають цей аспект роботи алгоритму всередині самого алгоритму.
До 1993 року Bellman-Ford і Dijkstra були реалізовані як розподілені алгоритми в декількох протоколах маршрутизації. Досвід, отриманий в результаті цих ранніх реалізацій і розгортання, привів до "другої хвилі" досліджень і роздумів про проблему маршрутизації в мережах з комутацією пакетів, що призвело до появи вектора шляху і DUAL.
Оскільки DUAL розроблений як розподілений алгоритм, найкраще описати його роботу в мережі. Для цієї мети використовуються малюнки 8 і 9. Щоб пояснити DUAL, в цьому прикладі буде простежуватися потік A, який вивчає три пункти призначення, а потім обробляються зміни в стані доступності для цих же пунктів призначення. У першому прикладі буде розглянуто випадок, коли є альтернативний шлях, але немає downstream neighbor, другий розгляне випадок, коли є альтернативний шлях і downstream neighbor.
На малюнку 8 вивчення D з точки зору A:
- A дізнається два шляхи до D:
- A не впізнає шлях через B, тому що B використовує A в якості свого наступника:
- A порівнює доступні шляхи і вибирає найкоротший шлях без петель:
- A перевіряє залишилися шляху, щоб визначити, чи є які-небудь з них downstream neighbors:
A знає це, тому що C оголошує маршрут до D зі своєю локальною метрикою, що дорівнює 3.
A зберігає локальну метрику C в своїй таблиці топології.
Отже, A знає локальну вартість в C і локальну вартість в A.
- 3 (вартість в C) = 3 (вартість в A), тому цей маршрут може бути петлею, отже, C не задовольняє умові здійсненності. C не позначене як downstream neighbors.
Downstream neighbors в DUAL називаються можливими наступниками. Припустимо, що канал [A, H] не працює. DUAL не покладається на періодичні оновлення, тому A не може просто чекати іншого поновлення з достовірною інформацією. Швидше A повинен активно слідувати альтернативним шляхом. Таким чином, це дифузний процес виявлення альтернативного шляху. Якщо канал [A, H] не працює, враховуючи тільки D:
- A перевіряє свою локальну таблицю на предмет можливих наступників (Downstream neighbors).
- Можливих наступників немає, тому A повинен знайти альтернативний шлях без петель до D (якщо він існує).
- A відправляє запит кожному сусідові, щоб визначити, чи є який-небудь альтернативний шлях без петель до D.
- В C:
- В B:
- A отримує ці відповіді:
На малюнку 9 пункт призначення (D) був переміщений з H на E. Це буде використовуватися у другому прикладі.
У цьому прикладі є можливий наступник (downstream neighbor).
Вивчення D з точки зору A:
- A дізнається два шляхи до D:
- A не впізнає ніякого шляху через B:
- A порівнює доступні шляхи і вибирає найкоротший шлях без петель:
- A перевіряє залишилися шляху, щоб визначити, чи є які-небудь з них downstream neighbors:
Якщо канал [A, C] не працює, просто розглядаючи A:
- A перевірить свою таблицю локальної топології на предмет можливого наступника.
- Можливий наступник існує через H.
- A перемикає свою локальну таблицю на H як кращий шлях.
- A відправляє оновлення своїх сусідів, відзначаючи, що його вартість досягнення D змінилася з 3 до 4.
Як ви можете бачити, обробка, коли існує можливий наступник, набагато швидше і простіше, ніж без нього. У мережах, де було розгорнуто протокол маршрутизації з використанням DUAL (зокрема, EIGRP), однією з основних цілей проектування буде обмеження обсягу будь-яких запитів, що генеруються в разі відсутності можливого наступника. Область запиту є основним визначальним фактором того, як швидко завершується подвійний алгоритм і, отже, як швидко сходиться мережу.
На малюнку 10 показаний базовий закінчений автомат DUAL.
Речі, що входять в route gets worse (погіршення маршруту), можуть являти собою:
- Відмова підключеного каналу або сусіда
- Отримання поновлення для маршруту з більш високою метрикою
- Отримання запиту від поточного наступника
- Отримання нового маршруту від сусіда
- Виявлено новий сусід, а також маршрути, за якими він може дістатися
- Отримання всіх запитів, відправлених сусідам, коли маршрут погіршується