Может ли кто-нибудь прояснить для меня назначение шлюза?
В чем разница между добавлением шлюза 0.0.0.0
и назначением определенного IP-адреса в качестве шлюза?
решение1
0.0.0.0
имеет конкретное значение «не указано». Это примерно переводится как «нет ничего» в контексте шлюза. Конечно, это предполагает, что сеть локально подключена, так как нет промежуточного перехода. Машина отправит пакет из этого интерфейса, как будто на машину, подключенную к этому сегменту, что в Ethernet означает, что вместо MAC-адреса шлюза следующего перехода будет использоваться MAC-адрес хоста назначения.
Как пункт назначения, 0.0.0.0/0
является особенным: если нет сетевых битов, то и в сетевом номере ничего быть не может. Поэтому он, естественно, не указан. Для сопоставления префиксов он маскирует все биты, поэтому все адреса находятся в пределах 0.0.0.0/0
; по этой причине он используется для обозначения «шлюза по умолчанию» в таблицах маршрутизации. Это также наименее специфичный возможный маршрут, поэтому выборы, которые отдают приоритет специфичности, выберут все остальное доступное и будут соответствовать 0.0.0.0/0
в качестве последнего варианта.
Однако, придерживаясь вашего вопроса, да, это имеет особое значение. Это означает, что сеть локально подключена к этому интерфейсу и больше не нужно никаких переходов, чтобы добраться до нее.
решение2
Со страницы Википедии0.0.0.0:
выдержка
В версии 4 интернет-протокола адрес 0.0.0.0 является немаршрутизируемым метаадресом, используемым для обозначения недействительной, неизвестной или неприменимой цели. Придание особого значения в противном случае недействительному фрагменту данных является применением внутриполосной сигнализации.
Со страницы ВикипедииМаршрут по умолчанию.
выдержка
Маршрут по умолчанию в протоколе Интернета версии 4 (IPv4) обозначен как нулевой адрес 0.0.0.0/0 в нотации CIDR, часто называемый маршрутом с четырьмя нулями. Маска подсети задается как /0, что фактически определяет все сети и является самым коротким возможным соответствием. Поиск маршрута, который не соответствует ни одному другому маршруту, возвращается к этому маршруту. Аналогично, в IPv6 маршрут по умолчанию задается как ::/0.
В сегменте сети самого высокого уровня администраторы обычно указывают маршрут по умолчанию для данного хоста на маршрутизатор, который имеет подключение к поставщику сетевых услуг. Таким образом, пакеты с пунктами назначения за пределами локальной сети организации, обычно пункты назначения в Интернете или глобальной сети, пересылаются на маршрутизатор с подключением к этому провайдеру.
Устройство, на которое указывает маршрут по умолчанию, часто называют шлюзом по умолчанию, и оно часто выполняет другие функции, такие как фильтрация пакетов, межсетевой экран или операции прокси-сервера.
Пример
Из вашего вопроса я делаю вывод, что у вас есть что-то вроде этого:
$ netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
0.0.0.0 192.168.1.254 0.0.0.0 UG 0 0 0 eth0
Это означает, что для каждого из сетевых пунктов назначения (192.168.1.0 или 169.254.0.0) шлюзом по умолчанию является пункт назначения 0.0.0.0, если пакетНЕТпредназначенный для любого адреса в этой конкретной сети. Для назначения 0.0.0.0 используйте IP-адрес 192.168.1.254.
Эти правила направлены на то, чтобы направить весь трафик, который не соответствует ни одному из известных нам маршрутов, на маршрут по умолчанию.
Пара примеров
Допустим, у нас есть пакет с IP 192.168.1.110. Первое правило проверяется, и этот IP соответствует этой сети, поэтому он доставляется.
Если бы у нас был пакет 150.12.13.1, то 3-е правило было бы в силе, и пакет был бы направлен на 192.168.1.254.
решение3
Смотрите, 0.0.0.0 используется только в таблицах маршрутизации, а НЕ для назначения хосту.
Хосты (компьютеры с IP-адресом) ведут таблицу маршрутизации, чтобы решить, как отправлять свои сообщения в нужное место.
Сценарий 1: ПК-А хочет отправить сообщение ПК-Б в ТОЙ ЖЕ СЕТИ:
1) ПК-А проверяет свою таблицу маршрутизации, чтобы увидеть, есть ли соответствие для IP-адреса назначения. 2) Таблица маршрутизации показывает, что пункт назначения находится в той же сети, находит интерфейс, подключенный к этой сети, затем пересылает сообщение из этого интерфейса непосредственно к пункту назначения.
Сценарий 2: ПК-А хочет отправить сообщение на сервер-Z в УДАЛЕННОЙ СЕТИ (НЕ в той же сети):
1) ПК-А проверяет свою таблицу маршрутизации и не может найти совпадений (конечно, потому что хосты не отслеживают хосты в удаленных сетях — это работа маршрутизаторов).
2) Однако ПК настроен с IP-адресом из четырех нулей и маской подсети, сопоставленной с вашим маршрутизатором (шлюзом по умолчанию для ДРУГИХ, УДАЛЕННЫХ, ДРУГИХ сетей), как показано ниже:
(0.0.0.0 0.0.0.0 192.168.0.1 интерфейс)
Что означает ноль? Это означает ни одного. Итак, если ваш компьютер не отслеживает, где находятся удаленные хосты, и проверяет свою таблицу маршрутизации каждый раз, когда хочет отправить сообщение, чтобы узнать, нужно ли отправить его в ТУ ЖЕ (локальную) сеть или в УДАЛЕННУЮ сеть, то как он отправляет сообщение в удаленную сеть?
Он отправляет его маршрутизатору и позволяет маршрутизатору выполнить свою работу по маршрутизации пакета по лучшему пути. Таким образом, хост/ПК/компьютер должен знать, что если он не может найти запись в своей таблице маршрутизации для того, куда отправить сообщение (т. е. 0.0.0.0), то он знает, что нужно отправить его маршрутизатору, который является IP-адресом, связанным с записью (0.0.0.0 0.0.0.0 192.168.0.1 interface) и использует связанный интерфейс/NIC/сетевой адаптер, который подключен к нему.
Таким образом, 0.0.0.0 используется таблицами маршрутизации на хостах и маршрутизаторах, чтобы знать, куда отправлять данные, когда не найдено ни одного соответствия для достижения пункта назначения, и должен быть сопоставлен с IP-адресом маршрутизатора и интерфейсом для достижения этого маршрутизатора.
решение4
Основное объяснение
0.0.0.0 имеет особое значениеШлюз по умолчаниюно также соответствует 0.0.0.0Место назначениявход.
На первый взгляд, вы можете подумать, что в любом случае все проходит через шлюз по умолчанию. Однако, чтобы полностью понять концепцию, вы должны увидеть ее в контексте устройства, имеющего несколько сетевых интерфейсов (Ethernet, Wi-Fi, Bluetooth, ...).
Как шлюз
Если в качестве шлюза указан 0.0.0.0, это означает: прочитать строку с 0.0.0.0 в качестве пункта назначения и направить пакет через этот интерфейс.
Но если у вас есть второй сетевой интерфейс или несколько, вы можете указать IP-адрес одного из этих сетевых интерфейсов в качестве шлюза вместо 0.0.0.0, и пакеты будут маршрутизироваться через них.
Как пункт назначения
Таблица маршрутизации анализируется для поиска наиболее точного пункта назначения (соответствующего самому высокому номеру префикса).
По крайней мере, если не найдено более конкретного адресата, вы всегда будете соответствовать 0.0.0.0/0 (нотация CIDR, эквивалентная 0.0.0.0 с маской 0.0.0.0), поскольку при двоичном сравнении между IP-адресом назначения и маской 0.0.0.0 он будет соответствовать любому IP-адресу, включая сам IP-адрес 0.0.0.0.
Вот почему 0.0.0.0 используется в качестве шлюза по умолчанию и особенно полезен, когда у вас есть несколько возможных шлюзов (несколько сетевых интерфейсов на вашем устройстве).