Неподготовленный человек часто путает ip и mac адреса и не может чётко объяснить, где используются первые, а где вторые. На самом деле, они используются одновременно, но имеют разное назначение и смысл. Чтобы разобраться с этим, требуется вначале представлять себе структуру эталонной модели OSI. IP-адресация – это адресация третьего уровня, и сам по себе адрес является иерархическим, то есть часть адреса обозначает сеть адресата, а часть – идентификатор хоста внутри сети.
Например, если есть адрес 192.168.1.2 с маской 255.255.255.0, то надо понимать, что 192.168.1.0 – это сеть, а 2 – это хост внутри этой сети. На самом деле, с точки зрения маршрутизаторов не имеет значения эта последняя двойка. Самое главное – доставить пакет в нужную сеть, а последний маршрутизатор на этом пути уже будет смотреть, как найти хост с номером два.
MAC-адрес (адрес второго уровня), напротив, линейный, то есть отдельные компоненты адреса не имеют отдельного смысла (на самом деле, есть часть MAC-адреса, по которой можно определить производителя устройства, но в данном контексте это не имеет значения). Так вот, глядя на два MAC адреса можно сказать только одно: разные они или одинаковые. Нельзя понять, в одной они сети находятся или в разных.
Таким образом, если мы, например, знаем MAC-адрес удалённого сервера, то это нам никак не поможет узнать, как отправить на него пакет, в силу отсутствия в адресе информации о сети адресата. MAC-адреса используются для идентификации разных устройств в пределах одной локальной сети. Приведём пример типичного использования MAC-адресов: есть сеть, в ней несколько компьютеров подключены к общему хабу. Один компьютер отправляет сообщение другому компьютеру, указывая в заголовке второго уровня MAC-адрес получателя. Все участники в сети получают фрейм. Тот хост, чей адрес указан принимает содержимое, а остальные видят, что это не им, и уничтожают фрейм. В случае использования коммутатора вместо хаба, процедура примерно такая же за исключением того, что коммутатор проводит некоторую фильтрацию по MAC-адресам, которая в данном контексте нам не важна.
Итого, ip-адрес имеет стратегическое значение, указывая, куда глобально надо передать пакет, mac же имеет тактическое значение, в нём содержится информация, какому ближайшему устройству (из нашей же сети) нужно передать информацию.
Чтобы было понятнее, давайте рассмотрим пример: клиент находится в одной сети, а сервер – в другой. Между ними два маршрутизатора.

Для простоты будем считать, что во всех сетях маски подсети 255.255.255.0. Клиент отправляет запрос на сервер, в качестве шлюза по умолчанию, на нём прописан ip адрес ближайшего маршрутизатора – 192.168.1.1.
- Клиент собирается отправить пакет на адрес 192.168.3.50, он сравнивает адрес сервера со своим и видит, что они находятся в разных сетях (сервер в 192.168.3.0, а клиент – в 192.168.1.0). Раз сети разные, значит нет смысла искать MAC сервера (ведь он нужен только для передачи в пределах одной сети) вместо этого нужно отправить пакет на MAC-адрес шлюза (R1), чтобы он уже дальше разбирался как доставить этот пакет.
- Клиент создаёт пакет, указывая в нём в качестве IP отправителя свой адрес – 191.168.1.10, а в качестве IP получателя адрес сервера – 192.168.3.50.
- Пакет заворачивается во фрейм, в котором MAC-адрес отправителя AAA, а в качестве MAC-адреса получателя стоит адрес шлюза – BBB.
- R1 получает фрейм, глядя на MAC BBB понимает, что фрейм ему, достаёт из него пакет и смотрит свою таблицу маршрутизации. В ней видно, что сеть 192.168.3.0 находится где-то справа и чтобы достичь её надо переслать фрейм маршрутизатору R2.
- R1 снова запаковывает тот же пакет но уже в новый фрейм, на этот раз MAC отправителя – CCC, MAC получателя – DDD, так как фрейм пойдёт уже по другой локальной сети где есть свой отправитель – R1 и свой получатель – R2. При этом, содержимое заголовка IP пакета не меняется – в нём по-прежнему адрес отправителя 192.168.1.10, а адрес получателя – 192.168.3.50
- R2 получает фрейм, видит что там стоит его MAC, соответственно фрейм надо распаковать и обработать. Когда фрейм декапсулирован, из него достаётся IP пакет. Глядя на адрес получателя, R2 видит, что пакет идёт в сеть 192.168.3.0, которая непосредственно подключена к R2. Таким образом, дальше не надо передавать содержимое никакому другому маршрутизатору, а надо передать непосредственному получателю.
- R2 переупаковывает всё тот же пакет в новый фрейм, ставя в качестве MAC-адреса отправителя свой адрес EEE, а в качестве адреса получателя – адрес сервера FFF. Внутри фрейма находится всё тот же пакет с теми же IP адресами, что и были на протяжении всего путешествия. Фрейм отправляется в последнюю локальную сеть 192.168.3.0
- Сервер получает фрейм, видит, что в нём его MAC (FFF), распаковывает фрейм и достаёт из него пакет, в пакете его IP (192.168.3.50) – значит можно продолжить обработку. Пакет распаковывается, из него достаются полезные данные и передаются далее внутри сервера нужному приложению для обработки.
Обратный процесс отправки ответа выглядит аналогичным образом. То есть, на протяжении всего путешествия пакета по сети, IP адреса отправителя и получателя в нём не меняются, так как именно основываясь на IP адресе получателя маршрутизатор решает, куда дальше пересылать пакет. А вот MAC-адреса меняются при каждом переходе из одной сети в другую. Каждый маршрутизатор ставит в качестве адреса отправителя свой MAC-адрес (точнее адрес того своего интерфейса, который смотри в нужную сеть, того интерфейса, с которого непосредственно будет выходить фрейм), а в качестве MAC-адреса получателя ставится адрес ближайшего устройства в следующей сети, то есть, либо следующего маршрутизатора, либо, если сеть уже достигнута, то непосредственного адресата, для которого предназначается информация в пакете.
Стоит отметить, что коммутаторы и хабы не имеют ни MAC ни IP адресов и не занимаются переупаковкой. Они находятся внутри локальной сети и поэтому в приведённом примере их наличие никак не повлияло бы на процесс передачи информации. Главное в данном примере – это именно процесс прохождения маршрутизаторов. Отличное понимание приведённого примера является обязательным условием изучения дальнейшего материала и в частности понимания процесса маршрутизации.