Рассмотрим стандартный сетевой коммутатор GigE. Для того, чтобы выполнить коммутацию, предположительно, ему необходимо поддерживать карту MAC-адресов всех вещей, которые существуют в сети, к его (коммутатора) номерам портов.
- Как он ведет такую карту?
- Какие протоколы используются?
- Если я изменю топологию одной части сети, будет ли уведомлена вся сеть или все будет обнаружено «лениво» (т. е. по первой необходимости)?
решение1
Коммутатор изучает сопоставление MAC-порта, просматривая исходный MAC-адрес каждого входящего пакета. Таким образом, коммутатор может постепенно строить таблицу MAC-адресов.
Когда ему нужно переслать пакет, он смотрит на MAC-адрес назначения и пересылает его на соответствующий порт в соответствии с таблицей MAC. Если он не нашел ни одной записи, он отправит пакет на все порты (кроме порта отправки).
Чтобы оставить в таблице MAC-адресов только действительные записи, коммутатор очищает неиспользуемые записи по истечении определенного времени ожидания.
При изменении топологии сети коммутатор может узнать новое местоположение mac-адреса, когда получит новый пакет. Он перезапишет старое сопоставление этого mac-адреса.
Для получения более подробной информации см.эта ссылка.
решение2
Это называется таблицей MAC-адресов и содержит port
, MAC address
и timestamp
. Если вы измените топологию, потому что вы отключите некоторые кабели, в это время все записи, которые содержат задействованные порты, будут отброшены из таблицы MAC-адресов. Новые записи изучаются после получения каждого первого пакета от оборудования. Некоторые записи останутся для неправильного порта, если оборудование не подключено напрямую, но, как правило, они будут вскоре изучены из-за широковещательных рассылок. Если нет трафика от оборудования, то оно должно пройти тайм-аут, пока его запись не будет отброшена. Тайм-аут обычно составляет 120 секунд.
решение3
если взять этот сценарий:
хост_а - порт 1 хост_б - порт 2
когда host_a захочет отправить пакет host_b, то сработает коммутатор, который запишет MAC-адрес host_a, и поскольку host_b еще ничего не отправил, он передаст кадр на все порты — host_b заметит, что ему отправлен пакет, и ответит на порт b.
В этот момент коммутатор знает, что у host_a на порту 1 есть mac1, а у host_b на порту 2 — mac2. Дальнейшая коммуникация будет осуществляться только через эти порты, а не через широковещательную передачу.
- Как поддерживать карту, зависит от поставщика, но все сводится к списку Mac и связанных с ними портов.
- В простейшей модели на самом деле нет протокола, за исключением того, что все происходит на уровне 2 OSI
- если вы измените топологию, коммутатор удалит старую запись и обновит ее новой (поскольку host_1 mac1 находится на порту 10 вместо 1).
то, что я сказал, применимо к неуправляемым коммутаторам и может применяться также к управляемым коммутаторам, но там все становится сложнее. Например, Cisco может настроить, какой Mac подключается к какому порту, они используют проприетарные протоколы, такие как ISL или открытый dot1q. http://en.wikipedia.org/wiki/IEEE_802.1Qтекст ссылки