Почему маски подсети актуальны для отдельного компьютера в сети?

Я понимаю, как маски подсети используются для разделения сети на подсети, но почему каждый компьютер в сети должен знать маску подсети, а не только маршрутизатор?

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

допустим, у меня есть компьютер в сети 192.168.0.0/255.255.255.0, который имеет IP 192.168.0.1.

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

5
задан Orpedo
источник

9 ответов

ваши исходные предположения не совсем корректно. То, что вы называете "маршрутизатором", – это два устройства в одном-двухпортовый маршрутизатор, внутренне подключенный к многопортовому Ethernet-коммутатор. (Вот вам пример - схемы.)

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

поэтому, если вы посмотрите на пакеты, использующие Wireshark, вы увидите, что они напрямую используют MAC-адреса друг друга, в то время как "внешние" пакеты всегда имеют MAC маршрутизатора в качестве места назначения.

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

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


комментарии:

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

опять неверно. Коммутаторы не имеют этих знаний; их ядро коммутации работает на уровне 2 и не знает ничего about IP-IT пересылает Ethernet-кадры исключительно на основе поля "MAC-адрес назначения".

таким образом, хосты должны маску подсети, чтобы выяснить, что MAC-адрес для использования в качестве назначения:

  • Если узел находится в той же подсети, считается on-link по определению-таким образом, фрейм Ethernet будет иметь Mac узла в качестве назначения.

  • для сверстников за пределами подсеть, фрейм Ethernet будет иметь шлюза MAC в качестве пункта назначения.

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

77
отвечен grawity 2017-03-22 17:51:12
источник

как компьютер узнает, если адрес назначения в одной подсети в другую?

проверка локальный адрес и маска подсети.

давайте проверим пару примеров:

если мой компьютер имеет 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 address 192.168.0.0to 192.168.0.127 только. С ними можно связаться напрямую (отправить ARP, найти MAC-адрес и т. д.). Любой другой адрес, например 192.168.0.200 должно быть достигнуто, проходящего через маршрутизатор.

32
отвечен jcbermu 2017-03-22 10:04:40
источник

Что-то неочевидное об IP является то, что каждое IP-устройство сам по себе маршрутизатор.

Это можно увидеть на обычном ПК с помощью команды "печать маршрута". Вы подключены к двум сетям: локальной сети Ethernet или сегменту Wi-Fi и сети localhost. Каждый пакет должен быть предметом решения относительно того, к какой сети включить его.

Это становится более очевидным, если вы поместите свой компьютер в две сети, скажем, "публичную" и "частную". Теперь вы определенно нужна маска подсети, чтобы решить, в какую сеть отправить пакет.

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

11
отвечен pjc50 2017-03-22 14:18:11
источник

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

Если вы отправляете пакет на устройство в локальной сети, подключенной к одному из интерфейсов, для того, чтобы знать, какой интерфейс, чтобы отправить его на (Если вы не настроили маршрут явно), компьютер может проверить интерфейсы, чтобы увидеть, если subnet_mask & destination_ip == subnet_mask & interface_ip (by & Я имею в виду побитовое и и == Я имею в виду, чтобы утверждать равенство), и если есть совпадение, выбрать тот интерфейс.

таким образом, если у вас есть например:

  • интерфейс A с 192.168.1.42 / 24
  • интерфейс B с 10.0.0.15/24
  • интерфейс C с 192.168.2.97 / 24

и вы пошлите пакет к 192.168.2.123 и не имейте настроенный маршрут, это может быть определено, что интерфейс C должен использоваться, потому что 255.255.255.0 & 192.168.2.123 == 255.255.255.0 & 192.168.2.97.

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

6
отвечен Jason C 2017-03-23 08:38:29
источник

если мы посмотрим на таблицу маршрутизации (это моя настольная машина):

ip route

default via 172.20.25.1 dev eth1 
172.20.25.0/24 dev eth1 proto kernel scope link src 172.20.25.33 
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.1

маршрут

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         172.20.25.1     0.0.0.0         UG    0      0        0 eth1
172.20.25.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0

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

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

default via 172.20.25.1 dev eth1 
172.20.25.1 dev eth1 proto kernel scope link src 172.20.25.33 

или

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         172.20.25.1     0.0.0.0         UG    0      0        0 eth1
172.20.25.1     0.0.0.0         255.255.255.255 U     0      0      

Я не пробовал, но его можно использовать для МАК-принудительная переадресация.

5
отвечен Toby Speight 2017-03-22 18:41:44
источник

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

но это не было бы оптимальной конструкцией, по двум причинам:

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

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

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

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

5
отвечен Barmar 2017-03-24 17:55:58
источник

хорошо, поэтому я понимаю, как маски подсети используются для разделения сети в подсети, но мой вопрос в том, почему каждый компьютер в сеть нужно знать маску подсети, а не только маршрутизатор?

ну, устройства, которые люди называют маршрутизаторами, обычно не просто маршрутизаторы.. поэтому люди иногда используют такие термины, как NAPT Router, Home Router или Consumer Router, чтобы предположить, что это не просто маршрутизатор. Чтобы сделать точку зрения, они не просто маршрутизаторы, эти устройства могут делать НАПТ(не маршрута), и они имеют выключателя, встроенного в(переключатель не в режиме моста, который не маршрутизации - различия между коммутатором и мостом немного не так четко - можно сказать, что мост будет часто имеют 2 порта и подключения различных сетевых сред(например, Ethernet и не-Ethernet), в то время как коммутатор будет иметь несколько портов и той же сетевой среде). Переключатель не наводить.

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

С этими вещами, обычно называемыми маршрутизаторами, которые имеют коммутаторы внутри них (например, не маршрутизаторы cisco/juniper профессионального стиля), тогда выключатель внутри.. Но это только расположение переключателя.. Это все равно, что если IP в той же сети, то пакет адресован не к маршрутизатору. И это идет только к коммутатору внутри маршрутизатора и не достигает маршрутизатора.

Я мог бы понять это, если бы каждый компьютер был физически подключен к друг друга проволокой,

что вы имеете в виду здесь.. Если все компьютеры во всей сети были физически соединенный с проводом.. тогда, я думаю, вам не понадобится коммутатор или маршрутизатор. То, что вы описываете, немного похоже на оригинальный ethernet.. и если они все связаны проводом, то, скорее всего, это не такая большая сеть. Во всяком случае, это не будет проволока, как вы привыкли. У него были бы компьютеры, подключенные по пути к нему "кранами". Так что я не знаю, почему вы просто бросили это предложение.

но все пакеты должны проходить через маршрутизатор в любом случае.

Так значит, отложив эту идею на всех компьютерах, подключенных проводом без роутера.

и нет, даже в вашем доме, то они не проходят через маршрутизатор каждый раз. Даже с вашим "домашним маршрутизатором", назовите его интернет-коробкой. Они идут к выключателю в нем.

допустим, у меня есть компьютер в сети 192.168.0.0 / 255.255.255.0, которые имеют IP 192.168.0.1.

если этот компьютер пытается достичь компьютер вне подсети, позволяет скажем 192.168.1.1, он передает сообщение маршрутизатору,

к коммутатору, то от коммутатора он идет к маршрутизатору

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

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

и Ваше последнее предложение было

он передает сообщение маршрутизатору,

а потом что, ты вдруг решил остановиться писать?

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

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

но, с вашим маршрутизатором едока или домашним маршрутизатором, что случается оно как маршрутизатор с 2 интерфейсами, одним вашим сторона переключателя, подключенного к нему. И несколько портов являются портами коммутатора.

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

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

2
отвечен barlop 2017-03-23 13:25:10
источник

но почему маска подсети тогда дается для амунитора/устройства, когда она ни для чего не нужна? – Orpedo 22 марта в 13:45

компьютер/устройство тут используйте маску подсети для вычисления широковещательного IP-адреса.

IP-интерфейсы не в беспорядочном режиме настроены для ответа на широковещательный IP-адрес, а также на их собственный IP-адрес.

1
отвечен Joe Inwap 2017-03-27 05:11:43
источник

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

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

какое это имеет отношение к вам? Потому что если мы не используем маску подсети, то при попытке связаться с DNS-сервером Google (8.8.8.8) вам (и любому другому хосту, который с ним общается) необходимо знать его физический адрес (MAC-адрес). Это приведет к тому, что ваш компьютер и все остальные должны создать запись ARP для каждой интернет-машины, с которой вы разговариваете. Это будет тратить оперативную память и замедлить все сети в качестве физического адреса машин передается гораздо дальше, чем нужно.

0
отвечен Szeraax 2017-03-24 18:35:27
источник

Другие вопросы ip networking router routing subnet