Недавно мне довелось проводить собеседование с соискателями на должность инженера-программиста в нашу компанию. Обязательным условием приема на работу было - хорошее знание и понимания основ функционирования локальных вычислительных сетей (ЛВС). По итогам собеседования я поразился тому, что ребята, которые совсем недавно закончили ВУЗы города по техническим специальностям, плохо понимают, что такое маска подсети. В этом посте я проведу небольшую работу над их ошибками.
Практически все на вопрос: “Что такое маска подсети?“, бодро выдавали общее определение, мол маска подсети - это битовая маска, которая в результате применения побитовой конъюнкции к IP-адресу позволяет определить адрес сети. И тут же терялись когда я задавал вопрос: “Почему адрес 192.168.111.64 не может быть адресом хоста при маске 255.255.255.192?“. Чтобы хоть немного прояснить этот вопрос, давайте разберемся - из каких частей состоит адресное пространство любой подсети: - Адрес подсети;
Это адрес который используется для организации маршрутизации между несколькими подсетями. При получении IP-адреса хоста маршрутизатор накладывает на него маску и определяет адрес подсети, затем по этому адресу определяется адрес шлюза на который нужно отправить пакет. - Адреса хостов в подсети;
Это набор IP-адресов, которые могут быть выданы хостам. Чтобы подсчитать количество адресов, нужно от общего количества адресов подсети отнять два адреса. При обмене пакетами между хостами в одной подсети маршрутизатор и шлюз не нужны. - Широковещательный адрес (Broadcast).
Это адрес который не присвоен ни одному хосту в подсети. Данный адрес используется для отправки широковещательных пакетов, которые предназначены каждому хосту подсети.
Здесь нужно понимать, что широковещательный адрес необязательно должен иметь на конце цифру 255 (например, 192.168.111.255), а адрес сети 0 (например, 192.168.111.0). Это заблуждение связано с тем, что в большинстве примеров, которые приводятся в различных учебных материалах, выбирается самая простая маска подсети - 255.255.255.0 (речь идет о сетях класса “С” естественно), и в данном случае broadcast действительно будет имет на конце цифру 255, а адрес сети заканчиваться на 0. Но для других масок адрес подсети и broadcast могут принимать другие значения, например для ранее приведенного вопроса адрес подсети - 192.168.111.64, а широковещательный адрес - 192.168.111.127. Конечно, в голове применять побитовые вычисления может не каждый, но для сетей класса “С” эта задача вполне выполнима. Если же эти вычисления ну никак не даются, то аналогичные результаты можно получить аналитическим путем. Например, 256-192 = 64 (здесь 192 - это последняя тетрада маски подсети) следовательно в каждой подсети всего 64 адреса из которых 62 адреса могут быть присвоены хостам, а 2 будут использоваться для широковещательных пакетов и адреса подсети. Отсюда IP-адреса 192.168.111.0, 192.168.111.64, 192.168.111.128, 192.168.111.192 будут адресами подсетей (в качестве адреса подсети всегда используется первый ip-адрес подсети). Очевидно, что раз максимальное количество IP-адресов в сетях класса “C” равно 256, то можно получить только 4 подсети. Чтобы окончательно внести ясность в этот вопрос, привожу ответ, который я ожидал услышать от соискателей: при указанной маске адрес 192.168.111.64 - является адресом подсети и использоваться для адреса хоста не может. Есть еще один вопрос, на который так же очень часто давали неверный ответ: “Какой размер у самой маленькой подсети?“. Здесь многие называли цифру - 3. Так же некоторые считали, что в такой сети может быть 2 адреса. Правильный ответ - 4. Почему? Давайте разберемся. У маски подсети существует два наиболее часто используемые формы записи: - десятичный вид ( 255.255.255.192 );
Данный вид записи наверное знаком каждому, поэтому никаких дополнительных пояснений не требует. - двоичный вид( 11111111.11111111.11111111.11000000 ).
Здесь я немного искажаю действительность, потому что на практике используют запись следующего вида: 192.168.111.0/26, где 192.168.111.0 - адрес подсети, а /26 - количество единиц в двоичном представлении маски.
В двоичном виде маска подсети всегда(!) как правило представляет собой единицы идущие подряд слева направо. Т.е. масок вида 11111111.11111111.11111111.11001100 не бывает. При таком разбиении существует всего 8 возможных окончаний для масок в сетях класса “C” ( для упрощения дальнейшего изложения, я буду использовать только последнюю тетраду маски). Очевидно, что маска 11111111 определяет “пустую” подсеть, поэтому использовать ее бессмысленно, маска 11111110 определять подсеть из двух адресов, один из которых - адрес подсети, другой - широковещательный адрес. Создавать такую подсеть так же не имеет никакого смысла. Следующая возможная маска - 11111100 определяет сеть из 4-х адресов, два из которых используются под адрес сети и boradcast, а два могут быть адресами хоста. Обычно в такой подсети один адрес - это адрес шлюза (gateway), а другой адрес хоста. При ответе на этот вопрос нужно было понимать особенности построения масок подсетей и сказать, что минимальная подсеть может иметь 4-е адреса. Возможно, некоторые подумают, что программисту подобные детали знать совсем не обязательно, ведь как правило вопросы связанные с организацией сетей решают системные администраторы. Но на мой взгляд, подобная точка зрения не совсем верна, программист должен уметь выражать свои мысли на языке понятном системному администратору. А то знаете ли, глупо просить сетку из одного адреса для тестирования и возмущаться, когда вместо одного адреса выдается целых четыре. Если вы не согласны со мной, то смело выражайте свое мнение в комментариях!
Источник: http://www.codeart.ru/2008/5/4/maska-podseti-vy-uvereny-chto-ponimaete-dlya-chego-ona-nuzhna/ |