В чем разница между IP-адресом и MAC-адресом в сетях?

Ответ

IP-адрес (Internet Protocol) — это логический адрес сетевого уровня (L3 OSI), назначаемый устройству для идентификации в сети и маршрутизации трафика между разными сетями. Он может быть динамическим.

MAC-адрес (Media Access Control) — это физический адрес канального уровня (L2 OSI), уникальный идентификатор, «прошитый» в сетевом адаптере. Он используется для коммуникации внутри одной локальной сети (LAN).

Ключевые отличия:

Критерий IP-адрес MAC-адрес
Уровень OSI Сетевой (L3) Канальный (L2)
Назначение Глобальная маршрутизация между сетями Локальная идентификация в пределах сети
Изменяемость Динамически назначается и меняется Постоянный (физический)
Пример 192.168.1.1 (IPv4) 00:1A:2B:3C:4D:5E

Практический пример: При отправке пакета на удаленный сервер:

  1. Ваш компьютер использует IP-адрес сервера для определения маршрута через интернет.
  2. В пределах каждого сегмента локальной сети (например, в вашей домашней сети или сети провайдера) для передачи кадра следующему устройству (роутеру, коммутатору) используется его MAC-адрес.

Пример проверки формата MAC-адреса на Python:

import re

def is_valid_mac(mac: str) -> bool:
    pattern = r'^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$'
    return bool(re.match(pattern, mac))

print(is_valid_mac('00:1A:2B:3C:4D:5E'))  # True
print(is_valid_mac('00-1A-2B-3C-4D-5E'))  # True
print(is_valid_mac('00:1A:2B:3C:4D'))     # False

Ответ 18+ 🔞

Давай разберём эту хуйню, а то у некоторых в голове каша из этих адресов, как будто они в детстве все микросхемы на вкус пробовали.

Смотри, IP-адрес — это как твой почтовый адрес в интернете, логическая хуйня. Его тебе выдают, как пропуск, и он может меняться. Пришёл в новую сеть — получил другой. Уровень сетевой, L3, для маршрутизации между разными сетями, чтобы твой запрос на котиков дошёл аж до сервера в Калифорнии.

А MAC-адрес — это уже твой паспорт, вшитый в железо. Физический, блядь, идентификатор, уникальный для каждой сетевухи. Это уровень канальный, L2. Нужен он, чтобы в пределах одной локальной сети, типа твоей домашней вай-файни, устройства друг друга опознавали. Роутер смотрит на MAC, чтобы понять, кому из твоих девайсов отдать пакет с ютуба.

Ключевые отличия, чтобы не путать:

Критерий IP-адрес MAC-адрес
Уровень OSI Сетевой (L3) Канальный (L2)
Назначение Глобальная маршрутизация между сетями Локальная идентификация в пределах сети
Изменяемость Динамически назначается и меняется Постоянный (физический)
Пример 192.168.1.1 (IPv4) 00:1A:2B:3C:4D:5E

Как это работает на практике, ёпта: Ты хочешь зайти на сайт. Твой комп берёт IP-адрес сервера и строит маршрут через весь интернет — это глобальная задача. Но первый шаг — отправить пакет на домашний роутер. И вот тут он смотрит не на IP, а на MAC-адрес роутера, чтобы крикнуть ему в локальной сети: «Эй, рыжая морда, прими это!». Без MAC'а внутри сети — нихуя не передашь.

А вот тебе код на Python, чтобы проверить, не кривой ли MAC-адрес тебе подсунули:

import re

def is_valid_mac(mac: str) -> bool:
    pattern = r'^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$'
    return bool(re.match(pattern, mac))

print(is_valid_mac('00:1A:2B:3C:4D:5E'))  # True
print(is_valid_mac('00-1A-2B-3C-4D-5E'))  # True
print(is_valid_mac('00:1A:2B:3C:4D'))     # False

Вот и вся магия. IP — для больших путешествий, MAC — для узнавания своих в тусовке. Запомни, и не позорься.