Есть ли какая-то конкретная причина, по которой коммутаторы Ethernet не меняют MAC-адрес пакета?
Это для идентификации конечного хоста по MAC-адресу или что-то еще?
Есть ли какая-то конкретная причина, по которой коммутаторы Ethernet не меняют MAC-адрес пакета?
Это для идентификации конечного хоста по MAC-адресу или что-то еще?
Ответы:
Если бы коммутатор изменил MAC-адреса, это полностью сломало бы сеть.
MAC-адрес является уникальным идентификатором, который используется хостами в локальной сети.
Если бы коммутатор изменил целевой MAC, кадр не был бы доставлен на соответствующий хост. В тех случаях, когда это будет, например, в случае затопления фрейма, целевой хост отбросит его, потому что он больше не будет предназначен для хоста.
Если бы коммутатор изменил MAC-адрес источника, хост назначения использовал бы этот MAC-адрес для любых ответов (включая обновление любых записей ARP неверными данными). Это приведет к той же ситуации, которую я уже описал, только для всего обратного трафика.
Это может дополнительно создать проблемы с такими вещами, как 802.1X и другими механизмами, которые используют MAC-адрес для идентификации / классификации устройства.
Могут ли быть разработаны механизмы для этого? Я уверен, что они могли. Но в данный момент нет причин делать это, и это только усложнит работу сети и добавит ненужную обработку. Мы не близки к исчерпанию доступного пула MAC-адресов, поэтому нет необходимости для чего-то вроде MAT (не знаю, существует ли вообще концепция трансляции MAC-адресов, так что, может быть, я просто придумал термин?).
Перезапись адресов дейтаграмм происходит на уровне 3, например, когда шлюзы (маршрутизатор или межсетевой экран), на которых работает NAT, перезаписывают IP-адреса узлов во внутренней сети, чтобы все они появлялись с одного (или нескольких) внешних IP-адресов на самом шлюзе.
Причина того, что нечто подобное не происходит на уровне 2-го уровня (где мы используем MAC-адреса для различения хостов и коммутаторов, которые выполняют перемещение дейтаграмм, то есть фреймов), заключается в том, как сказано в комментариях выше, что на самом деле в этом нет необходимости.
В случае третьего уровня с NAT, NAT решает ряд проблем:
Так что, если мы будем придерживаться примера NAT, на самом деле нет необходимости в аналоге второго уровня NAT.
Надеюсь, что это пролило некоторый свет на то, почему коммутаторы не перезаписывают MAC-адреса. Единственный случай 3-го уровня, который я придумал с самого начала, был NAT, другие, безусловно, могут служить примером других случаев 3-го уровня, когда перезапись IP оправдана (и почему эти технологии не имеют смысла на уровне 2-го уровня) ,
Перезапись MAC-адреса добавила бы значительную сложность (коммутатор должен был бы знать о протоколах более высокого уровня, таких как arp, чтобы он мог перезаписать преобразование адресов), усложнил бы поиск и устранение неисправностей, помешал бы работе таких протоколов, как STP, и обычно был бы PITA. Это также обычно не требуется.
Что не означает, что это невозможно. В ebtables (аналог уровня 2 для iptables) есть несколько вариантов трансляции MAC-адресов. Это может быть полезно, если у вас есть коммутаторы, которые не используют таблицы MAC для vlan, и вы хотите выполнить некоторую фильтрацию 2 уровня.