Разница между 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 же имеет тактическое значение, в нём содержится информация, какому ближайшему устройству (из нашей же сети) нужно передать информацию.

Чтобы было понятнее, давайте рассмотрим пример: клиент находится в одной сети, а сервер – в другой. Между ними два маршрутизатора.

Пример использования IP и MAC адресов

Для простоты будем считать, что во всех сетях маски подсети 255.255.255.0. Клиент отправляет запрос на сервер, в качестве шлюза по умолчанию, на нём прописан ip адрес ближайшего маршрутизатора – 192.168.1.1.

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

Обратный процесс отправки ответа выглядит аналогичным образом. То есть, на протяжении всего путешествия пакета по сети, IP адреса отправителя и получателя в нём не меняются, так как именно основываясь на IP адресе получателя маршрутизатор решает, куда дальше пересылать пакет. А вот MAC-адреса меняются при каждом переходе из одной сети в другую. Каждый маршрутизатор ставит в качестве адреса отправителя свой MAC-адрес (точнее адрес того своего интерфейса, который смотри в нужную сеть, того интерфейса, с которого непосредственно будет выходить фрейм), а в качестве MAC-адреса получателя ставится адрес ближайшего устройства в следующей сети, то есть, либо следующего маршрутизатора, либо, если сеть уже достигнута, то непосредственного адресата, для которого предназначается информация в пакете.

Стоит отметить, что коммутаторы и хабы не имеют ни MAC ни IP адресов и не занимаются переупаковкой. Они находятся внутри локальной сети и поэтому в приведённом примере их наличие никак не повлияло бы на процесс передачи информации. Главное в данном примере – это именно процесс прохождения маршрутизаторов. Отличное понимание приведённого примера является обязательным условием изучения дальнейшего материала и в частности понимания процесса маршрутизации.

Комментарии

Таблица маршрутизации роутера заполняется в момент включения роутера, в момент подключения последующих устройств к роутеру или по необходимости в момент передачи данных?
Насколько я понимаю, в таблице маршрутизации только ip адреса и нет mac адресов. Тогда как роутер определяет mac-адрес следующего пункта пересылки - он имеет также и таблицу коммутации или выполняется широковещательный запрос на все соединенные устройства?

Аватар пользователя bacek
В момент включения маршрутизатора таблица пуста, как только поднимаются его интерфейсы (переходят в состояние up), появляются непосредственно подключенные сети и настроенные через эти интерфейсы статические маршруты. Чуть позже, когда протоколы маршрутизации обменяются данными, появляются и динамические маршруты. Но глобально, всё это порядка нескольких секунд с момента запуска, так что можно считать, что если всё нормально, то маршруты появляются почти сразу после включения.

Что касается второго вопроса - маршрутизатор, как и компьютер, имеет ARP таблицу, хранящую взаимосвязь между IP и MAC адресами. При включении она пуста, когда надо к кому-то обратитсья, он отправляет широковещательный ARP запрос, узнаёт MAC, соответствующий интересующему IP-шнику, запоминает его в таблице на будущее и шлёт на него данные.

Однако, это в теории, если брать практическую реализацию, то на современных маршрутизаторах применяется технология CEF (Cisco express forwarding), которая представляет из себя нечто вроде быстрого кэша, хранящего маршруты, маки, IP и интерфейсы для быстрой маршрутизации однотипных пакетов.

Спасибо за обстоятельный и доступный ответ!

Вообще, есть несколько способов узнать свой ip адрес, особенно учитывая, что сетевых плат или адаптеров может быть несколько. Поэтому иногда полезно использовать некоторые хитрости для их определения. Кстати, локальный ip адрес компьютера и его внешний достаточно часто отличаются, что частенько оставляют без внимания.

Хотелось бы тоже присоединиться к комментарию выше)
Статья шикарна)как раз для тех, кто только-только погружается во все это)
Теперь точно добавлю ваш сайт в закладки для дальнейшего изучения)

Аватар пользователя bacek
Спасибо. Будет желание пообщаться - заходите на форум.

Да класно написано, просто для понимания спасибо!

Аватар пользователя bacek
Спасибо, Санёк. Приятно слышать.

Здраствуйте! Я прочел данную статью в 2015, я проще и всеобьемляще не видел нигде. Автору большой респект честь слова!!!!!!!!!

Аватар пользователя bacek
Спасибо, буду стараться дальше.

здравствуйте. я уже не молод и погоню за технологиями не осиливаю. Но в одном серьёзном вопросе хочу разобраться досконально, поэтому у меня к Вам просьба ( наверно со мной все пользователи интернета согласятся ) вот какая: В связи с тем, что в последнее время много внимания уделяется БИТКОИНАМ, которые , уже не по слухам, генерируются при помощи нас - пользователей через наши роутеры, прошу Вас так же схематично понятливо объяснить, КАК ПРИ ПОМОЩИ ИНТЕРНЕТ-СТАТИСТИКИ ОБНАРУЖИТЬ "ЧУЖОГО" И В НАСТРОЙКАХ РОУТЕРА ВЫКЛЮЧИТЬ ИЛИ ЗАПРЕТИТЬ ПОСТОРОННИЕ СОЕДИНЕНИЯ ? ...........................буду очень признателен. allwithgood@mail.ru

