12

Как я понимаю из модели ISO-OSI, MAC-адреса работают на другом уровне, чем IP-адреса. Это ясно для меня.

Я могу согласиться с тем, что Ethernet (LAN) просто не использует IP-адреса для связи, но использует MAC-адреса. Я понимаю, что эти MAC-адреса нельзя использовать для маршрутизации за пределы локальной сети, так как они не определены иерархически. Я также понимаю, что IP - это лучший способ маршрутизации через большой Интернет. В чем я не совсем уверен, так это в том, что MAC-адреса - лучший способ общения в локальной сети.


Мои вопросы следующие:

  1. Разве Ethernet не может использовать IP-адреса для отправки сообщений? Я не говорю, что должен, я просто спрашиваю, мог ли бы он сделать это.
  2. Поскольку Ethernet использует для связи MAC-адреса, могу ли я создать сеть Ethernet, в которой у устройств не будет IP-адреса, а просто MAC-адрес?

6 ответов6

4

Поскольку Ethernet использует для связи MAC-адреса, могу ли я создать сеть Ethernet, в которой у устройств не будет IP-адреса, а просто MAC-адрес?

Если бы вы писали все свое программное обеспечение с нуля, то вы, безусловно, могли бы сделать это. Просто попросите программное обеспечение принять MAC-адрес в любом месте, где обычный аналог этой программы принял бы IP-адрес. Используйте все системные вызовы для отправки сырых пакетов Ethernet, а не IP-адреса, и это будет работать, но это будет огромной проблемой.

Как правило, MAC-адреса в вашей сети не соответствуют какой-либо схеме. Они сожжены в аппаратное обеспечение производителем. Они длинные и громоздкие. Мой прямо сейчас это C8-60-00-CA-4B-9A. Рядом со мной компьютер 00-40-F4-48-1B-88.

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

Это огромная проблема, так что вы, вероятно, в конечном итоге найдете способ для машин в сети автоматически обнаруживать MAC-адреса друг друга с помощью широковещательных пакетов. Затем вы дадите им способ идентифицировать себя по какому-то значимому адресу, поэтому вам придется вводить команды, такие как «telnet C8-60-00-CA-4B-9A».

Оказывается, это именно то, что делает IP - это способ использовать значимые числа для адресации хостов в сети, а не жестко кодировать MAC-адреса. Добавьте DNS поверх IP, и вы можете ввести команду, например, "telnet webserver".

Разве Ethernet не может использовать IP-адреса для отправки сообщений? Я не говорю, что должен, я просто спрашиваю, мог ли бы он сделать это.

MAC-адреса представляют собой 6 байтов информации, а IP-адреса - только 4 байта, поэтому вы не можете выполнять какое-либо сопоставление от 1 до 1. Вам нужен какой-то способ нахождения MAC-адреса (для помещения в пакет) по IP-адресу (предоставленному программным обеспечением, которое хочет связываться с другим хостом в сети).

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

Чтобы это действительно работало, затем вам также придется взломать код в сетевом стеке, чтобы фактически использовать эту систему. Вы бы в основном разорвали все, что связано с ARP (метод, который IP использует для преобразования IP-адресов в MAC-адреса). Вы извлекли бы части, которые строят / читают заголовки IP. Вместо этого вы бы заменили все это на очень простой код, который, учитывая IP-пакет для отправки на хост по адресу wxyz, создает кадр Ethernet с адресом DEST, установленным в 00-00-wxyz.

Вам также потребуется способ указать получателю пакета, для какого протокола (UDP, TCP) он предназначен. Возможно, вы могли бы вставить это где-нибудь в заголовок Ethernet, переопределив существующее поле. Может быть, использовать один из двух верхних байтов адреса источника? Это не повлияет на способность получателей получать, но может испортить некоторые коммутаторы. Вы также можете добавить протокол в начало или конец кадра Ethernet и увеличить размер полезной нагрузки на единицу - но это начинает пахнуть как заголовок IP.

Так что же ты купишь всю эту работу?

Во-первых, это сэкономит вам затраты на поиск в таблице ARP для каждого исходящего пакета. Это, вероятно, порядка только микросекунд.

Вы сохраняете работу по вычислению контрольных сумм заголовков IP и памяти, необходимой для их хранения. Это, вероятно, не важно для современного оборудования.

Вы сохраняете 16 байтов в каждом пакете в сети, так как не было бы заголовков IP. Это может сложиться в зависимости от приложения.

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

Для некоторых очень специализированных приложений это действительно имеет смысл. Однажды я работал с системой реального времени, которая использовала только широковещательные UDP-пакеты для всех коммуникаций между хостами, по единственной причине, что она избегала включения этих последовательностей ARP и непредсказуемо добавляла задержку и дрожание. Я также однажды работал над встроенной системой с ограниченными ресурсами, которая работала, посылая полезные нагрузки UDP внутри IP-пакетов напрямую (без заголовка IP), потому что это сохраняло всю сложность и память, необходимые для реализации всего ARP и маски масок и дополнительных контрольных сумм.

4

Может ли Ethernet использовать IP-адреса вместо своих собственных адресов канального уровня? Конечно, нет, если бы он хотел быть независимым от того, какой протокол уровня 3 он использовал.

Мы разрабатываем сетевые протоколы в слоях, чтобы мы могли смешивать и сочетать слои.

