TL; DR> MAC-адреса являются компонентом низкого уровня сети Ethernet (и некоторых других аналогичных стандартов, таких как WiFi). Они позволяют устройству обмениваться данными с машиной в локальной физической сети (ЛВС) и не могут маршрутизироваться через Интернет - поскольку теоретически физическое оборудование может быть подключено в любой точке мира.
Напротив, IP-адреса покрывают весь Интернет, и маршрутизаторы используют их, чтобы выяснить, куда отправлять данные, даже если для достижения цели требуется несколько переходов, но они не помогают при взаимодействии с физическим оборудованием в вашей локальной сети.
Если мы когда-нибудь найдем лучший стандарт, чем Ethernet, он может не использовать MAC-адреса, но IP-трафик из Интернета все равно может проходить через него, даже если другие люди в Интернете никогда не слышали об этом.
Если мы когда-нибудь найдем лучший стандарт, чем IP (например, IPv6, если все адреса IPv4 закончились), большинство оборудования Ethernet сможет передавать новый тип трафика без изменений - и простое обновление программного обеспечения / микропрограммного обеспечения исправит большинство остальных.
MAC-адреса необходимы для работы локальной сети Ethernet (или Wi-Fi). Они позволяют сетевому устройству привлекать внимание одного напрямую подключенного устройства, даже если физическое соединение используется совместно. Это может быть важно, когда тысячи устройств соединены вместе в рамках одной организации. Они не выполняют никакой функции в более широком Интернете.
Чтобы действительно понять ответ на этот вопрос, вам нужно понять модель OSI (иногда называемую 7-уровневой) .
Для связи между двумя приложениями, работающими на отдельных машинах, которые не имеют прямого физического соединения, необходимо выполнить большую работу.
В прежние времена каждое приложение точно знало, какие инструкции машинного кода необходимо выполнить, чтобы получить соответствующий сигнал, который может быть получен и декодирован приложением на дальнем конце. Вся коммуникация была фактически двухточечной, и программное обеспечение должно было быть написано в соответствии с конкретной ситуацией, в которой оно должно было быть развернуто. Очевидно, это было неустойчиво.
Вместо этого проблема сетевого взаимодействия была разделена на уровни, и каждый уровень знал, как разговаривать с соответствующим уровнем на удаленном компьютере и как общаться с уровнем, расположенным ниже (а иногда и выше), на локальном компьютере. Он вообще ничего не знал о любых других существующих слоях - поэтому вашему веб-браузеру не нужно заботиться о том, работает ли он на машине, использующей токен-кольцо, сеть Ethernet или Wi-Fi, - и определенно не нужно знать, какое оборудование удаленная машина использует.
Для этого в 7-слойной модели используется система, похожая на вложенные конверты; приложение создает свои данные и помещает их в конверт для доставки операционной системой. ОС оборачивает это в другой конверт и передает его сетевому драйверу. Сетевой драйвер оборачивает это в еще один конверт и помещает его на физический кабель. И так далее.
Нижний слой, уровень 1 , является физическим уровнем. Это слой проводов, транзисторов и радиоволн, и на этом уровне связь - это, в основном, просто поток единиц и нулей. Данные идут везде, где есть физическая связь. Вы подключаете сетевой порт вашего компьютера к коммутатору с помощью кабеля CAT-5.
Уровень 2 является канальным уровнем. Это обеспечивает некоторую структуру для тех и других, некоторые возможности обнаружения и исправления ошибок, а также некоторую информацию о том, какое физически подключенное устройство (физические соединения здесь могут фактически быть через Wi-Fi) следует обратить внимание на сообщение. Это тот уровень, на который MAC-адреса вступают в игру, и мы вернемся к нему позже. Но MAC-адреса не единственная возможность на этом уровне. Например, для сетей Token Ring требуется другая реализация канала передачи данных.
Уровень 3 является сетевым уровнем. Это тот уровень, на котором работает IP (хотя это и не единственный протокол сетевого уровня), и именно он позволяет компьютерам отправлять сообщения, которые могут попасть на любой компьютер в любом месте «сети». Между этими машинами не должно быть прямой связи.
Уровни 4-7 являются протоколами более высокого уровня. Они все дальше удаляются от оборудования и приближаются к приложению. TCP, например, расположен поверх IP и предоставляет механизмы, которые автоматически пересылают сообщения, когда они пропадают.
Таким образом, MAC-адреса работают на уровне 2 и позволяют двум компьютерам, которые физически подключены друг к другу, отправлять сообщения, которые будут игнорироваться другими машинами, имеющими такое же физическое соединение.
Предположим, у меня есть приложение, которое хочет отправить данные на компьютер с IP-адресом 8.8.8.8.
Уровень 3 упаковывает данные в конверт, который содержит, помимо прочего, IP-адрес 8.8.8.8, а затем передает его на уровень 2.
Уровень 2 просматривает этот IP-адрес и решает, какой компьютер, к которому он напрямую подключен, сможет обработать это сообщение. Он будет иметь справочную таблицу для выбора напрямую подключенных IP-адресов вместе с соответствующим MAC-адресом сетевой карты в этой машине. Эта справочная таблица построена с использованием протокола ARP, который позволяет сетевой карте задавать вопросы другим устройствам, подключенным напрямую. Ethernet резервирует специальный MAC-адрес, FF: FF: FF: FF: FF: FF, который позволяет устройству взаимодействовать со всеми физически подключенными устройствами.
Если IP-адрес находится в таблице (или может быть разрешен с помощью ARP), он обернет конверт уровня 3 в конверт уровня 2 с MAC-адресом в новом заголовке, а затем передаст весь комплект оборудованию на уровне 1 . Сетевая карта с соответствующим MAC-адресом получит сообщение, а сетевой драйвер откроет конверт 2-го уровня и передаст содержимое до той части операционной системы, которая ожидает получения сообщений по определенному IP-адресу.
В качестве альтернативы, если IP-адрес отсутствует в локальной сети, для нового конверта будет настроен MAC-адрес шлюза по умолчанию (т. Е. Маршрутизатора), настроенного для этого сетевого интерфейса, и оборудование будет передавать пакет на маршрутизатор.
Маршрутизатор замечает свой собственный MAC-адрес в конверте уровня 2 и открывает пакет уровня 2. Он просматривает IP-адрес на конверте 3-го уровня и определяет, куда должно идти сообщение, которое, вероятно, будет маршрутизатором вашего интернет-провайдера. Если маршрутизатор использует NAT (или аналогичный), он может даже изменить конверт уровня 3 на этом этапе, чтобы сохранить ваши внутренние IP-адреса закрытыми. Затем он обернет конверт уровня 3 в новый конверт уровня 2, который адресован MAC-адресу маршрутизатора интернет-провайдера, и отправит туда сообщение.
Этот процесс удаления внешнего конверта и упаковки содержимого в новый конверт, адресованный следующему этапу в цепочке, будет продолжаться до тех пор, пока сообщение не достигнет машины назначения.
Конверты затем будут разорваны, когда сообщение возвращается вверх по уровням, пока оно, наконец, не достигнет своего предполагаемого получателя, который будет где-то приложением, которое, мы надеемся, будет знать, что делать с сообщением, - но не будет знать, как сообщение получено, да и вообще все шаги, необходимые для получения ответа на исходную машину.
Но все это работает, почти как волшебство!
Обратите внимание, что сетевые коммутаторы могут использовать MAC-адреса для оптимизации потока сетевого трафика. В то время как концентратор Ethernet просто перенаправляет весь входящий трафик на все свои порты, в отличие от этого, коммутатор может перенаправлять трафик только на один порт, к которому подключен MAC-адрес назначения пакета. Это увеличивает эффективную пропускную способность сети; ориентируясь на определенные порты, коммутатор избегает пересылки трафика в ненужные сегменты сети. Коммутатор будет использовать ARP или перехват пакетов, чтобы определить, какие устройства подключены к какому порту. Коммутаторы полностью игнорируют содержимое пакетов уровня 2.