Введение

На создание этого цикла статей меня вдохновило желание самому как можно более глубже изучить сети и протоколы, а так же поделиться с другими людьми материалом не доступным на русскоязычном сегменте интернета ( по крайней мере, когда я учился, то нигде не мог найти CCNP на русском языке, что и стало причиной изучения английского ).

Так же хочу сказать спасибо https://www.youtube.com/@JeremysITLab за разрешение на перевод и публикацию цикла его видеоуроков по материалам Cisco.

Цикл статей

В этой статье мы кратко пройдемся по некоторым темам из CCNA, если все это свежо в памяти, то можно смело пропустить, это некого рода повторение основ.

Список тем
  • OSI TCP/IP модели

  • Широковещательный домен, Домен коллизий

  • Сам L2 Forwarding

  • Таблицы MAC адресов

OSI TCP/IP

Модель OSI состоит из семи уровней, каждый из которых выполняет свою функцию, необходимую для успешной коммуникации между устройствами в сети.

Например, физический уровень описывает реальные физические компоненты, такие как кабели, коннекторы и радиочастоты, которые используются для передачи и приёма битов информации. А уровень приложений (с пятого по седьмой) обеспечивает взаимодействие между различными приложениями, например, между веб-браузером и сетью, с использованием таких протоколов, как HTTP. Модель OSI может быть полезна, поскольку она помогает понять, как работают сети.

Однако, возможно, вы знаете, что в современных сетях используется не модель OSI, а TCP/IP.

1.
1.

Модель TCP/IP, в отличие от модели OSI, объединяет три верхних уровня в один — уровень приложений. Два нижних уровня также объединены в один — уровень интерфейса. Однако для сетевых инженеров более наглядно будет разделить нижний уровень модели TCP/IP на два уровня, как и в модели OSI: канальный и физический.

Цель этих моделей — помочь понять, как устроены сети. Однако не стоит слишком строго придерживаться этих моделей. Например, попробуйте найти в Яндексе «ARP — протокол 2 или 3 уровня?» или «ICMP — протокол 3 или 4 уровня?». Некоторые протоколы могут находиться не на одном уровне модели. Кроме того, оверлейные технологии, позволяющие переходить с одного уровня модели на другой, могут нарушить её концепцию.

Каждый хост в сети имеет свой сетевой стек, состоящий из аппаратного и программного обеспечения. Этот стек позволяет обмениваться информацией внутри сети. Верхний уровень модели подготавливает данные для отправки через сеть, но двум устройствам, осуществляющим коммуникацию через сеть, нужно больше. Сначала к данным добавляется заголовок уровня 4 (L4), как вы знаете, это может быть TCP или UDP. Сочетание данных и заголовка L4 называется сегментом. Затем добавляется заголовок L3, содержащий информацию об IP-адресах источника и назначения для обеспечения маршрутизации. Теперь это можно назвать пакетом. После этого добавляется заголовок L2, который обеспечивает адресацию внутри LAN-сегмента сети. Процесс добавления заголовков к данным называется инкапсуляцией, а преобразование полученных другой стороной битов в данные — деинкапсуляцией.

Широковещательный домен, Домен коллизий

Ранние сетевые технологии, такие как Thinnet (10Base-2) и Thicknet (10BASE-5), позволяли подключать устройства к одному коаксиальному кабелю (шина), через который передавались данные между хостам. Когда два хоста начинали передавать данные одновременно, сигналы накладывались друг на друга, что приводило к коллизиям и невозможности корректной обработки данных. Для решения этой проблемы устройства использовали протокол CSMA/CD (обнаружение коллизий). Такая сеть называлась half-duplex, то есть только одно устройство могло отправлять данные в определённый момент времени. Все устройства, подключённые к одной шине, становились участниками одного домена коллизий.

Ethernet-хаб — это устройство, которое появилось раньше коммутатора, но выполняет похожие функции: оно подключает конечные хосты к локальной сети (LAN). По своим возможностям хаб напоминает обычный повторитель. Он отправляет полученный сигнал из одного порта на все остальные, не проверяя и не запоминая его. Это может привести к проблемам, так как если два устройства отправят данные одновременно, возникнет коллизия. Хаб не является устройством второго уровня (L2). Он не проверяет MAC-адреса в заголовках, чтобы решить, куда отправить сигнал. Он просто передаёт сигнал на все остальные порты. Как и в случае с коаксиальным кабелем, все устройства, подключённые к хабу, находятся в одном домене коллизий. Они могут общаться по сети в полудуплексном режиме и использовать CSMA/CD для обнаружения коллизий. В старых сетях хабы были обычным явлением. Сейчас их можно встретить, например, в офисах, где не хватило розеток для пользователей и телефонов. Вместо того чтобы модернизировать помещение, решили сэкономить и использовать хабы :)

