Мы рассмотрим, как маршрутизатор обработает пакет в зависимости от того, classful- или classless-поведение маршрутизатора настроено, а также в зависимости от того, включено ли автоматическое суммирование маршрутов в EIGRP.
Вопрос возник при чтении курса CCNA.
Рассмотрим часть таблицы маршрутизации:
В ней есть статический (метка S) маршрут по умолчанию через интерфейс Serial0/0/0, а также по EIGRP (метка D) узнан маршрут в сеть 192.168.10.8/30 через непосредственно присоединённую сеть (метка С) 192.168.10.4/30 с выходным интерфейсом Serial0/0/1.
Особенность EIGRP, например, по сравнению с RIP, в том, что если на маршрутизаторе включена в работу EIGRP какая-то сеть (в нашем примере 192.168.10.0/24), то он добавляет в таблицу маршрутизации маршрут в classful-сеть, соответствующую добавленной сети, который помечен, как узнанный по EIGRP, т.е. меткой D, и который имеет выходной интерфейс Null0, т.е. все пакеты, которые пойдут по этому маршруту попадут в «чёрную дыру» и будут отброшены.
Этот маршрут в classful-сеть является суммирующим маршрутом для маршрутов в подсети (в нашем примере 192.168.10.4/30 и 192.168.10.8/30).
Он добавляется в таблицу, т.к. по умолчанию EIGRP автоматически суммирует маршруты (в конфигурации будет команда auto-summary).
Автоматическое суммирование маршрутов можно отключить командой:
(config-router)#no auto-summary
Вспомним, что classful-сеть — это сеть, маска которой определяется по первому октету ip-адреса в соответствии с правилами:
Т.е. никаких масок с длиной, отличной от 8, 16 и 24, быть не может, и маршрутизатор не поймёт в логике работы, что у сети 192.168.0.0 может быть маска 16 — только 24.
Логика просмотра таблицы маршрутизации зависит от того, какое поведение маршрутизатора реализуется — classful или classless (эти названия похожи на типы сетей, но никакой связи с ними нет).
Из примера ниже станет понятно, в чём разница в поведении.
Допустим, реализуется classful-поведение маршрутизатора (выполнена команда:
(config)#no ip classless
или используется старая версия IOS) и нет маршрута через интерфейс Null0, а все остальные представленные маршруты в таблице есть.
Допустим, на маршрутизатор приходит пакет на адрес 192.168.10.13.
Логика просмотра таблицы маршрутизации такова.
Сначала смотрятся маршруты 1-го уровня (это те, у которых маска меньше или равна маске соответствующей classful-сети).
В нашем случае таких два:
Из них выбирается тот, который больше всего совпадает с ip-адресом, это 192.168.10.0/24.
Дальше смотрится — это т.н. ultimate route или нет? (ultimate значит, что для маршрута указан выходной физический интерфейс. Первый из двух рассмотренных ultimate, а второй нет).
Если да, то по этому маршруту посылается пакет.
Если нет, то это значит, что маршрут является т.н. parent route и смотрятся его child routes — маршруты 2-го уровня (т.е. маршруты, у которых маска больше маски соответствующей classful-сети).
В нашем случае так и будет, и таких маршрутов два (предполагаем, что нет маршрута через Null0):
Из них выбирается тот, который подходит под ip-адрес пакета. Такого нет.
Тогда при classful-поведении маршрутизатора пакет отбрасывается.
При classless-поведении маршрутизатора до сего момента логика просмотра таблицы маршрутизации та же. Но если не найден подходящий child route на 2-м уровне, маршрутизатор возвращается к маршрутам 1-го уровня и ищет другой подходящий (обычно это суммирующий маршрут или шлюз по умолчанию).
В нашем случае маршрутизатор найдёт шлюз по умолчанию, который является ultimate-маршрутом и отправит по нему пакет:
Что же будет, если в таблице маршрутизации будет маршрут через интерфейс Null0, добавленный EIGRP?
Тогда таблица имеет вид:
Сначала будет найден parent route в 192.168.10.0/24, а в его child routes будет найден маршрут в 192.168.10.0/24 через Null0 как подходящий. Тут уже независимо от classful- или classless-поведения маршрутизатора, по этому маршруту в Null0 будет отправлен пакет, т.е. пакет будет отброшен.
Если же в EIGRP отключить автоматическое суммирование маршрутов командой:
(config-router)# no auto-summary
То суммирующий маршрут с выходным интерфейсом Null0 в таблицу маршрутизации добавлен не будет.
В нашем примере таблица маршрутизации примет вид:
Внимательный читатель заметит, что теперь у child routes нет маски в таблице. Дело в том, что для parent route 192.168.10.0 все child routes имеют одинаковую маску, поэтому она записывается один раз для parent route.
Тогда пакет на адрес 192.168.10.13 подойдёт под маршрут 1-го уровня 192.168.10.0/24. Хоть в таблице и отображается маска /30, для маршрутов 1-го уровня маска должна быть не меньше маски соответствующей classful-сети, т.е. сравниваться будет не маршрут с маской /30, а маршрут с маской /24.
Дальше у этого parent route будут просматриваться child routes и будет пакет доставлен или отброшен зависит от classless- или classful-поведения маршрутизатора, соответственно.
Мы рассмотрели учебный пример, как маршрутизатор просматривает таблицу маршрутизации в зависимости от classful- или classless-поведения, а также в зависимости от того, включено или нет автоматическое суммирование маршрутов в протоколе EIGRP — и показали, что в некоторых ситуациях от этих настроек зависит, будут ли пакеты доставлены получателю или отброшены.
Описанное поведение проверено в симуляторе GNS3.
Замечания, уточнения, добавления, вопросы — с благодарностью принимаются.
Вопрос возник при чтении курса CCNA.
Рассмотрим часть таблицы маршрутизации:
S 0.0.0.0/0 Serial0/0/0 192.168.10.0/24 is variably subnetted, 3 subnets, 2 masks D 192.168.10.0/24 Null0 C 192.168.10.4/30 Serial0/0/1 D 192.168.10.8/30 Serial0/0/1
В ней есть статический (метка S) маршрут по умолчанию через интерфейс Serial0/0/0, а также по EIGRP (метка D) узнан маршрут в сеть 192.168.10.8/30 через непосредственно присоединённую сеть (метка С) 192.168.10.4/30 с выходным интерфейсом Serial0/0/1.
Особенность EIGRP, например, по сравнению с RIP, в том, что если на маршрутизаторе включена в работу EIGRP какая-то сеть (в нашем примере 192.168.10.0/24), то он добавляет в таблицу маршрутизации маршрут в classful-сеть, соответствующую добавленной сети, который помечен, как узнанный по EIGRP, т.е. меткой D, и который имеет выходной интерфейс Null0, т.е. все пакеты, которые пойдут по этому маршруту попадут в «чёрную дыру» и будут отброшены.
Этот маршрут в classful-сеть является суммирующим маршрутом для маршрутов в подсети (в нашем примере 192.168.10.4/30 и 192.168.10.8/30).
Он добавляется в таблицу, т.к. по умолчанию EIGRP автоматически суммирует маршруты (в конфигурации будет команда auto-summary).
Автоматическое суммирование маршрутов можно отключить командой:
(config-router)#no auto-summary
Вспомним, что classful-сеть — это сеть, маска которой определяется по первому октету ip-адреса в соответствии с правилами:
Первый октет ip-адреса Маска сети 0-127 /8 = 255.0.0.0 128-191 /16 = 255.255.0.0 192-223 /24 = 255.255.255.0 224-239 multicast 240-255 зарезервированы
Т.е. никаких масок с длиной, отличной от 8, 16 и 24, быть не может, и маршрутизатор не поймёт в логике работы, что у сети 192.168.0.0 может быть маска 16 — только 24.
Логика просмотра таблицы маршрутизации зависит от того, какое поведение маршрутизатора реализуется — classful или classless (эти названия похожи на типы сетей, но никакой связи с ними нет).
Из примера ниже станет понятно, в чём разница в поведении.
Допустим, реализуется classful-поведение маршрутизатора (выполнена команда:
(config)#no ip classless
или используется старая версия IOS) и нет маршрута через интерфейс Null0, а все остальные представленные маршруты в таблице есть.
Допустим, на маршрутизатор приходит пакет на адрес 192.168.10.13.
Логика просмотра таблицы маршрутизации такова.
Сначала смотрятся маршруты 1-го уровня (это те, у которых маска меньше или равна маске соответствующей classful-сети).
В нашем случае таких два:
S 0.0.0.0/0 Serial0/0/0 192.168.10.0/24 is variably subnetted, 3 subnets, 2 masks
Из них выбирается тот, который больше всего совпадает с ip-адресом, это 192.168.10.0/24.
Дальше смотрится — это т.н. ultimate route или нет? (ultimate значит, что для маршрута указан выходной физический интерфейс. Первый из двух рассмотренных ultimate, а второй нет).
Если да, то по этому маршруту посылается пакет.
Если нет, то это значит, что маршрут является т.н. parent route и смотрятся его child routes — маршруты 2-го уровня (т.е. маршруты, у которых маска больше маски соответствующей classful-сети).
В нашем случае так и будет, и таких маршрутов два (предполагаем, что нет маршрута через Null0):
C 192.168.10.4/30 Serial0/0/1 D 192.168.10.8/30 Serial0/0/1
Из них выбирается тот, который подходит под ip-адрес пакета. Такого нет.
Тогда при classful-поведении маршрутизатора пакет отбрасывается.
При classless-поведении маршрутизатора до сего момента логика просмотра таблицы маршрутизации та же. Но если не найден подходящий child route на 2-м уровне, маршрутизатор возвращается к маршрутам 1-го уровня и ищет другой подходящий (обычно это суммирующий маршрут или шлюз по умолчанию).
В нашем случае маршрутизатор найдёт шлюз по умолчанию, который является ultimate-маршрутом и отправит по нему пакет:
S 0.0.0.0/0 Serial0/0/0 192.168.10.0/24 is variably subnetted, 3 subnets, 2 masks
Что же будет, если в таблице маршрутизации будет маршрут через интерфейс Null0, добавленный EIGRP?
Тогда таблица имеет вид:
S 0.0.0.0/0 Serial0/0/0 192.168.10.0/24 is variably subnetted, 3 subnets, 2 masks D 192.168.10.0/24 Null0 C 192.168.10.4/30 Serial0/0/1 D 192.168.10.8/30 Serial0/0/1
Сначала будет найден parent route в 192.168.10.0/24, а в его child routes будет найден маршрут в 192.168.10.0/24 через Null0 как подходящий. Тут уже независимо от classful- или classless-поведения маршрутизатора, по этому маршруту в Null0 будет отправлен пакет, т.е. пакет будет отброшен.
Если же в EIGRP отключить автоматическое суммирование маршрутов командой:
(config-router)# no auto-summary
То суммирующий маршрут с выходным интерфейсом Null0 в таблицу маршрутизации добавлен не будет.
В нашем примере таблица маршрутизации примет вид:
S 0.0.0.0/0 Serial0/0/0 192.168.10.0/30 is subnetted, 2 subnets C 192.168.10.4 Serial0/0/1 D 192.168.10.8 Serial0/0/1
Внимательный читатель заметит, что теперь у child routes нет маски в таблице. Дело в том, что для parent route 192.168.10.0 все child routes имеют одинаковую маску, поэтому она записывается один раз для parent route.
Тогда пакет на адрес 192.168.10.13 подойдёт под маршрут 1-го уровня 192.168.10.0/24. Хоть в таблице и отображается маска /30, для маршрутов 1-го уровня маска должна быть не меньше маски соответствующей classful-сети, т.е. сравниваться будет не маршрут с маской /30, а маршрут с маской /24.
Дальше у этого parent route будут просматриваться child routes и будет пакет доставлен или отброшен зависит от classless- или classful-поведения маршрутизатора, соответственно.
Мы рассмотрели учебный пример, как маршрутизатор просматривает таблицу маршрутизации в зависимости от classful- или classless-поведения, а также в зависимости от того, включено или нет автоматическое суммирование маршрутов в протоколе EIGRP — и показали, что в некоторых ситуациях от этих настроек зависит, будут ли пакеты доставлены получателю или отброшены.
Описанное поведение проверено в симуляторе GNS3.
Замечания, уточнения, добавления, вопросы — с благодарностью принимаются.