Это вторая часть подробного руководства по протоколу IS-IS для тех, кто готовится к сертификационным экзаменам Juniper JNCIS-SP и JNCIS-ENT, а также для всех, кто хочет изучить эту замечательную технологию. Если не читали первую часть — остановитесь! Сначала прочтите её, а затем возвращайтесь.
В первой части были рассмотрены основы IS-IS: что такое уровень, что такое LSP, и как развернуть базовую конфигурацию.
Теперь углубимся в изучение протокола. В этой статье рассматриваются соседства IS-IS, отправляемые сообщения и структура LSP.
Используемая в данном уроке топология:

СОСЕДСТВА IS-IS
Подобно тому, как в OSPF существуют соседи (neighbors), в IS-IS есть соседства (adjacencies).
Проверить это можно следующим образом:
root@R1> show isis adjacency
Interface System L State Hold (secs) SNPA
ge-0/0/0.0 R2 2 Up 25
ge-0/0/1.0 R6 2 Up 26
Протокол IS-IS отображает имя хоста подключенного устройства.
Детальная версия команды показывает обширную информацию — часть из неё станет понятной сейчас, остальная — после изучения всей серии статей.
root@R1> show isis adjacency R2 detail
R2
Interface: ge-0/0/0.0, Level: 2, State: Up, Expires in 23 secs
Priority: 0, Up/Down transitions: 1, Last transition: 00:01:05 ago
Circuit type: 2, Speaks: IP, IPv6
Topologies: Unicast
Restart capable: Yes, Adjacency advertisement: Advertise
IP addresses: 10.1.2.2
IPv6 addresses: fe80::5200:ff:fe0e:2
Использование параметра extensive
покажет журналы состояний соседства.
В отличие от OSPF, протокол IS-IS переходит в полное соседство сразу после обмена hello-сообщениями, а НЕ после обмена Link-State PDU. Это означает, что если оба маршрутизатора видят друг друга в hello-сообщениях, соседство установлено.
Существует шесть этапов соседства, но важны лишь состояния Initialising, Up и Down:
- New
- One-Way (длится долю секунды)
- Initialising (может наблюдаться кратковременно)
- Up
- Down (при несоответствии области, истечении времени удержания или ошибке аутентификации)
- Reject (также при несоответствии аутентификации — циклично переключается между Down и Reject)
Соседства поддерживаются регулярными hello-сообщениями.
Различные производители используют разные интервалы hello и hold timer но это не критично, поскольку при расхождении маршрутизаторы не делают из этого проблемы, как в OSPF.
Вместо этого они просто договариваются использовать меньшее значение.
На интерфейсах точка-точка Juniper отправляет hello-сообщения каждые 9 секунд с hold timer 27 секунд. Для LAN-интерфейсов это изменяется на 3 и 9 секунд соответственно. В IS-IS существует всего два типа интерфейсов — намного проще, чем в OSPF.
Что должно совпадать для установления соседства? Очень мало. К этому вопросу вернёмся позже, поскольку сначала необходимо больше узнать об областях и уровнях. MTU должен совпадать на обоих концах, но у IS-IS есть изящный способ проверки MTU.
КАК ВЫГЛЯДИТ LSP И ЧТО ТАКОЕ TLV?
Из первой части известно, что LSP означает Link-State PDU. LSP подобны элементам головоломки, которые можно собрать для создания топологической карты сети.
Каждый маршрутизатор генерирует собственный LSP, описывающий его IP-адреса и подключения. Этот LSP распространяется по всей сети, чтобы каждый маршрутизатор имел все LSP — все элементы головоломки — для построения полной топологии.
LSP содержат полезную информацию: область маршрутизатора, подключенные маршрутизаторы, IP-адреса интерфейсов и метрики (стоимость) достижения.
Рассмотрим основные моменты LSP. В Junos база данных IS-IS просматривается командой show isis database
. Эта команда отображает все маршрутизаторы в сети. В выводе ниже видно десять маршрутизаторов — и в отличие от OSPF, они перечислены по именам!
root@R1> show isis database
IS-IS level 1 link-state database:
0 LSPs
IS-IS level 2 link-state database:
LSP ID Sequence Checksum Lifetime Attributes
R1.00-00 0x31 0x8dd8 1162 L1 L2
R2.00-00 0x32 0x3c15 477 L1 L2
R3.00-00 0x31 0xc663 814 L1 L2
R4.00-00 0x30 0xeb1f 660 L1 L2
R5.00-00 0x2f 0xe909 514 L1 L2
R6.00-00 0x2d 0x7990 757 L1 L2
R7.00-00 0x2e 0xa032 920 L1 L2
R8.00-00 0x2e 0x4f5b 737 L1 L2
R9.00-00 0x2e 0xbec5 769 L1 L2
R10.00-00 0x30 0xe77a 1011 L1 L2
10 LSPs
Для просмотра Link-State PDU конкретного маршрутизатора используется версия команды с параметром detail
или extensive
вместе с именем маршрутизатора. Параметр extensive
показывает всё, а detail
— соседей, IP-адреса и метрики, что обычно наиболее интересно.
LSA маршрутизатора R1 выглядит следующим образом:
root@R1> show isis database R1.00 detail
IS-IS level 1 link-state database:
IS-IS level 2 link-state database:
R1.00-00 Sequence: 0x30, Checksum: 0x8fd7, Lifetime: 579 secs
IS neighbor: R2.00 Metric: 100
IS neighbor: R6.00 Metric: 100
IP prefix: 10.1.2.0/24 Metric: 100 Internal Up
IP prefix: 10.1.6.0/24 Metric: 100 Internal Up
IP prefix: 10.1.101.0/24 Metric: 100 Internal Up
IP prefix: 192.168.1.1/32 Metric: 0 Internal Up
V6 prefix: 2001:db8::1/128 Metric: 0 Internal Up
Этот вывод исключительно читаем и понятен.
Видны две базы данных — уровня 1 и уровня 2. Это похоже на пограничный маршрутизатор областей OSPF с двумя топологиями. Пустая база данных уровня 1 означает, что маршрутизатор работает только на уровне 2.
Далее отображается «R1.00-00». Пока не обращайте внимания на четыре нуля в имени — это будет объяснено позже. Важно содержимое под ним. Показаны два соседа R1 (R2 и R6), а также IPv4 и IPv6 префиксы, настроенные на R1, с соответствующими метриками.
По сравнению с крайне сложной базой данных OSPF с четырьмя типами связей это выглядит чисто и красиво.
ЧЕТЫРЕ ТИПА СООБЩЕНИЙ В IS-IS
При изучении OSPF значительное время тратится на изучение заголовков OSPF, сообщений OSPF и множества различных типов Link-State Advertisement.
IS-IS намного проще.
В IS-IS существует всего четыре типа сообщений:
- Hello-сообщения
- LSP-сообщения
- Complete Sequence Number PDU — полный список всех известных маршрутизатору LSP
- Partial Sequence Number PDU — список всех отсутствующих у маршрутизатора LSP.
Довольно просто, правда?
Технически это неточность. Существуют различные версии этих сообщений для уровня 1 и уровня 2, иногда разные версии для различных типов интерфейсов — но все они идентичны, кроме принадлежности к разным уровням или интерфейсам. Они настолько похожи, что их не нужно считать «разными». Понимание этих четырёх сообщений означает понимание IS-IS.
СООБЩЕНИЯ IS-IS БОЛЕЕ ГИБКИЕ, ЧЕМ СООБЩЕНИЯ OSPF
При изучении OSPF выяснялось, что LSA OSPF имеют строгий формат. Они всегда выглядят одинаково, и если маршрутизатор получает что-то отличное, он отклонит LSA и может разорвать соседство. Это изначально затрудняло расширение OSPF дополнительной функциональностью.
Напротив, сообщения IS-IS значительно более гибкие, чем LSA OSPF.
Причина в том, что сообщения IS-IS довольно гибкие — информация в LSP или любом другом сообщении не должна быть в определённом порядке, и информация даже не обязательно должна пониматься принимающим маршрутизатором!
Вместо этого есть базовый короткий заголовок, который всегда одинаков, за которым следуют различные фрагменты информации в любом порядке.
Эти блоки данных используют формат TLV — Type Length Value:
- Type — тип передаваемой пакета (просто число — каждый элемент информации имеет связанный номер)
- Length — общая длина пакета
- Value — собственно данные
Теперь рассмотрим Link-State PDU.
ЗАГОЛОВОК СООБЩЕНИЯ IS-IS
Каждое сообщение начинается с заголовка IS-IS.