Сейчас мы используем коммутаторы, которые гораздо "умнее" хабов, работающих на L2. Они отслеживают и понимают L2 информацию, такую как MAC-адреса, для определения того, куда подключены устройства, и отправляют данные только нужному устройству. Коммутаторы также помещают фрейм в буфер перед отправкой, что позволяет устройствам, подключенным к одному коммутатору, не входить в один домен коллизий, как это было с хабом. Если коммутатор получает два широковещательных сообщения одновременно, он не рассылает их одновременно по одному и тому же интерфейсу. Фреймы помещаются в буфер и поочередно рассылаются хостам. Это позволяет устройствам общаться в full-duplex, передавая и получая трафик в одно и то же время.

Теперь рассмотрим широковещательный домен. Это логическое деление сети, в котором все устройства находящиеся в одном L2 сегменте могут достичь друг друга. Как вы знаете, все устройства подключенные в один коммутатор - находятся в одном широковещательном домене, если одно устройство отправляет широковещательное сообщение, другие устройства в этом домене получат его. Для разделения широковещательных доменов используются VLAN. В противоположность коммутатору, каждый порт маршрутизатора является уникальным широковещательным доменом, так как они не пересылают L2 сообщения.

L2 Forwarding

Коммутаторы используют информацию из L2 заголовка для принятия решения о пересылке пакета. Хотя маршрутизаторы устройства L3, они так же осведомлены об L2 так как они должны проверять MAC адреса в заголовках пакетов, которые получают и использовать L2 для адресации фреймов, которые отправляют следующему устройству.

Это 4 основных типа сообщений используемых на L2:

Тип сообщения

Действие

Unicast(Known)

Пересылка

Unicast(Unknown)

Широковещательная рассылка

Broadcast

Широковещательная рассылка

Multicast

Широковещательная рассылка(По умолчанию)

Unicast(Known) фреймы передаются до определенного хоста назначения с указанным MAC адресом в заголовке L2 фрейма. Unicast(Unknown) так же как и Broadcast рассылаются всем хостам в одном широковещательном домене. Multicast используется для зарезервированных служебных MAC адресов некоторых протоколов, например STP.

2.
2.

Предположим R1 c MAC адресом aaaa.aaaa.aaaa отправляет фрейм до MAC адреса 1111.1111.1111 PC1, как только коммутатор SW1 получает такой фрейм - первым делом он добавляет в свою таблицу MAC адресов запись о том, что за портом G0/0 находится MAC адрес aaaa.aaaa.aaaa, далее так как у него отсутствует запись для 1111.1111.1111 - SW1 начинает Unknown unicast рассылку по всем своим портам, кроме G0/0 с MAC адресом 1111.1111.1111 в роли destination.

3. Unknown Unicast
3. Unknown Unicast

На картинке видно, что PC2 и PC3 отбрасывают фрейм, так как видят, что dst MAC адрес не принадлежит им самим, так же, что SW1 добавил запись в свою таблицу MAC адресов.

После получения PC1 сообщения, он отправляет ответное, подставляя в dst - aaaa.aaaa.aaaa, а в src - 1111.1111.1111. В первую очередь, как только SW1 получает этот фрейм - он динамически изучает MAC адрес PC1( 1111.1111.1111 ) из поля source в L2 фрейме и добавляет его в свою таблицу MAC адресов. Далее так как SW1 хранит запись о MAC адресе aaaa.aaaa.aaaa - он отсылает фрейм только в предназначенный для этого порт ( G0/0 ), такая рассылка называется Known Unicast.

4. Known Unicast
4. Known Unicast

В итоге разница между Known и Unknown Unicast рассылками в том, кому отправляется фрейм, в первом случае - только предназначенному для него хосту, а в случае с Unknown - на все порты в таком же VLAN, кроме порта откуда был получен фрейм, не смотря на то что в качестве MAC адреса указан не широковещательный адрес, рассылка все же широковещательная.

Теперь предположим, что PC2 отправляет широковещательное сообщение с широковещательным MAC адресом в качестве назначения. Первым делом, получая такой фрейм, коммутатор SW1 добавляет запись в таблицу MAC адресов, за портом G0/2 находится MAC адрес 2222.2222.2222. Далее такой фрейм будет отправлен во все порты в таком же VLAN, кроме порта откуда был получен.

5. Broadcast
5. Broadcast

А что с multicast адресами? Они как и broadcast по умолчанию рассылаются во все порты. Но их мы будем разбирать позже на курсе.

Таблицы MAC адресов

6.
6.

Как видно из картинки 6., в выводе команды "show mac address-table" на Catalyst 2960 присутствуют некие STATIC MAC адреса - что это такое?

Например, самый первый, 0100.0ccc.cccc - MAC адрес используется протоколами, такими как CDP, VTP, DTP. Так же вы можете заметить что в столбце "Ports" эта запись помечена как "CPU", это значит, что если коммутатор получит фрейм с таким MAC адресом назначения, он отправит его на свой процессор для дальнейшей обработки.

В общем все STATIC записи используются для аналогичных целей, резервирования MAC адресов под конкретные L2 протоколы. Как можно заметить, широковещательный адрес ffff.fff.ffff так же находится в таблице как STATIC, это значит что все широковещательные сообщения полученные коммутатором обязательно обрабатываются его процессором.

Динамически изученные MAC адреса не остаются в таблице MAC адресов на всегда, по умолчанию время жизни MAC адреса в таблице - 300 секунд (5 минут), после которого он будет очищен, если фреймы с этим MAC адресом в качестве src не были получены, каждый раз когда коммутатор получает фрейм, таймер возвращается назад на 300 секунд. Посмотреть текущее значение этого параметра можно с помощью команды "show mac address-table aging-time".

7.
7.

Обычно такого значения таймера достаточно, но вы так же можете задать его в ручную. Для этого существует команда "mac address-table aging-time".

8.
8.

Используя эту команду вы можете задать значение жизни MAC адреса в таблице в секундах. Если указать 0 - MAC адреса никогда не будут удалены из таблицы адресов. Так же можно изменить время жизни, только для конкретного VLAN, указав его в конце команды.

Так же интересно, что вы можете вообще отключить динамическое изучение MAС адресов коммутатором, команда "show mac address-table learning" покажет текущий статус изучения MAC адресов для каждого VLAN.

9.
9.

Как видно из картинки 9., изучение MAC адресов по умолчанию включено на всех VLAN.

Для того, чтобы отключить изучение MAC адресов на конкретном VLAN, можно использовать команду "no mac address-table learning vlan" перечисляя нужные вам VLAN.

10.
10.

Как видно из картинки после отключения изучения MAC адресов на VLAN 10,12,13,14 - статус вывода команды "show mac address-table learning" изменился. Возможно эта опция понадобится вам в случае, если кто-то начнет mac flood атаку, в таком варианте отключение изучение MAC адресов может оказаться хорошей идеей.

MAC адрес в таблицу так же можно поместить "руками" с помощью команды "mac address-table static aaaa.aaaa.aaaa vlan 1 interface f0/1" подставив туда нужный вам интерфейс, VLAN и MAC.

11.
11.

Другая опция доступная для коммутатора - "drop".

12.
12.

Что она делает? Теперь коммутатор будет отбрасывать весь траффик с этим MAC адресом. Результат введения двух предыдущих команд в таблице MAC адресов:

13.
13.

Так же вы можете очистить все или какой-то конкретный динамически изученный MAC адрес из таблицы с помощью команды "clear mac address-table dynamic"

14.
14.

В данном примере на картинке 14. мы очистили все динамически изученные MAC адреса, результатом чего стала пустая таблица. Указав в конце команды интерфейс, VLAN или конкретный MAC адрес - можно будет очистить только MAC адреса за конкретным интерфейсом, в конкретном VLAN или определенный MAC адрес соответственно.

Коммутатор располагает ограниченным количеством памяти, из-за этого таблица MAC адресов не может быть бесконечной, узнать максимально допустимое значение MAC адресов в таблице для коммутатора можно с помощью команды "show mac address-table count"

15.
15.

В данном примере максимально допустимое количество MAC адресов в таблице - 4061.

Комментарии (7)


  1. net_racoon
    06.06.2024 07:32
    +2

    Такие вещи лучше сразу на английском читать, тем более что это несложно. Зато не будет трудностей перевода.


    1. saprykinav Автор
      06.06.2024 07:32

      С этим согласен полностью, статья в первую очередь для меня самого, практика такого перевода улучшает сам английский и позволяет запомнить изучаемую информацию гораздо лучше. Ну и если опираться на мой опыт, то мне потребовалось где-то год изучать язык прежде, чем я смог без проблем понимать тех. литературу, так что это помощь тем, у кого такой возможности нет


  1. izogfif
    06.06.2024 07:32

    Если коммутатор получает два широковещательных сообщения одновременно, он не рассылает их одновременно по одному и тому же интерфейсу. Фреймы помещаются в буфер и поочередно рассылаются хостам. Это позволяет устройствам общаться в full-duplex, передавая и получая трафик в одно и то же время.

    Не понял, т.е. хаб и устройство, подключенное к нему, могут одновременно передавать и получать данные друг другу по одному и тому же проводу / кабелю / каналу связи / как-там-это-называется? Между ними разве не half duplex?


    1. saprykinav Автор
      06.06.2024 07:32

      Теоретически могут, именно поэтому между ними и half-duplex. В выделенной вами цитате речь идет уже про Коммутатор, это устройство L2 и у него таких проблем нет


      1. izogfif
        06.06.2024 07:32

        Т.е. коммутатор (это то же, что свитч / switch, верно?) и подключенное к нему устройство могут по одному проводу (что между ними) и отправлять, и принимать данные одновременно, работая в full duplex? Без коллизий?


        1. saprykinav Автор
          06.06.2024 07:32

          Да, это синонимы, switch английское название


          1. izogfif
            06.06.2024 07:32

            Да, это синонимы, switch английское название

            ОК, а что насчет второй части вопроса? Вот этой:

            Коммутатор и подключенное к нему устройство могут по одному проводу (что между ними) и отправлять, и принимать данные одновременно, работая в full duplex? Без коллизий?