
Полный текст первых минут лекции «Двуичная арифметика адресов IP» из видеокурса PracticU – субтитры с временной меткой для каждого абзаца. Так можно прочитать и найти нужные темы ещё до начала обучения.
Здравствуйте, назовём эту лекцию так: Арифметика IP-адресов для продвинутых, потому что мы будем работать на уровне отдельных битов. Но начнём с самого общего.
Зачем вообще разделять на подсети? Первая причина — не сделать просто единую сеть. Это соображение безопасности. Например, в моей компании для посетителей я хочу отдельную сеть Wi-Fi, а для рабочих же станций моих работников я хочу свою сеть, потому что все, кто находится в единой сети,
имеют прямой доступ друг к другу. Таким образом, если бы посетитель моей компании находился в той же сети, что и моей рабочей станции, и мои серверы, то он мог бы попытаться напрямую с ними связаться и их взломать.
Поэтому компьютеры посетителей и внутренние компьютеры моей фирмы я, например, ставлю в разные сети. В настоящих, существующих компаниях из жизни принято делать отдельную сеть для серверов.
Ее, как правило, зовут Production. Отдельную сеть делают для программистов, для разработчиков. Они разрабатывают свои аппликации и у них отдельная сеть для того, чтобы они делали там свои эксперименты.
Такая сеть обычно называется Development, Dev. Бывает также отдельная сеть для QA, это такие ревизоры качества. Готовый, но еще не опробованный продукт передается им, и они его испытывают.
Таковы примеры разделения сети нашей компании на подсети из соображений и безопасности информации. А еще разделение на подсети происходит по причине распределения нагрузок.
Без разделения на разные сети сеть может быть слишком перегружена. Есть программы, которые учиняют бродкаст, то есть, так сказать, кричат в сети, то есть посылают сообщения сразу всем, кто в сети.
Бродкасты нагружают сеть. Если одна программа интенсивно использует бродкасты, то с точки зрения других программ сеть может быть перегружена Или вовсе может исчезнуть связь с интернетом, например.
И последняя причина — это разность в технологии. Например, у нас одна сеть Ethernet, а другая сеть у нас ADSL. То есть, если мы используем разные кабели, разные технологии, то и логически, а не только физически, это должны быть тоже разные сети.
Итак, зарубите себе на носу. Все, кто в одной сети, могут связываться друг с другом напрямую, не проходя через раутер. А раутер передает сообщения между сетями.
И он также играет роль таможни, с помощью которой можно вводить разные ограничения. И, разумеется, логически разные сети нам нужны, если у нас физически эти сети совершенно разные и находятся в разных местах.
Например, у нас есть одна сеть в Великобритании, другая в Китае, а третья в США. Так вот, из-за географического их разного положения, каждой такой физической сети нужна своя собственная отдельная логическая сеть.
Давайте рассмотрим пример разделения всех компьютеров на разные подсети в большой организации. Каждый филиал получает подсеть 10.1, 10.2, 10.3, 10.4, 10.5.
Допустим, я директор какого-то филиала, и я получил 10.5. И я уже внутри того, что я получил, делю все на разные подсети. 10.5.1 – это у меня сеть для серверов.
10.5.2 – это Wi-Fi. 10.5.3 – это обычные офисные работники. Внимание, можно взять какой-то интервал и разделить его на под-интервалы. Вы понимаете, между собой разные сети связывает раутер.
Скоро мы доберёмся до вовсе тонкого дела, ради которого, собственно, этот фильм. А пока что далее базовое общее. Адреса IP нужно выдавать компьютерам согласно их сети, согласно уникальным адресам сети, в которой они находятся.
Другими словами, логическое разделение на сети должно совпадать с физическим. Выдавание компьютером IP-адресов и разделение логическое на разные сети должно совпадать с физическим строением сетей.
Например, вот у нас раутер и две сети слева и справа от него. Раутер может соединять много сетей, но у нас тут в примере всего 2.
И в левой сети у нас есть компьютер с IP-адресом 10.1.1.55. А в сети справа у нас есть компьютер 10.1.1.54.
И смотрите, согласно выданным IP-адресам, этот компьютер находится в той же сети, допустим, вот эта вот сеть у нас. И когда этот компьютер сделает ping к адресу 54, сигнал не будет передан раутеру, потому что компьютер увидит, что пункт назначения — это 10.1.1.
И поэтому цель сообщения он будет искать в своей сети. Будет искать его в своей локальной сети. И не найдет, подумает, что тот компьютер выключен.
Потому что он не знает, что нужно обратиться к раутеру. А как же дать ему знать, что нужно обратиться к раутеру?
Так вот, номера сетей должны быть разные. У одного компьютера, например, 10.1.1, а у второго 10.1.2. И тогда компьютер увидит, что если делают пинг к 10.1.2, 54.
И он увидит, что в его сети это 10.1.1, то он обратится к раутеру. Другими словами, разделение на подсети должно совпадать с физическим делением. Тем, с каких сторон все подключено к раутеру.
А теперь перейдем к главному. Дело в том, что интернет тоже делится на подсети, которые покупают себе люди. Агрессное пространство адресов в интернете делится на разных людей, которые купили эти адреса.
И адресное пространство в интернете мы не можем так грубо делить 10.1.2, 10.1.3, 10.1.4, потому что там адресов всегда слишком мало, и они дорогие.
И адресное пространство для подсети не выдается сразу большой пачкой, чтобы там была куча неиспользованных адресов. Мы хотим достигнуть очень тонкой выдачи, очень тонкого деления на подсети.
Например, один человек купил себе адреса в интернете для своей подсети в интернете: 82, 166, 39, с 32 по 35. То есть он купил себе 4 адреса. А другой человек купил себе в интернете подсеть с теми же самыми первыми тремя числами, но в последнем байте у него с 36 по 39.
То есть номера подсетей могут отличаться, например, только в последнем байте. То есть в интернете не обязательно один человек забирает себе все, где первые три числа в сети такие-то.
То есть номер подсети мы имеем уже на уровне отдельных битов. Не пугайтесь, скоро все будет разъяснено. Итак, начнем. Прежде всего, мы не говорим о покупке в интернете какого-то одного статичного определенного IP-адреса.
Но мы говорим сразу о покупке целого интервала IP-адресов, то есть о покупке целой подсети. Из этого интервала адресов я организовываю подсеть.
Например, я делаю это для того, чтобы поместить несколько веб-серверов в интернете. И у этих серверов у меня должны быть разные IP-адреса.
Например, почтовый сервер и веб-сервер мне нужен с разными IP-адресами. Я хочу от интернета получить целую свою подсеть. У многих организаций есть в интернете свои интервалы.
Можно в интернете приобрести всего один IP-адрес, но это не будет подсетью. У вас на домашнем компьютере один IP-адрес в интернете, поэтому не спутайте с домашним компьютером.
Мы тут говорим не об одном, а об целом интервале IP-адресов в интернете и, соответственно, о делении интернета на подсети. Например, возьмем внешний IP-адрес моего колледжа, то есть адрес моего колледжа в интернете.
Это 82.166.29.38. Это его внешний IP-адрес. Мы уже много говорили о том, что subnet mask может иметь значение, например, 3 раза 255 и 0 после.
Что означает, например, такой subnet mask? Это означает, что вся сеть 82.166.29 моя. И это было бы напрасным растранжириванием IP-адресов. Потому что мне нужно всего 4 внешних IP-адреса.
Мне не нужно целых 256 IP-адресов. То есть, если все значения последнего байта мои, то получается 256 отдельных адресов. И поэтому последний четвёртый байт в Subnet Mask мы хотим разделить на разные подсети.
Каждый такой байт, каждое такое отдельное число в IP-адресе, каждый из четырёх, называется октата. И IP-адрес состоит из четырёх октат. В каждой такой октате 8 битов.
Таким образом, всего в IP-адресе у нас 32 бита в протоколе IP версии 4. А вот в протоколе IP-версии 6 128 битов. Но мы сейчас работаем с четвёртой версией, в которой 32 бита, и эти 32 бита разделены на 4 группы по 8 битов.
И IP-адрес принято писать с точками между этими группами. Так вот, цель нашего деления на подсети заключается в том, чтобы получить номер сети, который бы давал мне только подсеть с номерами от 36 до 39, то есть в последнем байте, а не всё адресное
пространство в 256 адресов, то есть всю сеть, которая после 29. Какой же тогда должен быть у меня адрес под сети, subnet mask, чтобы с помощью нее выделить именно эти 4 IP-адреса?
Честно говоря, скажу вам уже, забегая наперед, что я таким образом получу не 4 адреса, потому что самый первый адрес работает для обозначения всей сети.
Запрещено его давать какому-то компьютеру, а последний адрес интервала используется для бродкаста, то есть для обращения ко всем компьютерам этой сети.
Его тоже запрещено выдавать какому-то компьютеру. Таким образом, покупая какой-то интервал в интернете, мы получаем не целиком для наших компьютеров весь этот интервал, а то, сколько в этом интервале минус 2.
То есть, купив под сеть в 4 IP-адреса, мы получим для наших компьютеров всего 2 IP-адреса. То есть, то, сколько адресов мы купили, минус 2.
Далее, так вернемся к нашей задаче. Сколько нам нужно битов в последнем байте, чтобы обозначить адресное пространство в 4 IP-адреса? Ответ очень прост.
Какая это степень двойки? то, сколько нам нужно адресов. Нам нужно 4 IP-адреса. 4 – это 2 во второй степени. Значит, нам нужно 2 бита, чтобы адресовать 4 адреса, чтобы выделить именно 4 IP-адреса, чтобы с помощью разных значений этих двух битов обозначить, какой именно из адресов нам
нужен. Поэтому, если это 4 разных адреса, то нам нужно 2 бита. Итак, формула такова. 2 в степени того, сколько битов мне нужно, равно то, сколько адресов мне нужно.
А допустим, мне нужно было бы 16 адресов, потому что у меня было бы 14 серверов. Тогда сколькими битами я должен был бы заниматься? 2 в степени x равно 16.
То есть 4 бита адресовали бы мне конкретный адрес в этом интервале из 16 адресов. Но в данном случае мы занимаемся 4 адресами, а значит нам нужно 2 бита, которые смогут различать для нас 4 адреса.
Почему? А давайте рассмотрим все возможные комбинации из 2 битов. 0, 0, 0, 1, 1, 0, 1, 1. Всего 4 комбинации. То есть 2 бита могут различать, хранить 4 разных номера.
И нам осталось лишь теперь разложить адреса IP в нашей сети, которую мы хотим, на биты. И увидеть, какие 2 бита будут меняться для наших компьютеров, а какие будут постоянны и будут являться адресом всей сети.
И дадут нам subnet mask, нужный нашей сети. Если все это прозвучало страшно, не пугайтесь, все разъяснится.
Итак, из 32 битов IP-адреса мы берем лишь 2 бита для компьютеров в сети, а оставшиеся же 30 битов будут служить нам адресом всей сети, номером сети. В наших домашних сетях или корпоративных внутренних мы привыкли к тому, что Subnet Mask устанавливает границу чисто между байтами после первых 3 байтов или после первых 2.
То есть в первом случае 24 бита идут на номер сети, Остальные же 8 битов на номера компьютеров в этой сети. Но сейчас нам не нужно все 8 битов, потому что мы не хотим платить интернету 256 умножить на цену одного адреса IP.
Нет, пусть интернет выдаст их кому-нибудь другому. Мы хотим лишь 2 бита из этих 8. Так берем же эти последние 8 битов и давайте посмотрим, что мы с ними делаем.
Сперва эти 8 скандальных битов нам нужно перевести в двоичное число, то есть десятиричное нужное нам значение в двоичное. Открываем калькулятор в режиме для программистов.
Когда мы запускаем программу Calc, она открывается в стандартный режим. Заходим во View и переводим в Programmers. Мы получаем калькулятор с особым набором функций и записываем туда число из интересующего нас интервала, 38.
И, внимание, тут есть режимы отображения, режим исчисления, десятиричный и двоичный. Нажимаем на бинари и переходим в двоичный режим отображения.
Калькулятор переводит нам число в двоичное. в двоичном представлении 38 – это 1, 0, 0, 1, 1, 0. Это как раз то, что я написал здесь.
1, 0, 0, 1, 1, 0. И еще я добавил два нолика в начале, чтобы получить 8 цифр, 8 битов. Смотрите также наши фильмы о том, как делать такой перевод без калькулятора, вручную.
Итак, этап первый. Мы перевели любой из адресов в нужном нам интервале в двоичное представление. А суть нашего дела в том, чтобы объяснить компьютеру, что вот это вот все, это все subnet mask, это все число сети.
И лишь два самых последних бита отражают конкретный компьютер в MyACT. Мне нужно всего 4 адреса в MyACT, и как раз 2 бита дают 4 разных комбинации. Давайте вновь посмотрим на subnet mask, к которому мы привыкли.
Типа того, как 255, 255, 255, 0. То есть последовательность из единиц вплоть до границы, после которой адресуются разные компьютеры, а после все нули.
Вообще все subnet mask таковы. Просто в нашем случае теперь это уже не будет кратно восьми. Нам нужно более тонкое разделение. В нашем случае нам нужен subnet mask, где будут все единицы и только два последних.
Бита будут нолики. То есть вначале будут все так же три байта из единичек, а в последнем байте будет шесть единичек и два нолика.
Так вот, поняв, какой нам нужен subnet mask, мы вводим последний байт в калькулятор, 6 единичек и 2 нолика, и мы получаем 252. Смотрите, пишем в калькуляторе 6 единичек, и после 2 нолика, это последний байт нашего subnet mask.
Вы понимаете, subnet mask всегда имеет вид, все единички до определенной границы, которая нам нужна, а после все нолики. Такова всегда subnet mask. Просим у калькулятора показать это число в десятиричном представлении, и получаем 252.
И мы получаем, что все было посчитано правильно. Мы убеждаемся в том, что калькулятор не ошибся. Так вот, досюда это у нас постоянная часть IP-адресов.
Если там что-то изменить, то я уже попаду к соседям. Менять я могу только что-то в последних двух битах. И я получаю такие вот адреса.
Зачем мы морочились, все это переводили из двоичного в десятеричный и наоборот? Потому что в интерфейсе мы вводим числа в десятеричном представлении. Итак, я заплатил за 4 IP-адреса, а не за 256.
Но на деле я могу поставить компьютер и использовать IP-адресы 37 и 38. Допустим, один у меня почтовый сервер, а другой веб-сервер. И я ставлю на эти два адреса мои два сервера, и в них я указываю subnet mask в этих двух серверах, которые непосредственно подключены к интернету,
которые прямо в интернете. И там subnet mask — это 3 раза 255 и в