Другими словами, протокол IS-IS работает на уровне 2, а не на уровне 3.
Некоторые утверждают, что это делает IS-IS более безопасным, чем OSPF, поскольку нельзя удалённо флудить другой маршрутизатор сообщениями IS-IS. Необходимо быть напрямую подключенным к устройству для отправки ему сообщений IS-IS.
Теперь рассмотрим основное содержимое.
ЗАХВАТ ПАКЕТА LINK-STATE PDU
Прежде чем показать захват пакета LSP, покажу конфигурацию loopback-интерфейса R1. Важно, что ISO-адрес начинается с 49.0001 — область, в которой находится маршрутизатор (к этому вернёмся), а 0000.0000.0001 — уникальный «system ID» маршрутизатора. ISO-адреса маршрутизаторов также заканчиваются на 00:
root@R1> show configuration interfaces lo0
unit 0 {
family inet {
address 192.168.1.1/32;
}
family iso {
address 49.0001.0000.0000.0001.00;
}
family inet6 {
address 2001:db8::1/128;
}
}
Начнём с заголовка LSP. Каждое сообщение имеет собственный небольшой заголовок дополнительно к «основному» заголовку IS-IS.

Он состоит из контрольных сумм и порядковых номеров, а также LSP-ID, который является system ID, настроенным на loopback-интерфейсе! Последнее число в LSP-ID обычно 00. Если это что-то другое, значит LSP был фрагментирован из-за превышения размера одного PDU.
Порядковый номер увеличивается на 1 каждый раз при изменении LSP или повторном объявлении из-за истечения времени жизни.
После короткого заголовка LSP следует поток информации — но не пугайтесь! Внимательно прочтите каждую строку, и увидите, что многое вполне понятно.

