14

Некоторое время назад я читал о сетевом оборудовании и натолкнулся на объяснение того, как работают сетевые коммутаторы - в основном он сказал, что коммутатор хранит внутреннюю базу данных о том, какой MAC-адрес подключен к каждому порту, и когда он получает пакет, он будет найдите MAC-адрес назначения в его базе данных и перенаправьте пакет на правильный порт.

Это заставило меня задуматься - что произойдет, если у вас есть коммутаторы, подключенные к коммутаторам, например:

Computer A
    |
 Switch 1
    |
 Switch 2
    |
Computer B

Часть моей домашней сети настроена следующим образом, поэтому она все равно работает. Но если Компьютер A хочет отправить пакет на Компьютер B, как Коммутатор 1 узнает, как переслать пакет на Коммутатор 2? Поскольку коммутатор 1 не подключен напрямую к компьютеру B, как он может иметь MAC-адрес компьютера B в своей базе данных, если коммутатор 2 не предоставляет коммутатору 1 эту информацию?

2 ответа2

23

Если коммутатор 1 не знает, какой порт фрейма (не пакет!) предназначен для перехода, он затопит все порты (кроме порта, с которого произошел фрейм). Один из этих портов будет подключен к коммутатору 2, что означает, что коммутатор 2 получает кадр.

Если Коммутатор 2 не знает, к какому порту должен быть направлен фрейм, он затопит все порты (кроме порта, с которого произошел фрейм). Один из этих портов будет подключен к компьютеру B.

Таким образом, компьютер B в конечном итоге получает кадр, а все остальные устройства игнорируют его.

Теперь вы можете соединить точки. Когда компьютер B отвечает, коммутатор 2 узнает, что кадры, предназначенные для компьютера A, идут в порт, к которому подключен коммутатор 1, а коммутатор 1 узнает, что кадры, предназначенные для компьютера B, идут в порт, к которому подключен коммутатор 2.

6

Физический порт на коммутаторе считается уровнем 1 OSI. Все MAC-адреса, которые поступают в этот конкретный порт, представляют физические адреса сетевых устройств (уровень 2 OSI). На каждом активном порту может быть 0, 1 или более MAC-адресов (или CAM, или любой другой производитель коммутатора, который их называет). На самом деле, коммутатор не имеет ни малейшего представления, какой тип устройства подключен без дополнительной информации (администратор или какой-то специально разработанный протокол сообщает больше).

Таким образом, подключив коммутатор к другому коммутатору, все MAC-адреса, известные одному коммутатору, можно реплицировать на другой коммутатор. Если это фиктивный коммутатор, то все MAC-адреса вносят вклад в одну и ту же безымянную локальную сеть. Если это лучше, он может настроить несколько виртуальных локальных сетей (VLAN), и каждая VLAN имеет свой собственный набор MAC-адресов. Они могут повторяться в более чем одной VLAN.

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

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

Иногда, из-за ошибки сети или хакерской атаки в сети, некоторые устройства могут генерировать много объявлений MAC. Если число объявленных MAC-адресов слишком велико для запоминания коммутатором, он может решить забыть об оптимальной доставке пакетов. Если вы не уверены, на каком порту находится MAC-адрес, пакет может быть передан на все порты как широковещательный (атака с именем arp-spoofing прошла успешно).

Если администратор знает о потенциальных рисках, он может установить ограничение на количество возможных MAC-адресов на каждом порту. Если известно, что через порт подключен только один компьютер за раз, то его можно настроить как "у нас может быть только один mac" (тип порта на вашем эскизе от компьютера A до коммутатора 1). Если он не известен, или к порту подключен другой коммутатор, ограничение может быть разумно увеличено или даже оставлено как неограниченное (в среднем для коммутатора неограниченное количество фактически составляет несколько тысяч).

Надеюсь, поможет.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .