Как коммутатор изучает таблицу коммутаторов?

22

Скажем, таблица переключателей пуста. Если компьютер A отправляет кадр, предназначенный для компьютера B, коммутатор будет транслировать вопрос о том, кто имеет mac-адрес B. Что если C внезапно отправит кадр в A? Каков механизм, чтобы коммутатор по ошибке не думал, что компьютер C - это компьютер B? Неужели он запоминает MAC-адрес пункта назначения, требуемого компьютером A, и когда C пытается добраться до A, он также содержит свой собственный MAC-адрес, и коммутатор обнаруживает, что он не совпадает с пунктом назначения, который требуется компьютеру A?

По сути, я спрашиваю, когда коммутатор запрашивает неизвестный mac-адрес для запроса, отправленного узлом A, как он узнает, что пункт назначения отвечает на узел A или если какой-то другой узел просто передает данные на A?

Celeritas
источник
Вам помог какой-нибудь ответ? Если это так, вы должны принять ответ, чтобы вопрос не появлялся вечно, ища ответ. Кроме того, вы можете предоставить свой собственный ответ и принять его.
Рон Мопин

Ответы:

34

Коммутаторы уровня 2 (мосты) имеют таблицу MAC-адресов, которая содержит MAC-адрес и номер порта. Коммутаторы следуют этому простому алгоритму для пересылки пакетов:

  1. Когда кадр получен, коммутатор сравнивает MAC-адрес SOURCE с таблицей MAC-адресов. Если SOURCE неизвестен, коммутатор добавляет его в таблицу вместе с номером порта, на котором был получен пакет. Таким образом, коммутатор узнает MAC-адрес и порт каждого передающего устройства.

  2. Затем коммутатор сравнивает MAC-адрес DESTINATION с таблицей. Если запись есть, коммутатор перенаправляет фрейм на соответствующий порт. Если запись отсутствует, коммутатор отправляет пакет на все свои порты, кроме порта, на который был получен кадр (Flooding).

Обратите внимание, что коммутатор не изучает MAC-адрес назначения, пока не получит кадр от этого устройства.

Рон Транк
источник
Спасибо @Ron за лучшее объяснение. Теперь я знаю, что наводнение есть. Также можно найти на en.wikipedia.org/wiki/Unicast_flood
Damon
Это не ответило на вопрос, который я задал.
Celeritas
5
@Celeritas Ваше предположение в вашем вопросе неверно. Коммутатор не «спрашивает», у кого есть MAC-адрес. Если он не знает целевой MAC, он затопляет кадр всеми портами. Он только изучает исходные MAC-адреса, когда получает кадр. Таким образом, в вашем вопросе коммутатор может определить разницу между B и C, поскольку у них разные MAC-адреса источника.
Ron Trunk
4
@Celeritas - Коммутатор не знает и не заботится о том, почему какой-либо хост отправляет что-то на хост A. Почему это имеет значение, если хост отвечает на хост A, или другой хост отправляет что-то еще на хост A? Коммутатор заботится только о том, что MAC-адрес назначения предназначен для хоста A (и что такое MAC-адрес источника, если его нет в таблице MAC-адресов). Только хост A заботится, является ли полученный кадр ответом от хоста, на который первоначально был отправлен кадр.
Рон Мопин
Как сказал Рон, эта концепция отделена от ARP.
Джордан Хэд,
4

Ваш вопрос предполагает, что коммутатор участвует или знает о связи / разговоре между двумя хостами (это разговор между A и B или между A и C?). Коммутатор не участвует в связи / разговоре между двумя хостами. Он просто знает (или узнает), какой MAC-адрес связан с каким портом и перенаправляет (или переключает) трафик, предназначенный для определенного MAC-адреса, на связанный порт (после того, как он узнал, какой порт связан с MAC-адресом), независимо от того, источником является B или C или любой другой хост, подключенный к любому другому порту коммутатора.

Переключатели работают на уровне 2. За управление сессиями отвечают вышестоящие уровни.

joeqwerty
источник
-2

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

Теперь, в то же время, если C пытается отправить пакет A, он извлекает MAC-адрес C из этого пакета и сохраняет его в таблице MAC. Теперь, поскольку MAC-адрес уже присутствует в таблице MAC, он знает, к какому порту A подключен. Помните, что пакеты данных содержат MAC-адрес источника и получателя. Следовательно, MAC-адрес B & C различен. Так что переключатель не запутался. Теперь переключите пакет с C на A (учитывая, что оба присутствуют в одной VLAN).

Чтобы отправить пакет от A до B, он ожидает, пока B не ответит на пакет ARP, отправленный коммутатором. Когда он получает ответ от B, он обновляет MAC-адрес B в своей таблице MAC. Затем, наконец, пакет пересылается в B.

Следовательно, коммутатор не запутывается, поскольку пакеты данных (tcp / udp) содержат как MAC-адрес источника, так и адрес назначения. И ваш коммутатор не будет пересылать пакет на интерфейс, чей MAC-адрес конечного хоста неизвестен для переключения. Он должен ждать, пока конечный хост не ответит на широковещательную рассылку ARP, отправленную коммутатором.

Damon
источник
1
Это не совсем точно. Переключатель, если он не является переключателем уровня 3, не поддерживает ARP. ARP должен разрешать между уровнем 2 и уровнем 3, и коммутатор не знает уровень 3. Коммутатор действительно транслирует кадр с неизвестным MAC-адресом назначения на каждый порт коммутатора. Хост будет игнорировать любой кадр с MAC-адресом назначения, а не своим собственным.
Рон Мопин
1
И небольшое уточнение к разъяснению Рона ... в основном только терминологическая коррекция. Когда коммутатор отправляет пакет на каждый порт (кроме входного порта), потому что он не знает, где находится этот конкретный MAC-адрес, его обычно называют «затоплением».
Джефф Макадамс,
@ Рон, спасибо за исправление. А забыл написать, что это для коммутатора 3 уровня. И я также хотел признать, что забыл термин flooding, поэтому я написал ответ для переключателей 3-го уровня. И Джефф спасибо, что рассказал.
Деймон
@ Джефф МакАдамс, Вы правы, это флуд, спасибо. Это было до моей первой чашки кофе после того, как я встал рано, и я имел в виду вещание в смысле языка, а не в смысле сети.
Рон Мопин
@ Дэймон, я не знал, что каждый кадр содержит MAC-адрес источника и назначения.
Celeritas