Первоначально Ethernet был разработан Бобом Меткалфом (Bob Metcalfe) и его коллегами из Xerox PARC, чтобы быть независимым от сетевого уровня, поскольку их целью был не только доступ по протоколу TCP/IP, но также и собственный проприетарный стек / набор сетевых протоколов Xerox Xerox.

DEC (Digital Equipment Corporation) стала еще одним первопроходцем, использовавшим его главным образом для своего стека / набора протоколов DECnet.

В конце 80-х и начале 90-х годов в корпоративных локальных сетях Ethernet работало множество конкурирующих наборов протоколов ЛВС (все они полностью независимы от TCP/IP). Помимо XNS и DECnet, были AppleTalk Apple (EtherTalk), IPX Novell, Banyan VINES, NetBEUI, DLC/LLC, IBM SNA, OSI/ISO и другие, которые я забыл.

Итак, да, вы можете использовать Ethernet без IP. Многие корпоративные сети сделали это в 80-х и 90-х годах.

Поскольку Ethernet был разработан, чтобы не заботиться о том, какой протокол Layer-3 (Network Layer) работал на нем, для этих корпоративных локальных сетей было относительно легко поддерживать сочетания оборудования различных поставщиков, и для этих локальных сетей было относительно легко добавить IPv4. поддержка, когда Интернет заработал в середине-конце 90-х годов, и для нас было относительно легко добавить поддержку IPv6 сейчас.

1

Разве Ethernet не может использовать IP-адреса для отправки сообщений? Я не говорю, что должен, я просто спрашиваю, мог ли он сделать это

Я думаю, что Ethernet мог бы использовать четырехбайтовые адреса, такие как IPv4, вместо шестибайтовых адресов. Наверное, хорошо, что они этого не сделали, потому что у них уже не осталось чисел.

Поскольку Ethernet использует для связи MAC-адреса, могу ли я создать сеть Ethernet, в которой у устройств не будет IP-адреса, а просто MAC-адрес?

Вы можете, если у вас есть программы, которые будут работать с MAC-адресами вместо IP-адресов. Конечно, вы застрянете в этой сети и не сможете связаться с другими без какой-либо хакерской атаки.

Уровень IP вам действительно нужен только в том случае, если вы планируете выполнять маршрутизацию, особенно если другая сеть может использовать технологию уровня 2, отличную от Ethernet, например Token Ring, что было реальной возможностью, когда большая часть этого была разработана. Кто знает, может ли другая технология уровня 2 стать повсеместной в будущем, если это так, то IP не зависит от нее.

0
> Couldn't Ethernet make use of IP addresses to send messages? I'm not
> saying it should, I'm just asking if it could have chosen to do so.

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

> As Ethernet uses MAC addresses for communication, could I create an
> Ethernet network where devices would not have an IP address, just a
> MAC address?

Да, вы можете, но вам не понравится его использовать, поскольку функциональность будет очень ограниченной и совсем не удобной для пользователя. Существует причина, по которой транспортный уровень был реализован.

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

Таким образом, без использования транспортного уровня, который в настоящее время означает протокол TCP/IP, у вас не было бы возможности гарантировать, что ваши данные достигли места назначения, или у вас была бы возможность автоматического сброса недостающих фрагментов.

0

IP-сети - это абстракция, уровень косвенности, то есть они являются виртуальной сетью, не связанной с каким-либо конкретным физическим способом или устройством связи.

Узел Ethernet имеет один MAC-адрес (для каждой сетевой карты), который однозначно идентифицирует его глобально. Однако этот хост может одновременно принадлежать многим IP-сетям с разными IP-адресами для каждой, при этом всегда использовать один MAC-адрес.

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

IP, или Интернет-протокол, и Ethernet решают различные проблемы: Ethernet обеспечивает связь на уровне локальной сети и только в одной локальной сети, ему не важно, к каким другим сетям локальная сеть может быть подключена через маршрутизатор. Принимая во внимание, что IP касается межсетевого взаимодействия и, таким образом, не зависит от локальной сети. Итак, мог ли Ethernet использовать IP-адреса вместо MAC-адресов? Конечно, но это ничего не даст вам, так как эти сообщения будут по-прежнему ограничены локальной сетью.

Как ответ на ваш второй вопрос, такая ситуация существует в разное время в локальной сети Ethernet, которая использует протокол динамической конфигурации хоста (DHCP) для распределения IP-адресов. Когда новый хост подключается к локальной сети, у него нет IP-адреса, поэтому он отправляет широковещательный кадр Ethernet всем устройствам и ожидает ответа от DHCP-сервера. В этот момент клиент не знает ни MAC-адреса DHCP-сервера, ни его IP-адреса, следовательно, широковещательную рассылку. Получив запрос, сервер теперь знает MAC-адрес клиента и может правильно адресовать ответ.

0

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

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

Если вы хотите что-то вроде обмена сообщениями 1:1, вам понадобится еще один протокол поверх фреймов Ethernet для обработки всего этого прослушивания для вас. Для этого часто используется двухточечный протокол (PPP), а через Ethernet это называется PPPoE. PPPoE предоставляет вам аутентификацию и шифрование, и это очень хорошая идея для вещательной сети.

Но без какой-либо информации о маршрутизации вы можете общаться только с узлами в локальной сети. Как только вы начнете использовать информацию о маршрутизации для ретрансляции сообщений (например, в Интернет), вы захотите использовать протокол маршрутизации в той или иной форме, такой как IP или IPX. И вам, вероятно, также понадобится управление передачей (TCP) ...

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .