Я понимаю, как маски подсетей используются для разделения сети на подсети, но почему каждый компьютер в сети должен знать маску подсети, а не только маршрутизатор?
Я мог бы это понять, если бы каждый компьютер был физически соединен друг с другом проводом, но все пакеты все равно должны проходить через маршрутизатор.
Допустим, у меня есть компьютер в сети 192.168.0.0/255.255.255.0
, у которого есть IP 192.168.0.1
.
Если этот компьютер пытается получить доступ к компьютеру за пределами подсети, скажем 192.168.1.1
, он передает сообщение маршрутизатору, маршрутизатор определяет, что IP-адрес находится за пределами IP-диапазона подсети, а не передает его по подсети. сеть, он передает его в сеть, к которой он подключен (возможно, другой маршрутизатор).
if each computer were physically connected to each other with a wire
- вы должны помнить, что tcp / ip был изобретен в то время, когда это действительно так. Google10-base-2
. Существуют другие протоколы, которые работают не так, как tcp / ip, но за последние 20 лет IPv4 выиграл битву за протоколы.Ответы:
Ваши первоначальные предположения не совсем верны. То, что вы называете «маршрутизатором», - это два устройства в одном - двухпортовый маршрутизатор, внутренне подключенный к многопортовому коммутатору Ethernet . (Вот пример диаграммы .)
Это означает , что компьютеры , которые подключены непосредственно на уровне 2, и может посылать пакеты друг другу , не проходя через основной маршрутизатор - они просто переданные между портами микросхемы коммутатора. (Маршрутизатор имеет свой собственный «порт» в коммутаторе.)
Поэтому, если вы посмотрите на пакеты, используя Wireshark, вы увидите, что они напрямую используют MAC-адреса друг друга, в то время как «внешние» пакеты всегда имеют MAC-адрес маршрутизатора в качестве пункта назначения.
(Я предполагаю, что вы говорите о типичных «беспроводных маршрутизаторах», встречающихся в большинстве домов, которые являются обычной причиной такого рода вопросов. Большая сеть будет иметь отдельный маршрутизатор с одним портом на подсеть и несколькими отдельные коммутаторы (возможно, один главный и один на этаж / комнату) и несколько десятков компьютеров, подключенных к этим коммутаторам.)
Примерно то же самое с сетями Wi-Fi, за исключением того, что «коммутатор» заменен на «беспроводной мост» или «точка доступа». В обоих случаях подключенные компьютеры могут отправлять пакеты непосредственно друг другу на уровне 2, не проходя через маршрутизатор.
Комментарии:
Это опять неверно. Коммутаторы не имеют этого знания; их ядро коммутации работает на уровне 2 и не знает ничего о IP - это пересылает Ethernet кадры исключительно на основе «адрес назначения MAC - поле».
Поэтому хостам нужна маска подсети, чтобы выяснить, какой MAC-адрес использовать в качестве пункта назначения:
Если одноранговый узел находится в той же подсети, он по определению считается подключенным к сети - поэтому кадр Ethernet будет иметь MAC-адрес однорангового узла в качестве пункта назначения.
Для пиров за пределами подсети кадр Ethernet будет иметь MAC-адрес шлюза в качестве пункта назначения.
(Это относится к конфигурации по умолчанию. Некоторые сети со специальными снежинками изменяют это - например, большинство операционных систем допускают добавление дополнительных маршрутов «по соединению» для дополнительных подсетей; и наоборот, некоторые коммутаторы могут быть настроены на подделку ответов ARP, чтобы даже «по соединению» "трафик форсируется через шлюз.)
источник
Как компьютер узнает, находится ли адрес назначения в той же подсети в другой?
Проверка локального адреса и маски подсети .
Давайте проверим пару примеров:
Если у моего компьютера есть IP-адрес
192.168.0.1
и маска,255.0.0.0
это означает, что любой адрес от192.0.0.0
до192.255.255.255
находится в той же подсети. Пакеты на все эти другие компьютеры не должны проходить через маршрутизатор, их можно отправлять напрямую. Отправьте пакет ARP, чтобы получить MAC-адрес конечного компьютера, а затем отправьте пакет.Но, если мой компьютер имеет IP - адрес
192.168.0.1
и маска ,255.255.255.128
то компьютеры в той же подсети с IP adddress192.168.0.0
к192.168.0.127
только. С ними можно связаться напрямую (отправить ARP, найти MAC-адрес и т. Д.). Любой другой адрес, например,192.168.0.200
должен быть достигнут через маршрутизатор.источник
Что-то неочевидное в IP - это то, что каждое IP-устройство само является маршрутизатором .
Это можно увидеть на обычном ПК с командой «печать маршрута». Вы подключены к двум сетям: локальному сегменту Ethernet или Wi-Fi и локальной сети. Каждый пакет должен быть предметом решения о том, в какую сеть его устанавливать.
Это становится более очевидным, если вы подключаете компьютер к двум сетям, скажем, «общедоступной» и «частной». Теперь вам определенно нужна маска подсети, чтобы решить, в какую сеть отправлять пакет.
Многие люди случайно обнаружат, что ПК с одним сетевым подключением может работать с неправильно настроенной подмаской: они просто отправляют все на шлюз.
источник
Я вижу это упомянутое в некоторых других ответах здесь, но я думаю, что это может быть более понятным: на компьютерах с несколькими сетевыми интерфейсами маска подсети может использоваться для автоматического определения, на какой физический интерфейс отправлять IP-трафик на основе IP-адреса назначения.
Если вы отправляете пакет на устройство в локальной сети, подключенной к одному из интерфейсов, чтобы узнать, на какой интерфейс отправить его (если вы явно не настроили маршрут), компьютер может проверить интерфейсы, чтобы увидеть если subnet_mask & destination_ip == subnet_mask & interface_ip (от
&
Я имею в виду побитовое и и==
я имею в виду утверждать равенство), и если есть совпадение, выберите этот интерфейс.Таким образом, если у вас есть, например:
И вы отправляете пакет в 192.168.2.123 и не имеете настроенного маршрута, можно определить, что интерфейс C должен использоваться, потому что 255.255.255.0 & 192.168.2.123 == 255.255.255.0 & 192.168.2.97 .
Это было бы невозможно, если бы маска подсети не была известна, и поэтому вам нужно было бы настроить маршрут для каждого IP-адреса, на который вы отправляли данные.
источник
TCP / IP мог бы быть спроектирован так, как вы предлагаете - конечные узлы будут отправлять все на маршрутизатор и перенаправлять его к цели, которая может находиться в той же подсети, что и отправитель.
Но это не было бы оптимальным дизайном по двум причинам:
Он использует большую пропускную способность: каждый пакет между устройствами в одной подсети должен передаваться дважды: один раз от отправителя к маршрутизатору и снова от маршрутизатора к получателю. В сетях, где маршрутизатор является также сетевым коммутатором, на самом деле это не какая-то дополнительная полоса пропускания, поскольку он все равно должен был пройти через коммутатор. Но не все сетевые технологии работают так. Первоначальный проект Ethernet был технологией шины, без центрального коммутатора или повторителя.
Это увеличивает нагрузку на маршрутизатор. Даже если маршрутизатор является также коммутатором, это немного больше работы, потому что он поднялся до реализации маршрутизации Уровня 3, а не более простой коммутации Уровня 2.
Общая философия, воплощающая дизайн TCP / IP, заключается в том, что конечные узлы являются интеллектуальными устройствами, поэтому предполагается, что они способны выполнять некоторую работу. Им не нужно знать полную топологию сети, как это делают магистральные маршрутизаторы, но они знают достаточно о локальной среде, чтобы выполнить некоторые из первоначальных задач маршрутизации local-vs-remote. Для реализации этой простой начальной маршрутизации не требуется много кода.
Кроме того, устройства без маршрутизатора не обязательно находятся в одной подсети. Вы можете легко иметь несколько сетевых карт в ПК - многие имеют Ethernet и WiFi. И каждый из них может быть подключен к другой подсети, и адреса плюс маски подсети используются для определения, какую сетевую карту использовать. Если вы запускаете виртуальные машины, вероятно, существует виртуальная подсеть, соединяющая их с хост-системой.
источник
Если мы посмотрим на таблицу маршрутизации (это мой настольный компьютер):
IP-маршрут
маршрут
Любой вид передает ту же информацию. Маски подсети указывают, какие хосты напрямую доступны в этой сети, а другие хосты обнаруживаются с помощью шлюза. В частности, мы должны знать, что шлюз доступен, иначе мы не могли бы отправлять пакеты для его пересылки.
В принципе, вы можете отправить все через хост шлюза. Это будет выглядеть
или же
Я не пробовал это, но это может быть использовано для MAC-Forced Forwarding .
источник
устройства, которые люди называют маршрутизаторами, обычно не являются просто маршрутизаторами, поэтому люди иногда используют такие термины, как NAPT Router, или Home Router, или Consumer Router, чтобы предположить, что это не просто маршрутизатор. Чтобы подчеркнуть, что они не просто маршрутизаторы, эти устройства могут выполнять NAPT (который не является маршрутизацией), и у них есть встроенный коммутатор (коммутатор выполняет мостовое соединение, которое не маршрутизирует - различия между коммутатором и мостом немного не так хорошо определены - можно сказать, что мост часто имеет 2 порта и соединяет разные сетевые среды (например, Ethernet и не-Ethernet), тогда как у коммутатора будет несколько портов и одна сетевая среда). Переключатель делает мост.
Если бы коммутатор был отделен от «маршрутизатора», то, действительно, это было бы более понятно. Когда IP-адрес находится в той же сети, то пакет
направляется наидет по кабелю к следующему физически, который является коммутатором, и в конечном итоге предназначен для другого компьютера в сети (если это не был управляемый коммутатор, и вы подключались к коммутатору, например, telnet или http, и у коммутатора был свой собственный ip ), и поскольку пакет не предназначен для другой сети, пакет не достигнет маршрутизатора. Когда он предназначен для компьютера в другой сети, он, конечно, все еще идет к коммутатору, но затем продолжает работу к маршрутизатору (коммутатор направил пакет на маршрутизатор и MAC-адрес назначения пакета, поступающего в коммутатор был бы MAC-адресом маршрутизатора), и маршрут маршрутизировал бы его из правильного интерфейса маршрутизатора.С этими вещами, обычно называемыми маршрутизаторами, которые имеют внутри коммутаторы (например, не маршрутизаторы Cisco / Juniper профессионального стиля), тогда коммутатор находится внутри ... Но это только местоположение коммутатора ... Это все еще так, когда IP включен в той же сети пакет адресован коммутатору, а не маршрутизатору. И это идет только к коммутатору внутри маршрутизатора и не достигает маршрутизатора.
что вы имеете в виду здесь ... Если бы все компьютеры во всей сети были физически соединены проводом ... тогда, я думаю, вам не нужен коммутатор или маршрутизатор. То, что вы описываете, звучит немного как оригинальная сеть Ethernet ... и если они все соединены проводом, вероятно, это не будет такая большая сеть. И в любом случае это не будет провод, как вы привыкли. По пути к нему будут подключены компьютеры с «кранами». Так что я не знаю, почему вы просто добавили это предложение.
так что вы имеете в виду отложить эту идею от всех компьютеров, соединенных проводом без маршрутизатора.
И нет, даже в вашем доме они не проходят через маршрутизатор каждый раз. Даже с вашим «домашним маршрутизатором», назовите это интернет-коробкой. Они идут к выключателю в этом.
к коммутатору, то от коммутатора он идет к маршрутизатору
хорошо, маршрутизатор определяет, для какого сетевого интерфейса он предназначен. Он отправляет с одного интерфейса на другой интерфейс. Одно из различий - помимо какого интерфейса, будет ли сеть подключена напрямую или нет. Он может отправить на коммутатор, а затем на компьютер. Или это может отправить на компьютер. Или, если сеть не подключена напрямую, она перейдет на другой маршрутизатор.
и ваше последнее предложение было
и что, ты вдруг решил перестать писать?ну, я бы так не сказал. Каждый интерфейс на маршрутизаторе имеет свой диапазон IP-адресов.
Но, с вашим потребительским маршрутизатором или домашним маршрутизатором, получается, что это похоже на маршрутизатор с двумя интерфейсами, один из которых подключен к вашей стороне. И несколько портов являются портами коммутатора.
Так что, если вы думаете с точки зрения части маршрутизатора, это не значит, что это внутри подсети и снаружи, потому что потенциально много сетей. По одному на каждом интерфейсе. И маршрутизатор не будет передавать его обратно в ту же сеть, откуда он пришел. Причина, по которой он достиг маршрутизатора в первую очередь, заключается именно в том, что коммутатор (который он достиг первым) увидел MAC-адрес и увидел, что это не MAC-адрес маршрутизатора.
Компьютер, который отправил пакет, проверит, находится ли IP-адрес назначения пакета в его собственной сети или той же сети, и затем на основании этого выберет соответствующий MAC-адрес. Либо MAC-адрес компьютера, которому он предназначен (это если компьютер находится в той же сети). Или (если компьютер находится на другом интерфейсе маршрутизатора), то это будет MAC-адрес маршрутизатора. Я предполагаю, что это может ответить на заголовок вашего вопроса довольно прямо, относительно того, почему компьютер должен знать маску подсети .. В системе TCP / IP как она есть ... вот как это работает, компьютер выбирает соответствующий уровень 2 адрес, например, для Ethernet, MAC-адрес.
источник
Компьютер / устройство делает использовать маску подсети для того , чтобы вычислить адрес IP - вещания.
Интерфейсы IP, не находящиеся в случайном режиме, настроены на ответ на широковещательный IP-адрес, а также на собственный IP-адрес.
источник
Создан аккаунт только для того, чтобы ответить на это, так как я думаю, что другие слишком усложняют роль маски подсети.
Маска подсети определяет, с какими другими машинами в сети будет связываться хост. Если хост находится за пределами моей подсети, я попытаюсь связаться с этой машиной через мой шлюз. Если этот хост находится в моей подсети, то я буду общаться с этим хостом напрямую (шлюз не нужен). Кроме того, если машина, находящаяся за пределами подсети хоста, пытается установить с ней связь, эти пакеты могут оказаться глухими и немедленно отброшены.
Почему это относится к вам? Потому что, если мы не использовали сетевые маски, вы пытаетесь установить связь с DNS-сервером Google (8.8.8.8), и вам (и КАЖДОМУ другому хосту, который с ним разговаривает) необходимо знать его физический адрес (MAC-адрес). Это приведет к тому, что вашему компьютеру и всем остальным потребуется создать запись ARP для каждого интернет-компьютера, с которым вы разговариваете. Это приведет к потере оперативной памяти и замедлению работы всей сети, поскольку физический адрес машин будет передан намного дальше, чем необходимо.
источник