Зачем нам нужно давать IP-адреса каждому интерфейсу? Разве не было бы достаточно дать по одному на каждое устройство?
Зачем нам нужно давать IP-адреса каждому интерфейсу? Разве не было бы достаточно дать по одному на каждое устройство?
Ответы:
Подключение интерфейса к сети делает его частью этой сети. Следовательно, IP-адрес является свойством соединения, а не хоста.
Аналогично, хост может иметь много сетевых подключений и, соответственно, IP-адресов. Разные интерфейсы часто имеют разные функции, поэтому важно различать их (например, внутренняя консоль, публичные сервисы, iSCSI).
Маршрутизаторы требуют нескольких IP-адресов для своих интерфейсов.
Нет.
Тем не менее, давайте посмотрим на упрощенный пример:
У меня есть компьютер с тремя интерфейсами: eth0
(проводной Ethernet), wlan0
(wifi) и vboxnet0
(virtualbox). Один из интерфейсов подключен к внутренней сети, один - к Интернету, а последний - к сети виртуальных компьютеров. Допустим, у меня есть только один адрес, 10.1.2.3, и я хочу отправить много пакетов на 192.168.1.2, доступных в одной из этих сетей - куда мне их отправлять? Нельзя просто отправить их куда угодно, такое поведение затопит все сети в короткие сроки.
Но если интерфейс eth0 имеет 192.168.1.3, wlan0 имеет 10.1.2.3, а vboxnet0 имеет 172.0.0.1, то в таблице маршрутизации по умолчанию, вероятно, будет указано «отправить его из eth0». (Очевидно, что это может быть намного сложнее с более сложными правилами маршрутизации).
И наоборот, я могу захотеть запустить службу только на интерфейсе, открытом для частной сети - поэтому, когда запрос поступает на другой интерфейс, он вообще не обрабатывается.
Случай 1: Маршрутизаторы
Теоретически это было бы возможно.
Однако обычно IP-пакет отправляется «напрямую» в пункт назначения, когда IP-адрес «соответствует» определенной сетевой маске (например, 10.0.0.0/28); в противном случае пакет отправляется через маршрутизатор.
Это означает:
Пакеты, отправляемые с одного компьютера на другой в одной из двух сетей, не проходят через маршрутизатор.
Это означает, что IP-адреса каждого компьютера соответствуют сетевой маске сети, к которой они подключены.
Пакеты, отправляемые на маршрутизатор (включая пакеты, маршрутизируемые маршрутизатором!), Не отправляются с компьютера на маршрутизатор через второй маршрутизатор.
Это означает, что IP-адрес маршрутизатора должен соответствовать сетевым маскам обеих сетей.
Однако IP-пакеты, отправляемые с одного компьютера в одной сети на компьютер в другой сети, отправляются через маршрутизатор.
Это означает, что IP-адреса компьютеров в одной сети не должны совпадать с маской сети другой сети.
Почти невозможно выбрать IP-адрес и две сетевые маски таким образом, чтобы один IP-адрес соответствовал обеим сетевым маскам, но многие IP-адреса соответствуют только одной сетевой маске.
Случай 2: разные частные сети
У нас может быть случай, что компьютер подключен к двум частным сетям, которые не могут обмениваться данными друг с другом.
В этом случае компьютер может иметь одинаковый IP-адрес в обеих сетях.
В случае IPv4 большинство ОС не будут поддерживать это, потому что ОС используют сетевые маски двух сетей, чтобы различать их. Сети должны иметь разные сетевые маски ...
В случае IPv6 (с использованием «локальных ссылок») компьютер может иметь одинаковый (локальный) IP-адрес в двух разных сетях - и, следовательно, две сетевые карты могут иметь один и тот же IP-адрес!
Устройство с IP-адресом существует в сети.
Маршрутизатор - это устройство, основной целью которого является передача трафика между сетями .
Чтобы маршрутизатор мог передавать пакеты между двумя сетями, он должен существовать в обеих сетях.
Маршрутизатор будет иметь «руку» внутри каждой сети - или, как мы ее называем, интерфейс . А интерфейс существует в сети, назначая ему IP-адрес в сети.
Следовательно, при настройке маршрутизатора, каждый интерфейс получает IP - адрес для идентификации сети , которым принадлежит , что маршрутизатор внутри .
Отказ от ответственности: ссылка выше на мой блог. Мой блог не монетизирован. Я не получаю выгоды от того, что вы читаете это. Я предоставляю ссылку просто для вашей (и любой другой читатель) пользы.
Мне было интересно, почему мы должны давать IP-адреса для каждого интерфейса? Разве недостаточно для каждого устройства?
Позвольте мне начать с оспаривания вашего предположения. Почему вы говорите, что это не так, как ведут себя машины? Скажем, я назначил 192.168.1.1/24 для eth1 и 192.168.2.1/24 для eth2. Помимо установки маршрута для 192.168.1.0/24 out eth1 и 192.168.2.0/24 out eth2 и определения предпочтительного исходного IP-адреса для пакетов, отправляемых по этому маршруту, насколько действительно имеет значение, какому интерфейсу я назначаю IP-адрес? Что действительно меняется? В каком смысле машина не ведет себя так, как будто все IP-адреса, назначенные интерфейсам на машине, принадлежат машине?
Оба подхода используются. Наиболее распространенный подход на самом деле является гибридом этих двух подходов.
В экстремальном случае «дать устройству IP-адрес» можно представить устройство, которое ведет себя так, как будто все его интерфейсы подключены к фильтрующему мосту с одним IP-адресом, назначенным мосту.
В экстремальной ситуации «дать каждому интерфейсу IP-адрес» вы можете представить устройство, которое ведет себя так, как если бы каждый интерфейс был похож на отдельную машину. (Посмотрите здесь, если вы думаете, что именно так устройства работают в настоящее время, или подумайте о ком-то, кто подключается к IP-адресу, назначенному одному интерфейсу, но пакеты приходят и отправляются другим.)
На практике большинство машин работают где-то посередине. Они действуют так, как если бы все IP-адреса принадлежали машине. Назначение IP-адреса определенному устройству на самом деле не делает ничего особенного, кроме указания ОС установить маршрут по умолчанию из этого интерфейса и установить исходный IP-адрес по умолчанию для пакетов, отправляемых этим интерфейсом, где IP-адрес источника отсутствует. т вынужден.
В противном случае они ведут себя так, как будто все IP-адреса принадлежат машине. Способ обработки пакета мало зависит от того, на каком интерфейсе он получен - пакеты с исходным IP-адресом, назначенным одному интерфейсу, полученному на другом, являются обычными. Какому интерфейсу назначен адрес, напрямую не влияет на какой интерфейс отправляется пакет, таблица маршрутизации определяет это.
В общем случае вам нужен один IP-адрес для каждой локальной сети, к которой вы подключаетесь, и именно так был определен TCP / IP: каждый хост в данной локальной сети имеет IP-адрес, который позволяет:
Пока у вас есть локальные сети с несколькими подключенными к нему устройствами (большинство локальных сетей 802.x, включая Ethernet, Wi-Fi), довольно сложно обойти это, если вы принципиально не измените работу TCP / IP.
Однако на самом деле этого можно избежать, хотя это довольно специфично.
Рассмотрим сеть, в которой есть только двухточечные соединения (двухточечная сеть Ethernet между двумя устройствами без коммутатора или концентратора, DSL-соединения, SONET / SDH-соединения, Frame Relay или VC ATM ...).
Обычное соглашение заключается в использовании / 30 для каждой ссылки, поэтому устройство на каждом конце имеет IP-адрес в этой ссылке.
Но вы можете использовать «IP-ненумерованный» и не связывать IP-адреса с этими ссылками. Теперь вы назначаете IP для интерфейса обратной связи устройства (на самом деле любой интерфейс, но loopback является самым простым для этой цели), и вы используете протокол динамической маршрутизации (IS-IS, OSPF, EIGRP ...). Этот протокол маршрутизации будет рекламировать, как маршрутизировать трафик на этот IP-адрес через различные ненумерованные ссылки.
IP-адреса включают информацию о маршрутизации. IP - адрес разделяется на две составляющие, на номер сети и номер хоста , на основании назначенной длину префикса (который первоначально был выражен в виде маски сети, и это до сих пор часто , как это внутренне реализовано в сетевых стеках).
Для правильной работы маршрутизации все устройства, подключенные к определенной сети, должны иметь адреса с одинаковым номером сети. Отправители определяют, находится ли получатель в той же или другой сети, сравнивая свой собственный номер сети с адресом получателя. Если они находятся в одной сети, они отправляют напрямую; в противном случае они отправляют маршрутизатору, задача которого - доставить сообщение ближе к месту назначения.
Поэтому, если устройство подключено к нескольким сетям, ему нужен адрес в каждой из этих сетей, чтобы к нему могли обращаться устройства в этой сети.
Тем не менее, на самом деле нет необходимости назначать адреса конкретно для определенных сетевых интерфейсов. Устройство может просто иметь список всех IP-адресов, которыми оно владеет, в одной таблице. Но интерфейсам по-прежнему нужна информация о том, к какой сети они подключены. Назначая IP-адрес и маску сети каждому интерфейсу, мы помещаем эту информацию в одном месте, упрощая проект. Нет необходимости в дополнительном коде для согласования списка IP-адресов со списком сетей, к которым подключены интерфейсы.
Может быть достаточно иметь один IP в стандартном случае, но, как подчеркивают другие ответы, во многих случаях это не так.
Другие ответы уже упоминали случай маршрутизатора. В одном из них упоминается virtualbox, который относится к виртуальным машинам: на одном физическом устройстве может быть несколько виртуальных машин. Другой случай - это виртуальные локальные сети, которые вы могли бы подключить к одной сетевой карте, нескольким разным виртуальным локальным сетям с разными IP-адресами. И даже по некоторым причинам у вас может быть интерфейс с несколькими IP-адресами, например, потому что вы хотите запустить несколько веб-серверов на TCP-порту 80. Такая конфигурация не является редкостью для серверов, у арендуемого оборудования может быть одна сетевая карта , но у вас будет настроено несколько IP-адресов.