02-rstp.md
1 # RSTP 2 3 Все, о чем мы говорили ранее в этой статье, относится к первой реализация протокола STP, которая была разработана в 1985 году Радией Перлман \(ее стихотворение использовано в качестве эпиграфа\). В 1990 году эта реализации была включена в стандарт IEEE 802.1D. Тогда время текло медленнее, и перестройка топологии STP, занимающая 30-50 секунд \(!!!\), всех устраивала. Но времена меняются, и через десять лет, в 2001 году, IEEE представляет новый стандарт **RSTP** \(он же 802.1w, он же Rapid Spanning Tree Protocol, он же Быстрый STP\). 4 5 Чтобы структурировать предыдущий материал и посмотреть различия между обычным STP \(802.1d\) и RSTP \(802.1w\), соберем таблицу с основными фактами: 6 7 <table> 8 <thead> 9 <tr> 10 <th style="text-align:left"><b>STP (802.1d)</b> 11 </th> 12 <th style="text-align:left"><b>RSTP (802.1w)</b> 13 </th> 14 </tr> 15 </thead> 16 <tbody> 17 <tr> 18 <td style="text-align:left"> 19 <p>В уже сложившейся топологии только корневой свич шлет BPDU,</p> 20 <p>остальные ретранслируют</p> 21 </td> 22 <td style="text-align:left">Все свичи шлют BPDU в соответствии с hello-таймером (2 секунды по умолчанию)</td> 23 </tr> 24 <tr> 25 <td style="text-align:left"><b>Состояния портов</b> 26 </td> 27 <td style="text-align:left"></td> 28 </tr> 29 <tr> 30 <td style="text-align:left"> 31 <ul> 32 <li>blocking (блокировка)</li> 33 <li>listening (прослушивание)</li> 34 <li>learning (обучение)</li> 35 <li>forwarding (перенаправление/пересылка)</li> 36 <li>disabled (отключен)</li> 37 </ul> 38 </td> 39 <td style="text-align:left"> 40 <ul> 41 <li>discarding (отбрасывание, заменяет disabled, blocking и listening)</li> 42 <li>learning</li> 43 <li>forwarding</li> 44 </ul> 45 </td> 46 </tr> 47 <tr> 48 <td style="text-align:left"><b>Роли портов</b> 49 </td> 50 <td style="text-align:left"></td> 51 </tr> 52 <tr> 53 <td style="text-align:left"> 54 <ul> 55 <li>root (корневой), участвует в пересылке данных, ведет к корневому свичу</li> 56 <li>designated (назначенный), тоже работает, ведет от корневого свича</li> 57 <li>non-designated (неназначенный), не участвует в пересылке данных</li> 58 </ul> 59 </td> 60 <td style="text-align:left"> 61 <ul> 62 <li>root (корневой), участвует в пересылке данных</li> 63 <li>designated (назначенный), тоже работает</li> 64 <li>alternate (дополнительный), не участвует в пересылке данных</li> 65 <li>backup (резервный), тоже не участвует</li> 66 </ul> 67 </td> 68 </tr> 69 <tr> 70 <td style="text-align:left"><b>Механизмы работы</b> 71 </td> 72 <td style="text-align:left"></td> 73 </tr> 74 <tr> 75 <td style="text-align:left"> 76 <p>Использует таймеры:</p> 77 <ul> 78 <li>Hello (2 секунды)</li> 79 <li>Max Age (20 секунд)</li> 80 <li>Forward delay timer (15 секунд)</li> 81 </ul> 82 </td> 83 <td style="text-align:left">Использует процесс Proposal and Agreement (предложение и соглашение)</td> 84 </tr> 85 <tr> 86 <td style="text-align:left"> 87 <p>Свич, обнаруживший изменение топологии, извещает корневой свич.</p> 88 <p>Тот, в свою очередь, требует от всех остальных очистить их записи</p> 89 <p>о текущей топологии в течение forward delay timer</p> 90 </td> 91 <td style="text-align:left">Обнаружение изменений в топологии влечет немедленную очистку записей</td> 92 </tr> 93 <tr> 94 <td style="text-align:left"> 95 <p>Если некорневой свич не получает hello-пакеты от корневого в течение Max Age,</p> 96 <p>он начинает новые выборы</p> 97 </td> 98 <td style="text-align:left">Начинает действовать, если не получает BPDU в течение 3 hello-интервалов</td> 99 </tr> 100 <tr> 101 <td style="text-align:left"> 102 <p>Последовательное прохождение порта через состояния:</p> 103 <ul> 104 <li>blocking (20 сек)</li> 105 <li>listening (15 сек)</li> 106 <li>learning (15 сек)</li> 107 <li>forwarding</li> 108 </ul> 109 </td> 110 <td style="text-align:left">Быстрый переход к forwarding для p2p и Edge-портов</td> 111 </tr> 112 </tbody> 113 </table> 114 115 Как мы видим, в RSTP остались такие роли портов, как корневой и назначенный, а роль заблокированного разделили на две новых роли: Alternate и Backup. Alternate — это резервный корневой порт, а backup — резервный назначенный порт. Как раз в этой концепции резервных портов и кроется одна из причин быстрого переключения в случае отказа. Это меняет поведение системы в целом: вместо реактивной \(которая начинает искать решение проблемы только после того, как она случилась\) система становится проактивной, заранее просчитывающей “пути отхода” еще до появления проблемы. Смысл простой: для того, чтобы в случае отказа основного переключится на резервный линк, RSTP не нужно заново просчитывать топологию, он просто переключится на запасной, заранее просчитанный. 116 117 Ранее, для того, чтобы убедиться, что порт может участвовать в передаче данных, требовались таймеры, т.е. свич пассивно ждал в течение означенного времени, слушая BPDU. Ключевой фичей RSTP стало введение концепции типов портов, основанных на режиме работы линка — full duplex или half duplex \(типы портов p2p или shared, соответственно\), а также понятия пограничный порт \(тип edge p2p\), для конечных устройств. Пограничные порты назначаются, как и раньше, командой spanning-tree portfast, и с ними все понятно — при включении провода сразу переходим к forwarding-состоянию и работаем. Shared-порты работают по старой схеме с прохождением через состояния BLK — LIS — LRN — FWD. А вот на p2p-портах RSTP использует процесс предложения и соглашения \(proposal and agreement\). Не вдаваясь в [подробности,](http://blog.ine.com/2009/09/07/rstp-and-fast-convergence/) его можно описать так: свич справедливо считает, что если линк работает в режиме полного дуплекса, и он не обозначен, как пограничный, значит, на нем только два устройства- он и другой свич. Вместо того, чтобы ждать входящих BPDU, он сам пытается связаться со свичом на том конце провода с помощью специальных proposal BPDU, в которых, конечно, есть информация о стоимости маршрута к корневому свичу. Второй свич сравнивает полученную информацию со своей текущей, и принимает решение, о чем извещает первый свич посредством agreement BPDU. Так как весь этот процесс теперь не привязан к таймерам, происходит он очень быстро, только подключили новый свич и он практически сразу вписался в общую топологию и приступил к работе \(можете сами оценить скорость переключения в сравнении с обычным STP на видео\). В Cisco-мире RSTP называется PVRST \(Per-Vlan Rapid Spanning Tree\). 118