TL; DR> MAC-адреси - це компонент низького рівня мережі Ethernet (та деякі інші подібні стандарти, наприклад, WiFi). Вони дозволяють пристрою спілкуватися з машиною в локальній фізичній мережі (LAN) і не можуть бути маршрутизовані через Інтернет - тому що фізичне обладнання в теорії може бути підключено в будь-якій точці світу.
Навпаки, IP-адреси охоплюють весь Інтернет, і маршрутизатори використовують їх, щоб визначити, куди надсилати дані, навіть якщо для досягнення пункту призначення потрібні кілька перестрибень, але вони не корисні для взаємодії з фізичним обладнанням у вашій локальній мережі.
Якщо ми коли-небудь знайшли кращий стандарт, ніж Ethernet, він може не використовувати MAC-адреси, але IP-трафік з Інтернету все ще може протікати через нього, навіть якщо інші люди в Інтернеті про нього ніколи не чули.
Якщо ми коли-небудь знайшли кращий стандарт, ніж IP (наприклад, IPv6, якщо всі адреси IPv4 закінчилися), більшість апаратних засобів Ethernet могли б переносити новий вид трафіку без модифікацій - і просте оновлення програмного забезпечення / прошивки виправить більшість решти.
MAC-адреси необхідні для створення локальної мережі Ethernet (або Wi-Fi). Вони дозволяють мережевому пристрою привернути увагу одного безпосередньо підключеного пристрою, навіть якщо фізичне з'єднання є загальним. Це може бути важливо, коли тисячі пристроїв з'єднані разом в одній організації. Вони не виконують жодної функції в широкому Інтернеті.
Щоб реально зрозуміти відповідь на це питання, вам потрібно зрозуміти модель OSI (іноді відома як 7-шарова) модель .
Щоб спілкування відбувалося між двома програмами, що працюють на окремих машинах, які не мають прямого фізичного зв'язку, потрібно провести багато роботи.
За старих часів кожен додаток точно знав би, які інструкції машинного коду потрібно запустити, щоб подати відповідний сигнал, який би досягав і може бути розшифрований програмою в далекому кінці. Вся комунікація була ефективно орієнтована на точку, і програмне забезпечення потрібно було писати так, щоб відповідати точній ситуації, в якій вона повинна бути розгорнена. Очевидно, що це було нестійким.
Замість цього проблема мереж була розбита на шари, і кожен шар знав, як говорити з відповідним шаром на віддаленій машині та як спілкуватися із шаром під (а іноді і вище) на його локальній машині. Він взагалі нічого не знав про будь-які інші шари, тому ваш веб-браузер не повинен дбати про те, чи працює він на машині, яка використовує токен-дзвінок, Ethernet або Wi-Fi мережу - і, безумовно, не потрібно знати, яке обладнання використовує віддалений апарат.
Щоб зробити цю роботу, 7-шарова модель використовує систему, а не вкладені конверти; додаток створює свої дані та загортає їх у конверт для доставки Операційної системи. ОС завершує це в інший конверт і передає його драйверу мережі. Мережевий драйвер загортає це в ще один конверт і кладе його на фізичний кабель. І так далі.
Нижній шар, шар 1 - це фізичний шар. Це шар проводів і транзисторів і радіохвиль, і на цьому шарі комунікація - це здебільшого лише потік з них і сіток. Дані надходять скрізь, де фізично пов'язані. Ви підключаєте мережевий порт комп'ютера до комутатора за допомогою кабелю CAT-5.
Шар 2 - рівень зв'язку даних. Це забезпечує певну структуру для тіл і мереж, деякі можливості виявлення та виправлення помилок, а також деяку вказівку щодо того, на який фізично підключений пристрій (фізичні з'єднання тут можуть бути фактично через wifi) слід звернути увагу на повідомлення. Це шар, з яким MAC-адреси вступають у гру, і ми повернемося до нього пізніше. Але MAC-адреси - не єдина можливість цього шару. Наприклад, кільцевим мережам маркера потрібна інша реалізація каналу передачі даних.
3 рівень - мережевий рівень. Це шар, на якому працює IP (хоча це не єдиний протокол мережевого рівня), і саме це дозволяє комп'ютерам надсилати повідомлення, яке може потрапити на будь-яку машину в будь-яку точку "мережі". Не потрібно мати прямий зв'язок між відповідними машинами.
Шари 4-7 - протоколи вищого рівня. Вони все більше віддаляються від обладнання та наближаються до програми. Наприклад, TCP сидить поверх IP-адреси та забезпечує механізми, які автоматично надсилають повідомлення, коли вони відсутні.
Таким чином, MAC-адреси працюють на рівні 2 і дозволяють 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 рівня.