Каждая из них — TLV. Некоторые могут иметь странные названия, но многие сразу понятны. Например, заметили TLV Hostname? Откроем его:

Всё просто! TLV Hostname имеет тип 137 и длину два байта, но важно, что hostname — R1. И эта TLV может появиться в любом месте пакета. Порядок не важен.
Открыв TLV «Protocols supported», увидим, что маршрутизатор поддерживает IPv4 и IPv6. Больше не нужно запускать дополнительный процесс OSPF только для работы IPv6! IS-IS просто это делает.
Когда пакет генерировался, у R1 было соседство IS-IS только с R2. В обновлённой версии Link-State PDU R1 упоминается подключение к двум маршрутизаторам (помните, что IS-IS называет маршрутизатор «промежуточной системой»):

«IS reachability» означает «Могу достичь эти маршрутизаторы». Слово «extended» интересно — к этому вернёмся при обсуждении метрик.
Это очень легко читать по сравнению с OSPF. TLV перечисляет соседей по их system ID, но поскольку каждый маршрутизатор также рекламирует своё имя хоста, Junos может собрать всё воедино и просто показать имена соседей. Другие производители, как правило, делают то же самое.
«Extended IP reachability» очень похоже — это просто список IP-адресов, настроенных на маршрутизаторе, и их стоимость. Снимок экрана показывает, что R1 декларирует четыре префикса. Открыв префикс 10.1.2.0/24, видим детали: метрика, длина префикса, сам префикс — всё ожидаемое.

«Distribution: Up» означает, что при анонсе в уровень 1 не будет повторно анонситься обратно в уровень 2. Так избегаются петли!
Это довольно легко читать по сравнению с просмотром LSA OSPF. Никакой неясной терминологии, странностей, сложностей с transit/stub/virtual/point-to-point для запоминания. LSP IS-IS просто излагает всё в читаемом формате.
HELLO-СООБЩЕНИЯ
Как и OSPF, IS-IS отправляет Hello-сообщения. Эти сообщения используются для первоначального обнаружения соседей и поддержания соседства после установления.
В Junos на интерфейсах p2p, Hello-сообщения IS-IS отправляются на multicast MAC-адрес каждые 9 секунд по умолчанию. Другие производители могут делать это по-разному.
Интересный факт: эти сообщения также называются IIH или IS-IS Hello.
Hello-сообщения имеют собственный уникальный заголовок, немного отличающийся от заголовка LSP. Помимо уже виденного System ID, заголовок содержит Holding Time (что OSPF называет dead interval) — время ожидания перед объявлением соседства мёртвым. Здесь это 27 секунд — трижды по девять.
В этом конкретном hello видно, что system ID указывает на отправителя — R2. Видите ли эти элементы на снимке экрана? А также, что это hello-сообщение «Level 2 only»?

