> For the complete documentation index, see [llms.txt](https://adavyshin.gitbook.io/networks/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://adavyshin.gitbook.io/networks/data-link-layer.md).

# Data-Link Layer

Кабельный журнал

<figure><img src="/files/mDHvljp4TBvNXkPTQlZN" alt=""><figcaption></figcaption></figure>

| Устройство - А | Интерфейс  - А | Устройство - B | Устр  |
| -------------- | -------------- | -------------- | ----- |
| SW01           | Gi0/0          | SW02           | Gi0/0 |
| SW01           | Gi0/1          | SW03           | Gi0/1 |
| SW02           | Gi0/1          | SW04           | Gi0/1 |
| SW03           | Gi0/0          | SW04           | Gi0/0 |
| SW01           | Gi0/2          | AGG-SW01       | Gi0/0 |
| SW01           | Gi0/3          | AGG-SW01       | Gi1/0 |
| SW02           | Gi0/2          | AGG-SW01       | Gi0/1 |
| SW02           | Gi0/3          | AGG-SW01       | Gi1/1 |
| SW03           | Gi0/2          | AGG-SW01       | Gi0/2 |
| SW03           | Gi0/3          | AGG-SW01       | Gi1/2 |
| SW04           | Gi0/2          | AGG-SW01       | Gi0/3 |
| SW04           | Gi0/3          | AGG-SW01       | Gi1/3 |

## Подготовка сетевых устройств

Все оборудование у нас с заводской конфигурацией. Давайте проведём первоначальную инициализацию устройств.

Первым действием зададим имена устройств с помощью команды `hostname <>`,  а также настрои удобный взаимодействие через консольный доступ, так как через интерфейс GNS3 мы попадаем на console-line наших устройств.&#x20;

Опция `exec-timeout <>` указывает через какой период неактивности нас будет выкидывать из console, если мы поставим "0", то нас никогда не будет отключать от консоли по бездействию. Следующий параметр это `logging syncronous` - отвечает за корректное отображение лог-сообщений в консоли, без него вывод лога будет накладываться на вводимые вами команды. Опция `international` позволяет корректно реагировать на вводимые символы кириллицы (русские буквы), правда всё равно отображаться они будут не корректно, без этой опции - железка может уходить в бездействие на минуту, пытаясь зарезолвить вводимые символы в качестве переменной для подключения по telnet.&#x20;

Обратите внимание, что при входе в CLI устройств, у вас будет обычный пользовательский режим, и для того видоизменять конфигурацию вам изначально нужно попасть в **привилегированный пользовательский режим** с помощью команды `enable`, а потом перейти в **режим конфигурации** командой `configure terminal`.

Также от себя рекомендация использовать команду `write memory` для сохранения после каждого выполненного этапа, чтобы не потерять результат.

🔧 Настройка коммутатора <kbd>SW01</kbd>:

```
hostname SW01
!
line console 0
  exec-timeout 0
  logging synchronous
  international
```

🔧 Настройка коммутатора <kbd>SW02</kbd>:

```
hostname SW02
!
line console 0
  exec-timeout 0
  logging synchronous
  international
```

🔧 Настройка коммутатора <kbd>SW03</kbd>:

```
hostname SW03
!
line console 0
  exec-timeout 0
  logging synchronous
  international
```

🔧 Настройка коммутатора <kbd>SW04</kbd>:

```
hostname SW04
!
line console 0
  exec-timeout 0
  logging synchronous
  international
```

🔧 Настройка коммутатора <kbd>AGG-SW01</kbd>:

```
hostname AGG-SW01
!
line console 0
  exec-timeout 0
  logging synchronous
  international
```

## Настройка агрегирования интерфейсов

📌 Задача: Настроить агрегированные интерфейсы между коммутаторами <kbd>AGG-SW01</kbd> и коммутаторами <kbd>SW01</kbd>, <kbd>SW02</kbd>, <kbd>SW03</kbd>, <kbd>SW04</kbd>. Между <kbd>AGG-SW01</kbd> и <kbd>SW01</kbd>, <kbd>SW02</kbd> настроить объединение интерфейсов по протоколу **LACP**. Между <kbd>AGG-SW01</kbd> и <kbd>SW03</kbd> - настроить по протоколу **PAGP**. Между коммутаторами <kbd>AGG-SW01</kbd> и <kbd>SW04</kbd> настроить **безусловную** агрегацию. Выбирать режим работы LACP/PAGP уже на своё усмотрение.

Для ускорения настройки, напоминаю, что можно пользоваться макросами, `interface range`, которые позволяют применять настройки одновременно на несколько интерфейсов.

Начнем со взаимодействия по LACP

🔧 Настройка коммутатора <kbd>SW01</kbd>:

```
configure terminal
!
interface range GigabitEthernet0/2-3
  channel-group 23 mode active
```

🔧 Настройка коммутатора <kbd>SW02</kbd>:

```
configure terminal
!
interface range GigabitEthernet0/2-3
  channel-group 23 mode active
```

🔧 Настройка коммутатора <kbd>AGG-SW01</kbd>:

```
configure terminal
!
interface range GigabitEthernet0/0, GigabitEthernet1/0
  channel-group 1 mode active
!
interface range GigabitEthernet0/1, GigabitEthernet1/1
  channel-group 2 mode active
```

Теперь перейдём к разделу  **Port Aggregation Protocol**, напомню что у **PAGP** режимы работы отличаются от LACP: на `desirable` и `auto`.&#x20;

🔧 Настройка коммутатора <kbd>SW03</kbd>:

```
configure terminal
!
interface range GigabitEthernet0/2-3
  channel-group 23 mode auto
```

🔧 Настройка со стороны коммутатора <kbd>AGG-SW01</kbd>:

```
configure terminal
!
interface range GigabitEthernet0/2, GigabitEthernet1/2
  channel-group 3 mode desirable
```

Ну и остаётся соединение между коммутатором <kbd>SW04</kbd> и центральным коммутатором <kbd>AGG-SW01</kbd> на основе безусловной (статической) агрегации.

🔧 Настройка коммутатора <kbd>SW04</kbd>:

```
configure terminal
!
interface range GigabitEthernet0/2-3
  channel-group 23 mode on
```

🔧 Настройка коммутатора <kbd>AGG-SW01</kbd>:

```
configure terminal
!
interface range GigabitEthernet0/3, GigabitEthernet1/3
  channel-group 4 mode on
```

Теперь давайте диагностировать, то что было сконфигурировано. Для базовой диагностики можно использовать команду `show etherchannel summary`, которая отображает состояние всех агрегированных интерфейсов.

В столбце **Ports** все интерфейсы-участники LAG должны быть с флагом P (bundled in port-channel), что свидетельствует о том, что всё корректно.

<figure><img src="/files/SglYsWPrDXb9mSelVlin" alt=""><figcaption></figcaption></figure>

## Настройка VLAN на коммутаторах

📌 Задача: Настроить VLAN на всех коммутаторах, чтобы траффик от компьютеров сотрудников из разных департаментов был изолирован друг от друга согласно политике безопасности компании.

Здесь предлагаю пойти по одному из двух путей: стандартному (ручная конфигурация) и специфичному (с использованием протокола VTP) .

### Статическое создание VLAN

🔧 Создание VLAN на коммутаторе <kbd>SW01</kbd>:

```
configure terminal
!
vtp mode transparent
!
vlan 110
  name IT-Department
!
vlan 120
  name HR-Department
!
vlan 130
  name Finance-Department
```

🔧 Создание VLAN на коммутаторе <kbd>SW02</kbd>:

```
configure terminal
!
vtp mode transparent
!
vlan 110
  name IT-Department
!
vlan 120
  name HR-Department
!
vlan 130
  name Finance-Department
```

🔧 Создание VLAN на коммутаторе <kbd>SW03</kbd>:

```
configure terminal
!
vtp mode transparent
!
vlan 110
  name IT-Department
!
vlan 120
  name HR-Department
!
vlan 130
  name Finance-Department
```

🔧 Создание VLAN на коммутаторе <kbd>SW04</kbd>:

```
configure terminal
!
vtp mode transparent
!
vlan 110
  name IT-Department
!
vlan 120
  name HR-Department
!
vlan 130
  name Finance-Department
```

🔧 Создание VLAN на коммутаторе <kbd>AGG-SW01</kbd>:

```
configure terminal
!
vtp mode transparent
!
vlan 110
  name IT-Department
!
vlan 120
  name HR-Department
!
vlan 130
  name Finance-Department
```

### (Опционально) Созданиe VLAN через VTP

VTP (VLAN Trunking Protocol) — это протокол Cisco, который автоматически распространяет информацию о VLAN между коммутаторами в одной VTP-домене. Он нужен для того, чтобы не создавать VLAN вручную на каждом коммутаторе. Нам достаточно создать необходимые VLAN только на коммутаторе <kbd>AGG-SW01</kbd> , тот в свою очередь распространит их на коммутаторы доступа

В рамках взаимодействия коммутаторов, возникает такой термин VTP-домен. Это некий идентификатор в системе свой/чужой при взаимодействии свитчей и соответственно быть одинаковым на всех легитимных коммутаторах.

Также коммутаторы разделяются на несколько ролей:

* **Сервер**, именно на них создаются и удаляются VLAN и сервер в свою очередь распространяет информацию по всему VTP-домену. CIsco-вские коммутаторы по умолчанию в режиме - "сервер".
* **Клиент**, получает от сервера сообщения с используемым VLAN, также не может создавать/удалять VLAN в топологии. VLAN хранятся в RAM и перезагрузке стираются, и коммутатору нужно получить их заново по VTP.
* **Transparent**, коммутаторы с этой ролью не участвуют в синхронизации VLAN, но при этом передают  VTP-кадры дальше. В режиме Transparent при создании VLAN, они добавляются в NVRAM при сохранении конфигурации, то есть они будут отображаться в выводе `show runnning-config`.

🔧 Настройка VTP на коммутаторе <kbd>SW01</kbd>:

```
configure terminal
!
vtp mode client
vtp domain SpecialistVTP
vtp version 3
vtp password SpecialistPass
```

🔧 Настройка VTP на коммутаторе <kbd>SW02</kbd>:

```
configure terminal
!
vtp mode client
vtp domain SpecialistVTP
vtp version 3
vtp password SpecialistPass
```

🔧 Настройка VTP на коммутаторе <kbd>SW03</kbd>:

```
configure terminal
!
vtp mode client
vtp domain SpecialistVTP
vtp version 3
vtp password SpecialistPass
```

🔧 Настройка VTP на коммутаторе <kbd>SW04</kbd>:

```
configure terminal
!
vtp mode client
vtp domain SpecialistVTP
vtp version 3
vtp password SpecialistPass
```

🔧 Настройка VTP на коммутаторе <kbd>AGG-SW01</kbd>:

```
configure terminal
!
vtp mode server
vtp domain SpecialistVTP
vtp version 3
vtp password SpecialistPass
!
end
```

Обратите внимание на команду `end` для выхода в привилегированный пользовательский режим, чтобы включить `vtp primary` режим

⌨️ Включение Primary режима на коммутаторе <kbd>AGG-SW01</kbd>

```
vtp primary
```

Также вы должны увидеть уведомление о том, что данное устройство станет primary и вам необходимо согласить нажав на `Enter`

> This system is becoming primary server for feature vlan> \
> No conflicting VTP3 devices found.> \
> Do you want to continue? \[confirm]

После данного шага можно переходить к созданию VLAN на основном коммутаторе AGG-SW01

🔧 Создание VLAN на коммутаторе <kbd>AGG-SW01</kbd>:

```
configure terminal
!
vtp mode transparent
!
vlan 110
  name IT-Department
!
vlan 120
  name HR-Department
!
vlan 130
  name Finance-Department
```

{% hint style="warning" %}
Но есть одно но, VLAN распределятся по нашим коммутаторам только тогда, когда у нас будут подняты trunk-интерфейсы в сторону коммутаторов доступа.
{% endhint %}

## Настройка интерфейсов

Теперь настало время настроить взаимодействие между коммутаторами и настроить клиентские порты на коммутаторах.

🔧 Настройка trunk-интерфейсов на коммутаторе <kbd>AGG-SW01</kbd>:

```
configure terminal
!
interface range Port-channel 1-4
  switchport trunk encapsulation dot1q
  switchport mode trunk
  spanning-tree link-type point-to-point
  exit
```

На клиентских портах в сторону абонентов мы будем настраивать `portfast edge` режим работы, чтобы в будущем исключить влияние этих интерфейсов на Spanning Tree дерево. Также для защиты от потенциальных петель на абонентских портах мы включим `BPDU Guard` режим, который отработает при получении `BPDU` и переведёт порт в состояние `err-disabled` от греха подальше.&#x20;

🔧 Настройка интерфейсов на коммутаторе <kbd>SW01</kbd>:

```
configure terminal
!
interface range GigabitEthernet0/0-1, Port-Channel 23
  switchport trunk encapsulation dot1q
  switchport mode trunk
  spanning-tree link-type point-to-point
!
interface GigabitEthernet1/1
  description { Comp-IT-10 }
  switchport mode access
  switchport access vlan 110
  spanning-tree portfast
  spanning-tree bpduguard enable
!
interface GigabitEthernet1/2
  description { Comp-HR-10 }
  switchport mode access
  switchport access vlan 120
  spanning-tree portfast
  spanning-tree bpduguard enable
!
interface GigabitEthernet1/3
  description { Comp-FIN-10 }
  switchport mode access
  switchport access vlan 130
  spanning-tree portfast
  spanning-tree bpduguard enable  
```

🔧 Настройка интерфейсов на коммутаторе <kbd>SW02</kbd>:

```
configure terminal
!
interface range GigabitEthernet0/0-1, Port-Channel 23
  switchport trunk encapsulation dot1q
  switchport mode trunk
  spanning-tree link-type point-to-point
!
interface GigabitEthernet1/1
  description { Comp-IT-20 }
  switchport mode access
  switchport access vlan 110
  spanning-tree portfast
  spanning-tree bpduguard enable
!
interface GigabitEthernet1/2
  description { Comp-HR-20 }
  switchport mode access
  switchport access vlan 120
  spanning-tree portfast
  spanning-tree bpduguard enable 
```

🔧 Настройка интерфейсов на коммутаторе <kbd>SW03</kbd>:

```
configure terminal
!
interface range GigabitEthernet0/0-1, Port-Channel 23
  switchport trunk encapsulation dot1q
  switchport mode trunk
  spanning-tree link-type point-to-point
!
interface GigabitEthernet1/1
  description { Comp-IT-30 }
  switchport mode access
  switchport access vlan 110
  spanning-tree portfast
  spanning-tree bpduguard enable
!
interface GigabitEthernet1/2
  description { Comp-HR-30 }
  switchport mode access
  switchport access vlan 120
  spanning-tree portfast
  spanning-tree bpduguard enable 
```

🔧 Настройка интерфейсов на коммутаторе <kbd>SW04</kbd>:

```
configure terminal
!
interface range GigabitEthernet0/0-1, Port-Channel 23
  switchport trunk encapsulation dot1q
  switchport mode trunk
  spanning-tree link-type point-to-point
!
interface GigabitEthernet1/1
  description { Comp-IT-40 }
  switchport mode access
  switchport access vlan 110
  spanning-tree portfast
  spanning-tree bpduguard enable
!
interface GigabitEthernet1/2
  description { Comp-HR-40 }
  switchport mode access
  switchport access vlan 120
  spanning-tree portfast
  spanning-tree bpduguard enable 
!
interface GigabitEthernet1/3
  description { Comp-FIN-40 }
  switchport mode access
  switchport access vlan 130
  spanning-tree portfast
  spanning-tree bpduguard enable  
```

## Настройка защиты от петель на основе MSTP&#x20;

**MSTP** (Multiple Spanning Tree Protocol) — это современная версия протокола Spanning Tree, описанная в стандарте **`IEEE 802.1s`**.\
Он решает главную проблему STP/RSTP — неэффективное использование каналов при наличии нескольких VLAN. Оптимизация достигается путём группирования нескольких **STP-per-VLAN Instance**., если логическая топология у этих instance одинаковая.&#x20;

📌 Задача: Настроить протокол остовного дерева MST на коммутаторах, с условием, что свитч AGG-SW01 будет Root Bridge в нашей топологии.&#x20;

При настройке MSTP, нам нужно поменять режим работы Spanning-Tree протокола на MSTP, а далее перейти к конфигурации MST, где на каждом коммутаторе необходимо создать имя процесса, в нашем случае мы возьмём "`specialist`", далее номер ревизии и объявление `instance`. Так как клиенты во VLAN 110 и VLAN 120 повторяют друг друга с точки зрения топологии, то объединим оба VLAN в один instance для оптимизации.

{% hint style="info" %}
Остовное дерево (Spanning Tree) - это термин из теории графов, который означает подграф графа (), который содержит все вершины исходного графа, но не содержит циклов и имеет минимально возможное количество рёбер
{% endhint %}

🔧 Настройка MSTP на коммутаторе <kbd>SW01</kbd>:

```
configure terminal
!
spanning-tree mode mst
!
spanning-tree mst configuration
name specialist
revision 1
instance 12 vlan 110
instance 12 vlan 120
instance 30 vlan 130
exit
```

🔧 Настройка MSTP на коммутаторе <kbd>SW02</kbd>:

```
configure terminal
!
spanning-tree mode mst
!
spanning-tree mst configuration
name specialist
revision 1
instance 12 vlan 110
instance 12 vlan 120
instance 30 vlan 130
exit
```

🔧 Настройка MSTP на коммутаторе <kbd>SW03</kbd>:

```
configure terminal
!
spanning-tree mode mst
!
spanning-tree mst configuration
name specialist
revision 1
instance 12 vlan 110
instance 12 vlan 120
instance 30 vlan 130
exit
```

🔧 Настройка MSTP на коммутаторе <kbd>SW04</kbd>:

```
configure terminal
!
spanning-tree mode mst
!
spanning-tree mst configuration
name specialist
revision 1
instance 12 vlan 110
instance 12 vlan 120
instance 30 vlan 130
exit
```

🔧 Настройка MSTP на коммутаторе <kbd>AGG-SW01</kbd>:

```
configure terminal
!
spanning-tree mode mst
!
spanning-tree mst configuration
name specialist
revision 1
instance 12 vlan 110
instance 12 vlan 120
instance 30 vlan 130
exit

spanning-tree mst 0 priority 4096
spanning-tree mst 12 priority 4096
spanning-tree mst 30 priority 4096
```

В MSTP есть несколько типов интерфейсов:

* Edge - порт, исключённый из расчёта топологии Spanning Tree, его изменяя состояния не влияет на пересчёт топологии и порты в сторону клиентских компьютеров должны быть настроены как Edge.
* Network - строгий тип порта trunk-линков между коммутаторами. Он гарантирует правильную обработку BPDU и защищает сеть от ошибок конфигурации.
* Shared - режим, включающийся автоматически, если интерфейс работает в режиме `half-duplex`.
* P2P - автоматически согласующийся тип порта, и представляет из себя соединение между двумя коммутаторами

А теперь давайте проверим, что топология у нас корректная

⌨️ Диагностика `Spanning Tree` на коммутаторе <kbd>AGG-SW01</kbd>

```
show spanning-tree summary
```

```
show spanning-tree mst 12
```

<figure><img src="/files/Z9uTLVu5U53o6Soco5M0" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/w3AluJ5w6ubTK1M5DTme" alt=""><figcaption></figcaption></figure>

⌨️ Диагностика `Spanning Tree` на коммутаторе <kbd>SW02</kbd>

```
show spanning-tree mst 12
```

<figure><img src="/files/9DwFQGASgreVgpi6RiH0" alt=""><figcaption></figcaption></figure>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://adavyshin.gitbook.io/networks/data-link-layer.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
