Маска подсети.
Сети делятся на классы:
Класс A.
"Огромные" сети. Адреса этих сетей лежат в промежутке: 1 - 126. Маска сети: 255.0.0.0, Содержит до 16777216 адресов (256*256*256). Адреса хостов в этих сетях вида: 125.*.*.*
Класс B.
"Средние" сети. Адреса этих сетей лежат в промежутке: 128.0 - 191.255, Маска сети: 255.255.0.0, Содержит до 65536 адресов (256*256). Адреса хостов в этих сетях вида: 136.12.*.*
Класс C.
"Маленькие" сети. Адреса сетей лежат в интервале: 192.0.0 - 255.254.255, Маска сети: 255.255.255.0, Содержит 254 адреса. Адреса хостов в этих сетях вида: 195.136.12.*
Соответственно маска подсети это подмножество какого либо из приведённых выше классов.
IP-адрес (v4) состоит из 32-бит. IPv6 - 128 бит.
Записывают IPv4-адрес, думаю, все знают, как. Четыре октета (то же, что байта, но если вы хотите блеснуть, то говорите «октет» — сразу сойдете за своего) в десятичном представлении без начальных нулей, разделенные точками: «192.168.11.10».
В заголовке IP-пакета есть поля source IP и destination IP: адреса источника (кто посылает) и назначения (кому). Как на почтовом конверте. Внутри пакетов у IP-адресов нет никаких масок. Разделителей между октетами тоже нет. Просто 32-бита на адрес назначения и еще 32 на адрес источника.
Однако, когда IP-адрес присваивается интерфейсу (сетевому адаптеру или как там его еще называют) компьютера или маршрутизатора, то кроме самого адреса данного устройства ему назначают еще и маску подсети. Еще раз: маска не передается в заголовках IP-пакетов.
Компьютерам маска подсети нужна для определения границ — ни за что не угадаете чего — подсети. Чтоб каждый мог определить, кто находится с ним в одной [под]сети, а кто — за ее пределами. (Вообще-то можно говорить просто «сети», часто этот термин используют именно в значении «IP-подсеть».) Дело в том, что внутри одной сети компьютеры обмениваются пакетами «напрямую», а когда нужно послать пакет в другую сеть — шлют их шлюзу по умолчанию (третий настраиваемый в сетевых свойствах параметр, если вы помните). Разберемся, как это происходит.
|
Маска подсети — это тоже 32-бита. Но в отличии от IP-адреса, нули и единицы в ней не могут чередоваться. Всегда сначала идет сколько-то единиц, потом сколько-то нулей. Не может быть маски
120.22.123.12=01111000.00010110.01111011.00001100.
Но может быть маска
255.255.248.0=11111111.11111111.11111000.00000000.
Сначала N единиц, потом 32-N нулей. Несложно догадаться, что такая форма записи является избыточной. Вполне достаточно числа N, называемого длиной маски. Так и делают: пишут 192.168.11.10/21 вместо 192.168.11.10 255.255.248.0. Обе формы несут один и тот же смысл, но первая заметно удобнее.
Чтобы определить границы подсети, компьютер делает побитовое умножение (логическое И) между IP-адресом и маской, получая на выходе адрес с обнуленными битами в позициях нулей маски.
Практически все на вопрос: “ Что такое маска подсети? “, бодро выдавали общее определение, мол маска подсети – это битовая маска, которая в результате применения побитовой конъюнкции к IP-адресу позволяет определить адрес сети. И тут же терялись когда я задавал вопрос: “ Почему адрес 192.168.111.64 не может быть адресом хоста при маске 255.255.255.192? “.
Чтобы хоть немного прояснить этот вопрос, давайте разберемся – из каких частей состоит адресное пространство любой подсети:
1) Адрес подсети;
Это адрес который используется для организации маршрутизации между несколькими подсетями. При получении IP-адреса хоста маршрутизатор накладывает на него маску и определяет адрес подсети, затем по этому адресу определяется адрес шлюза на который нужно отправить пакет.
|
1) Адреса хостов в подсети;
Это набор IP-адресов, которые могут быть выданы хостам. Чтобы подсчитать количество адресов, нужно от общего количества адресов подсети отнять два адреса. При обмене пакетами между хостами в одной подсети маршрутизатор и шлюз не нужны.
2) Широковещательный адрес (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. Почему? Давайте разберемся.
У маски подсети существует два наиболее часто используемые формы записи:
1) десятичный вид (255.255.255.192);
Данный вид записи наверное знаком каждому, поэтому никаких дополнительных пояснений не требует.
2) двоичный вид(11111111.11111111.11111111.11000000).
Здесь я немного искажаю действительность, потому что на практике используют запись следующего вида: 192.168.111.0/26, где 192.168.111.0 – адрес подсети, а /26 – количество единиц в двоичном представлении маски.
В двоичном виде маска подсети всегда(!) как правило представляет собой единицы идущие подряд слева направо. Т.е. масок вида 11111111.11111111.11111111.1100 11 00 не бывает. При таком разбиении существует всего 8 возможных окончаний для масок в сетях класса “C” (для упрощения дальнейшего изложения, я буду использовать только последнюю тетраду маски). Очевидно, что маска 11111111 определяет “пустую” подсеть, поэтому использовать ее бессмысленно, маска 11111110 определять подсеть из двух адресов, один из которых – адрес подсети, другой – широковещательный адрес. Создавать такую подсеть так же не имеет никакого смысла. Следующая возможная маска – 11111100 определяет сеть из 4-х адресов, два из которых используются под адрес сети и boradcast, а два могут быть адресами хоста. Обычно в такой подсети один адрес – это адрес шлюза (gateway), а другой адрес хоста.
При ответе на этот вопрос нужно было понимать особенности построения масок подсетей и сказать, что минимальная подсеть может иметь 4-е адреса.
Возможно, некоторые подумают, что программисту подобные детали знать совсем не обязательно, ведь как правило вопросы связанные с организацией сетей решают системные администраторы. Но на мой взгляд, подобная точка зрения не совсем верна, программист должен уметь выражать свои мысли на языке понятном системному администратору. А то знаете ли, глупо просить сетку из одного адреса для тестирования и возмущаться, когда вместо одного адреса выдается целых четыре. Если вы не согласны со мной, то смело выражайте свое мнение в комментариях!
SMTP, FTP, POP3, HTTP, HTTPS
Сетевая модель TCP/IP
Для передачи информации от одной системы к другой используется многоуровневое семейство протоколов.
Самый верхний уровень имеет название прикладной. При наборе адреса в браузере вы нажимаете на клавишу Enter и ждете. Протокол прикладного уровня берет этот адрес, затем прибавляет к нему служебную информацию и разделяет те данные, которые получились на кусочки, а затем происходит упаковка и передача протоколу, лежащему на уровень ниже каждого кусочка. Процедура повторяется несколько раз, в результате этого, кусочки превращаются в колебания напряжения или радиосигналы.
В этом состоянии их и получает система, которой эти данные предназначены, она делает с ними тоже самое, что и ваша только в обратном порядке.
Происходит серия преобразований, благодаря которым данные поднимаются на прикладной уровень, там, где их можно интерпретировать.
Вот так при обращении к глобальной сети работает каждый протокол прикладного уровня семейства TCP/IP.