Аватар пользователя bacek

Здравствуйте. Первый вопрос про майнинг bitcoin на моём сайте :) Конечно, это не совсем по адресу. Майнинг производится не на роутерах, а на компьютерах пользователей. Происходит это так:

  1. Человек заходит на вредоносный сайт/скачивает программу с вирусом/имеет операционную систему без обновлений/дырявый файрвол/отсутствующий антивирус (впишите своё)
  2. На компьютер ставится вредоносное ПО (незаметно для вас) и начинает проводить вычисления в пользу аккаунта злоумышленника.
  3. На маршрутизаторе (особенно бытовом), как мне кажется, такую активность отследить достаточно проблематично. Зато на компьютере её сложно не заметить. В первую очередь из-за ужасного падения производительности, нагревания видеокарты и прочих побочных явлений.
  4. Трафика эта штука потребляет не много.

В общем, если у вас возникли подозрения - целесообразно вдумчиво проанализировать операционную систему, посмотреть процессы, нагрузку, обновить антивирус и т.п. Ну и есть общий набор джентельменских правил, чтобы такого не происходило: используйте сложные пароли, лицензионную и обновлённую ОС, антивирус с регулярными обновлениями, строгие правила сетевого экрана.

спасибо. мне всё понятно. всего вам хорошего.

Столько всяких видео посмотрел, столько статей перечитал, но ответы на свои вопросы нашёл здесь. Чисто примера последовательного ну оочень хватило!! Огромнейшее спасибо

У меня вот два вопроса.
Первый:
Допустим, у нас есть роутер, который получил фрейм, но после него в цепи имеются два параллельных свича, после которых по маршруту к серверу стоит ещё один роутер. Первый роутер указывает mac свича? Если да, то как свич поймёт куда ему дальше посылать фрейм, если, например, помимо второго роутера к нему ещё парочка присоединена. Если mac указывается именно роутера, то получается, что посылается широковещательный сигнал на оба свича, которые посылают одинаковые фреймы роутеру номер 2? Немного не понимаю как в реальности расположены сетевые устройства в сети и как они друг друга адресуют. Если бы везде были только роутеры, то вопросов бы не было.
Второй:
Если я отправил http запрос серверу с указанием его доменного имени впервые (то есть нет в кэше ещё его ip), то как роутер поймёт куда тащить фреймы? У него внутри сразу таблица dns вшита или он сам отправляет запрос dns серверу? Да и вообще как бы как на сетевом уровне ещё на компьютере сформировать заголовок, если не известен ip? Может быть, перед отправкой и формированием пакетов, ip-протокол запрашивает у dns сервера ip, после чего уже продолжает трудиться?

Аватар пользователя bacek

Отвечаю на вопросы:

  1. У коммутатора, конечно, есть MAC адрес, но он используется для пересылки трафика, адресованного самому коммутатору (например, для управления свичом). В вашем примере можно считать что у коммутатора нет MAC адреса, так как он не имеет отношения к делу.  Как два коммутатора могут подключаться паралельно? Через третий или через хаб? Из роутреа ведь один провод выходит.  Допустим, такая схема: роутер R1-хаб-два паралельных коммутатора S1 и S2-хаб-следующий роутер R2. В этом случае получается петля на 2м уровне и сеть работать не будет. Если вы имеете в виду подключение роутера к двум свичам отдельными интерфейсами роутера, то это будет L3 петля, что допустимо, но тогда там должны исоплзоваться две разные IP подсети, на каждом интерфейсе свой IP и MAC адреса и роутер будет делать балансировку. В любом случае, MAC адрес получателя в этом примере - это MAC адрес целевого маршрутизатора, адреса коммутаторов роли не играют.
  2. Роутер ничего не знает о доменных именах, он работает с полем "IP адрес получателя". Когда вы отправляете HTTP запрос, то HTTP инкапсулируется в TCP, а TCP - в IP. В IP пакете нельзя вбить доменное имя - только IP адрес получателя. Поэтому компьютер перед отправкой сам резолвит доменное имя, спрашивая у своего ДНС сервера:  "Какой IP  соответствует тому сайту, на который я собирался делать запрос". Получает IP и именно его вставляет в пакет и именно на этот IP и смотрит роутер чтобы осуществлять маршрутизацию.

Если у вас много подобных вопросов - я могу ответить на них оптом в рамках одного платного занятия по скайпу. Судя по тому, о чём вы спрашиваете - это может открыть вам глаза :)

Добрый день.
Клиент создаёт пакет, указывая в нём в качестве IP отправителя свой адрес – 191.168.1.10, а в качестве IP получателя адрес сервера – 192.168.3.50.

Тогда вопрос, а где указывается сеть в которую нужно отправить пакет ? Насколько я знаю, то в пакете маска не указывается. Как тогда маршутизатор понимает в какую сеть доставить ?

Аватар пользователя bacek
Да, всё так. В пакете нет маски. Но маска есть на отправляющем компьютере, так что он знает, что пакет не в его сеть и пересылает маршрутизатору. На маршрутизаторе в таблице все удалённые сети перечислены тоже с масками, поэтому он сопоставляет пакет с записями в своей таблице с учётом маски, относящейся к этим записям, а не маски, которой нет в пакете.

А откуда в в таблицы Маршутизации роутера берутся Маски и Сети ?

Аватар пользователя bacek

Тут есть три основных варианта:

  1. Если говорить о сетях, которые непосредственно окружают маршрутизатор - он про них узнает автоматически в момент, когда на неком его интерфейсе назначается апи адрес с маской, он понимает, что соответствующая сеть с соответствующей маской находится радом с ним.
  2. Удалённые сети могут добавляться в таблицу маршрутизации администратором вручную (статическая маршрутизация).
  3. Или появляться благодаря динамической маршрутизации — когда один маршрутизатор рассказывает другому о сетях, которые к нему непосредственно подключены, другой передаёт третьему и т.п.

В любом случае сети из всех трёх источников вместе с маками появляются в таблице маршрутизации. Кроме того, стоит отметить, что маршрутизатор не обязан знать истиный размер удалённой сети и точную её маску. Он может иметь только общие предтавления (суммарные маршруты или маршрут по умолчанию), осталвляя решение по точной детализации сетей другому маргрутизатору, находящемуся ближе к цели.

Спасибо. Очень доступно и понятно.

Да, как говорится, то, что доктор прописал. Статья отличная.

Доступно и понятно. Особенно пример.спасибо

Здравствуйте, может вопрос не по теме, но я все же попытаюсь спросить.
Есть http сервер в интернете. А я нахожусь за NAT у меня адрес 192.168.1.11 и отправляю запрос на сервер 33.33.33.33 , сервер отвечает и пишет получателя 192.168.1.11 а в стране таких 192.168.1.11 очень много. Так как всётаки сервер отвечает клиенту?

Аватар пользователя bacek
Здравствуйте. Совершенно по теме вопрос. Если внимательно прочесть статью, то найдёте на него ответ. Смысл ната как раз в том, что между вами и сервером есть ваш маршрутизатор, у которого условно говоря есть белый адрес 2.2.2.2 и когда пакет проходит через него, маршрутизатор подменяет обратный адрес с 192.168.1.11 на 2.2.2.2 получается пакет с 2.2.2.2 на 33.33.33.33 и ответ будет с 33.33.33.33 на 2.2.2.2 - такой получатель только один. А маршрутизатор когда получит ответ подменит адрес получателя с 2.2.2.2 на 192.168.1.11, который в вашей сети тоже ровно один. Собственно это и называется трансляцией сетевых адресов )

А таких белых адресов 2.2.2.2 - в свою очередь - может быть тоже много вокруг получателя или вокруг получателя не может быть одинаковых? Спасибр.

Аватар пользователя bacek

Адрес 2.2.2.2 белый, поэтому он только в один такой в мире. У получателя может быть несколько разных белых адресов. Но благодаря нату этим адресом 2.2.2.2 могут пользоваться много внутренних клиентов с серыми адресами.

Здравствуйте! Не могу понять. А почему возле каждого маршрутизатора есть по две приписки с разными ip адресами? Это значит, что порты на одном маршрутизаторе могут быть в разных сетях?

Аватар пользователя bacek

Можно даже более сильное утверждение сделать - у маршрутизатора разные порты обязаны быть в разных сетях. Маршрутизатор занимается пересылкой пакетов из одной сети в другую (другие) поэтому в каждой сети, которая к нему подключается, у него должен быть интерфейс и свой айпи адрес.

BBB=CCC
DDD=EEE
? ? ?

Да, верно - именно так!!

Телевизор с функцией smart принимает интернет без роутера и без приставки по технологии динамический IP без MAC-адреса,верно? Где в РФ это налажено? Спасибо!!!...

Аватар пользователя bacek
Сумбурный вопрос ) DHCP (динамический айпи) работает всё-таки с MAC адресами, это самый простейший и стандартнейший способ, телевизор тут не причём в 99% организаций адреса назначаются именно так, причём не только в РФ, а во всём мире.

Здравствуйте, небольшой вопрос, если у нас устройство 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"

Правильно ли я понял из статьи, что в пределах одной сети можно работать только на канальном уровне, зная MAC адреса? Просто интересно,  есть ли вообще такая практика?

Добавить комментарий