Существует три вида Hello: Level 1 LAN, Level 2 LAN и точка-точка. Опять же, технически больше сообщений, чем в OSPF, но только из-за разных видов для уровня 1 и уровня 2. Все три практически идентичны.
Интересно, что если связь точка-точка, одно Hello-сообщение может представлять и уровень 1, и уровень 2! Они используют специальный тип «уровень 3» для обозначения обоих уровней. Не путайтесь, если увидите, что связь в уровне 3. Нет волшебной супер-магистрали, доступной только тайным старейшинам интернета.
Hello-сообщение содержит TLV, уже виденные, например «Protocols Supported» TLV, показывающую поддержку IP маршрутизатором, и IP Interface Address TLV.
Есть также две новые TLV.
Во-первых, TLV «Point-to-point adjacency state», упоминающая R1 по system ID. Так R2 показывает, что нашёл R1. Также видно, что статус соседства в режиме «Initializing».
Во-вторых, Area Address TLV. Скоро поговорим об областях. Пока видно, что область действительно 49.0001, как настроили.
КАК IS-IS ОБНАРУЖИВАЕТ НЕСООТВЕТСТВИЕ MTU?
В Hello-сообщении также можно заметить множество padding TLV.
Как и в OSPF, MTU должен совпадать в IS-IS. Однако вместо явного объявления MTU, IS-IS дополняет Hello-сообщение до размера MTU.
Если принимающий маршрутизатор имеет меньший MTU, он не сможет принять Hello-сообщение.
IS-IS требует минимального MTU 1492, и Hello дополняется соответственно. Нет необходимости дополнять другие сообщения, поскольку если маршрутизатор не может принять Hello, соседство не сформируется.
Изящный трюк! Это предотвращает неправильное сообщение маршрутизаторами своего MTU. Вместо простого доверия числу маршрутизатор тестирует MTU на проводе.
COMPLETE SEQUENCE NUMBER PDU (CSNP)
Когда два маршрутизатора — промежуточные системы! — становятся соседями — устанавливают соседство! — они обмениваются знаниями о сети. Они МОГЛИ бы сделать это, отправляя все известные LSP друг другу, но это было бы расточительно, если бы выяснилось, что маршрутизатор знает большинство или все LSP.
Поэтому они не отправляют полное содержимое базы данных IS-IS. Вместо этого отправляют сводку в сообщении CSNP — Complete Sequence Number PDU.
Это похоже на пакеты Database Description OSPF — буквально список всех известных маршрутизатору LSP с их порядковыми номерами.
Если принимающий маршрутизатор видит отсутствующий LSP, он может запросить его, отправив Partial Sequence Number PDU (PSNP). Или, если у него есть LSP, отсутствующий у соседа, он может его отправить ему. Аналогично, если порядковый номер в CSNP отличается от версии маршрутизатора, он может запросить или отправить последнюю версию соответственно.
Порядковый номер на этом снимке не показан, но его можно увидеть, щёлкнув любую из стрелок раскрытия. По Source-ID видно, что R1 отправил это CSNP-сообщение, содержащее все десять маршрутизаторов топологии.

Думайте о CSNP как об индексе или содержании книги.
PARTIAL SEQUENCE NUMBER PDU (PSNP)
После обмена CSNP маршрутизаторы проверяют отсутствующие в собственных базах данных LSP. Они сравнивают собственный список известных LSP с полученным от соседа CSNP. Если маршрутизатор видит отсутствующий LSP или более новую версию у соседа, он запрашивает его через PSNP — P означает Partial.
НА ЭТОМ ПОКА ВСЁ!