Разница между IP и MAC-адресами
Неподготовленный человек часто путает 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 адресов и не занимаются переупаковкой. Они находятся внутри локальной сети и поэтому в приведённом примере их наличие никак не повлияло бы на процесс передачи информации. Главное в данном примере – это именно процесс прохождения маршрутизаторов. Отличное понимание приведённого примера является обязательным условием изучения дальнейшего материала и в частности понимания процесса маршрутизации.
Комментарии
Гость (не проверено)
пт, 07/11/2014 - 12:28
Постоянная ссылка (Permalink)
Таблица маршрутизации роутера заполняется в момент включения роутера, в момент подключения последующих устройств к роутеру или по необходимости в момент передачи данных?
Насколько я понимаю, в таблице маршрутизации только ip адреса и нет mac адресов. Тогда как роутер определяет mac-адрес следующего пункта пересылки - он имеет также и таблицу коммутации или выполняется широковещательный запрос на все соединенные устройства?
bacek
пт, 07/11/2014 - 19:28
Постоянная ссылка (Permalink)
Что касается второго вопроса - маршрутизатор, как и компьютер, имеет ARP таблицу, хранящую взаимосвязь между IP и MAC адресами. При включении она пуста, когда надо к кому-то обратитсья, он отправляет широковещательный ARP запрос, узнаёт MAC, соответствующий интересующему IP-шнику, запоминает его в таблице на будущее и шлёт на него данные.
Однако, это в теории, если брать практическую реализацию, то на современных маршрутизаторах применяется технология CEF (Cisco express forwarding), которая представляет из себя нечто вроде быстрого кэша, хранящего маршруты, маки, IP и интерфейсы для быстрой маршрутизации однотипных пакетов.
Гость (не проверено)
вт, 07/15/2014 - 07:44
Постоянная ссылка (Permalink)
Спасибо за обстоятельный и доступный ответ!
ida-freewares.ru (не проверено)
ср, 06/01/2016 - 12:10
Постоянная ссылка (Permalink)
Вообще, есть несколько способов узнать свой ip адрес, особенно учитывая, что сетевых плат или адаптеров может быть несколько. Поэтому иногда полезно использовать некоторые хитрости для их определения. Кстати, локальный ip адрес компьютера и его внешний достаточно часто отличаются, что частенько оставляют без внимания.
Ольга (не проверено)
чт, 04/06/2017 - 01:10
Постоянная ссылка (Permalink)
Хотелось бы тоже присоединиться к комментарию выше)
Статья шикарна)как раз для тех, кто только-только погружается во все это)
Теперь точно добавлю ваш сайт в закладки для дальнейшего изучения)
bacek
пт, 04/07/2017 - 17:00
Постоянная ссылка (Permalink)
Sanek (не проверено)
чт, 04/13/2017 - 11:58
Постоянная ссылка (Permalink)
Да класно написано, просто для понимания спасибо!
bacek
чт, 04/13/2017 - 15:58
Постоянная ссылка (Permalink)
Алексей Сергеевич (не проверено)
ср, 04/19/2017 - 16:43
Постоянная ссылка (Permalink)
Здраствуйте! Я прочел данную статью в 2015, я проще и всеобьемляще не видел нигде. Автору большой респект честь слова!!!!!!!!!
bacek
пт, 04/21/2017 - 10:06
Постоянная ссылка (Permalink)
Валерий (не проверено)
сб, 12/16/2017 - 13:52
Постоянная ссылка (Permalink)
здравствуйте. я уже не молод и погоню за технологиями не осиливаю. Но в одном серьёзном вопросе хочу разобраться досконально, поэтому у меня к Вам просьба ( наверно со мной все пользователи интернета согласятся ) вот какая: В связи с тем, что в последнее время много внимания уделяется БИТКОИНАМ, которые , уже не по слухам, генерируются при помощи нас - пользователей через наши роутеры, прошу Вас так же схематично понятливо объяснить, КАК ПРИ ПОМОЩИ ИНТЕРНЕТ-СТАТИСТИКИ ОБНАРУЖИТЬ "ЧУЖОГО" И В НАСТРОЙКАХ РОУТЕРА ВЫКЛЮЧИТЬ ИЛИ ЗАПРЕТИТЬ ПОСТОРОННИЕ СОЕДИНЕНИЯ ? ...........................буду очень признателен. allwithgood@mail.ru
bacek
вт, 12/19/2017 - 23:20
Постоянная ссылка (Permalink)
Здравствуйте. Первый вопрос про майнинг bitcoin на моём сайте :) Конечно, это не совсем по адресу. Майнинг производится не на роутерах, а на компьютерах пользователей. Происходит это так:
В общем, если у вас возникли подозрения - целесообразно вдумчиво проанализировать операционную систему, посмотреть процессы, нагрузку, обновить антивирус и т.п. Ну и есть общий набор джентельменских правил, чтобы такого не происходило: используйте сложные пароли, лицензионную и обновлённую ОС, антивирус с регулярными обновлениями, строгие правила сетевого экрана.
Гость (не проверено)
ср, 12/20/2017 - 00:20
Постоянная ссылка (Permalink)
спасибо. мне всё понятно. всего вам хорошего.
Артём (не проверено)
пн, 10/09/2017 - 00:58
Постоянная ссылка (Permalink)
Столько всяких видео посмотрел, столько статей перечитал, но ответы на свои вопросы нашёл здесь. Чисто примера последовательного ну оочень хватило!! Огромнейшее спасибо
Артёмка (не проверено)
пн, 10/09/2017 - 01:18
Постоянная ссылка (Permalink)
У меня вот два вопроса.
Первый:
Допустим, у нас есть роутер, который получил фрейм, но после него в цепи имеются два параллельных свича, после которых по маршруту к серверу стоит ещё один роутер. Первый роутер указывает mac свича? Если да, то как свич поймёт куда ему дальше посылать фрейм, если, например, помимо второго роутера к нему ещё парочка присоединена. Если mac указывается именно роутера, то получается, что посылается широковещательный сигнал на оба свича, которые посылают одинаковые фреймы роутеру номер 2? Немного не понимаю как в реальности расположены сетевые устройства в сети и как они друг друга адресуют. Если бы везде были только роутеры, то вопросов бы не было.
Второй:
Если я отправил http запрос серверу с указанием его доменного имени впервые (то есть нет в кэше ещё его ip), то как роутер поймёт куда тащить фреймы? У него внутри сразу таблица dns вшита или он сам отправляет запрос dns серверу? Да и вообще как бы как на сетевом уровне ещё на компьютере сформировать заголовок, если не известен ip? Может быть, перед отправкой и формированием пакетов, ip-протокол запрашивает у dns сервера ip, после чего уже продолжает трудиться?
bacek
ср, 10/11/2017 - 11:21
Постоянная ссылка (Permalink)
Отвечаю на вопросы:
Если у вас много подобных вопросов - я могу ответить на них оптом в рамках одного платного занятия по скайпу. Судя по тому, о чём вы спрашиваете - это может открыть вам глаза :)
Александр Черножуков (не проверено)
вс, 11/12/2017 - 02:59
Постоянная ссылка (Permalink)
Добрый день.
Клиент создаёт пакет, указывая в нём в качестве IP отправителя свой адрес – 191.168.1.10, а в качестве IP получателя адрес сервера – 192.168.3.50.
Тогда вопрос, а где указывается сеть в которую нужно отправить пакет ? Насколько я знаю, то в пакете маска не указывается. Как тогда маршутизатор понимает в какую сеть доставить ?
bacek
вт, 11/28/2017 - 09:44
Постоянная ссылка (Permalink)
Александр Черножуков (не проверено)
пт, 11/16/2018 - 23:44
Постоянная ссылка (Permalink)
А откуда в в таблицы Маршутизации роутера берутся Маски и Сети ?
bacek
пн, 11/19/2018 - 09:43
Постоянная ссылка (Permalink)
Тут есть три основных варианта:
В любом случае сети из всех трёх источников вместе с маками появляются в таблице маршрутизации. Кроме того, стоит отметить, что маршрутизатор не обязан знать истиный размер удалённой сети и точную её маску. Он может иметь только общие предтавления (суммарные маршруты или маршрут по умолчанию), осталвляя решение по точной детализации сетей другому маргрутизатору, находящемуся ближе к цели.
Ученик (не проверено)
пт, 01/19/2018 - 15:16
Постоянная ссылка (Permalink)
Спасибо. Очень доступно и понятно.
ПашаЕ (не проверено)
пн, 01/22/2018 - 05:58
Постоянная ссылка (Permalink)
Да, как говорится, то, что доктор прописал. Статья отличная.
Иван минск (не проверено)
чт, 05/10/2018 - 01:43
Постоянная ссылка (Permalink)
Доступно и понятно. Особенно пример.спасибо
Alexei (не проверено)
пн, 07/23/2018 - 11:30
Постоянная ссылка (Permalink)
Здравствуйте, может вопрос не по теме, но я все же попытаюсь спросить.
Есть http сервер в интернете. А я нахожусь за NAT у меня адрес 192.168.1.11 и отправляю запрос на сервер 33.33.33.33 , сервер отвечает и пишет получателя 192.168.1.11 а в стране таких 192.168.1.11 очень много. Так как всётаки сервер отвечает клиенту?
bacek
пн, 07/30/2018 - 11:13
Постоянная ссылка (Permalink)
АлексейАлексеев (не проверено)
чт, 10/11/2018 - 15:53
Постоянная ссылка (Permalink)
А таких белых адресов 2.2.2.2 - в свою очередь - может быть тоже много вокруг получателя или вокруг получателя не может быть одинаковых? Спасибр.
bacek
вт, 11/06/2018 - 14:50
Постоянная ссылка (Permalink)
Адрес 2.2.2.2 белый, поэтому он только в один такой в мире. У получателя может быть несколько разных белых адресов. Но благодаря нату этим адресом 2.2.2.2 могут пользоваться много внутренних клиентов с серыми адресами.
АлексейАлексеев (не проверено)
чт, 10/11/2018 - 16:01
Постоянная ссылка (Permalink)
Здравствуйте! Не могу понять. А почему возле каждого маршрутизатора есть по две приписки с разными ip адресами? Это значит, что порты на одном маршрутизаторе могут быть в разных сетях?
bacek
вт, 11/06/2018 - 14:52
Постоянная ссылка (Permalink)
Можно даже более сильное утверждение сделать - у маршрутизатора разные порты обязаны быть в разных сетях. Маршрутизатор занимается пересылкой пакетов из одной сети в другую (другие) поэтому в каждой сети, которая к нему подключается, у него должен быть интерфейс и свой айпи адрес.
АлексейАлексеев (не проверено)
чт, 10/11/2018 - 16:17
Постоянная ссылка (Permalink)
BBB=CCC
DDD=EEE
? ? ?
NoWind (не проверено)
пт, 08/19/2022 - 12:31
Постоянная ссылка (Permalink)
Да, верно - именно так!!
парамон генрихо... (не проверено)
пн, 10/21/2019 - 21:41
Постоянная ссылка (Permalink)
Телевизор с функцией smart принимает интернет без роутера и без приставки по технологии динамический IP без MAC-адреса,верно? Где в РФ это налажено? Спасибо!!!...
bacek
вт, 10/22/2019 - 15:40
Постоянная ссылка (Permalink)
Albo (не проверено)
сб, 03/25/2023 - 09:46
Постоянная ссылка (Permalink)
Здравствуйте, небольшой вопрос, если у нас устройство R1 это роутер, а PC0 это ПК который подключен по LAN к роутеру, то в пакете который пришёл от PC0 роутер R1 должен поменять IP отправителя с 192.168.1.10 на свой 192.168.2.1, т.к. 192.168.1.10 это ip в локальной сети, и если с таким IP дойдёт до Server0 то он либо не поймёт куда это отправлять, либо отправит по своей локальной сети.
Почему в статье в примере маршрутизатор не меняет IP отправителя на свой? "При этом, содержимое заголовка IP пакета не меняется – в нём по-прежнему адрес отправителя 192.168.1.10, а адрес получателя – 192.168.3.50"
ВладимирЛ
ср, 07/05/2023 - 08:05
Постоянная ссылка (Permalink)
Правильно ли я понял из статьи, что в пределах одной сети можно работать только на канальном уровне, зная MAC адреса? Просто интересно, есть ли вообще такая практика?
Добавить комментарий