Единица информации протокола IP (Protocol Data Unit - PDU) называется IP-пакетом.
Заголовок IP-пакета содержит несколько полей (Рис.1). В этом разделе мы подробно рассмотрим два поля:
Рис.1 Заголовок IP-пакета
■ Source Address (Адрес источника). Определяет IP-адрес узла-отправителя.
■ Destination Address (Адрес назначения). Определяет IP-адрес узла-получателя.
В любом IP-адресе одна часть 32-битного номера представляет сеть, а другая - хост. В то время как сетевые адреса нескольких компьютеров могут совпадать, комбинация сетевого адреса с адресом хоста уникально идентифицирует любое устройство, подключенное к сети.
Ниже показан двоичный IP-адрес
Для удобства 32-битные IP-адреса разбиваются на 4 группы цифр, именуемые октетами (1 октет равен 8 битам). Каждый октет затем представляется в виде десятичного числа от 0 до 255, которые разделяются точкой. Эта схема известна как «десятичное представление с разделительными точками» или «точечно-десятичное представление». Показанный на Рис.2 IP-адрес может быть записан как 172.16.128.17.
Рис.2 Структура IP-адреса
Итак, IP адрес это - код, состоящий из старшей и младшей части. Старшая часть называется номер сети, младшая часть называется номер хоста. В этом, простом на первый взгляд, делении и заключается смысл использования числовых составных адресов, в том числе и IP адреса. Следовательно, необходимо ввести систему, согласно которой IP адрес можно будет разделять на адрес сети и адрес хоста. В первом RFC описывающем протокол IP (RFC 760) была предложена система деления, позднее названная «Доклассовым методом». Суть этого метода заключалась в выделении первого байта IP адреса под адрес сети и остальных трех – под адрес хоста.
Предложенный метод деления IP адреса вполне подходил для экспериментальных IP сетей на этапе тестирования, и даже немного после – при реальной работе. Но, доклассовый метод деления имел явный недостаток: огромное количество хостов в сети при сравнительно мизерном количестве самих сетей. Т.е. приведенный метод мог применяться только в очень больших сетях, количество самих сетей в этом случае составило бы всего 256 «на весь мир».
Спустя некоторое время был предложен еще один метод деления сетей, отличительной чертой которого была система разделения сетей в зависимости от необходимого количество хостов. Сети с одинаковым признаком относились к единой группе – Классу. Отсюда и название –«Классовый метод деления». Результатом реализации этого метода стали классы IP адресов.
Что собой представляет техника деления на классы? В рамках классового подхода адрес снова состоит из двух частей – номера сети и номера узла. Но граница между адресом сети и узла пролегает в разных частях адреса в зависимости от нескольких первых бит адреса. Это позволяет поделить адресное пространство на неравные части (по RFC760 все сети были одной величины): существует некоторое небольшое количество очень больших сетей, среднее количество среднего размера сетей и множества маленьких сетей.
Рассмотрим классы IP-адресов и структуру IP-адресов в рамках этих классов.
Назначение IP-адресов в соответствии с классами называется классовой (classful) адресацией.
Определение классов было дано на ранних этапах развития сети Интернет организацией IANA (Internet Assigned Numbers Authority).
Каждый IP-адрес делится на идентификатор сети и хоста. Кроме того, бит или последовательность битов в начале каждого адреса определяет класс данного адреса. На Рис.3 показаны три из пяти классов IP-адресов с побитовой записью первого октета.
Рис.3 Классы IP-адресов
В адресах класса A для обозначения сетевого адреса используется только первый октет (8 бит) 32-битного числа. Остальные три октета 32-битного числа используются для адресации хостов. В адресах класса A первый бит всегда имеет значение «0». Поскольку первый бит всегда имеет значение 0, наименьший номер может быть представлен, как 00000000 (десятичный 0), а высший - как 01111111 (десятичное число 127). Однако эти два числа, 0 и 127, зарезервированы и не могут использоваться в качестве сетевых адресов. Любой адрес, который начинается со значения от 1 до 126 в первом октете 32-битного номера, является адресом класса А.
В адресах класса B для задания сетевого адреса используется два из четырех октетов (16 бит). Остальные два октета определяют адреса хостов. Первые 2 бита первого октета в адресах класса B всегда равны двоичному числу 10 (1 и 0). Двоичное число 10 в начале первого октета гарантирует, что пространство класса B не накладывается на верхние уровни пространства класса А. Остальные 6 битов первого октета могут быть заполнены значениями 1 или 0. Следовательно, наименьший номер, который может представлять адрес класса В, равен 10000000 (десятичное число 128), а наибольший — 10111111 (десятичное число 191). Любой адрес, который начинается со значения в диапазоне от 128 до 191 в первом октете, является адресом класса В.
В адресах класса C первые три октета (24 бита) IP-адреса определяют сетевую часть, а оставшийся октет резервируется для хостов. Адреса класса C начинаются с двоичного числа 110. Следовательно, наименьший номер, который может представлять адрес класса C, равен 11000000 (десятичное число 192), а наибольший - 11011111 (десятичное число 223). Если адрес содержит в первом октете значение в пределах 192 до 223, он относится к классу С.
На Рис.4 представлен диапазон значений первого октета IP-адресов (в десятичном и двоичном представлении) для классов IP-адресов A-С, а также число доступных хостовых IP-адресов для одной сети для каждого класса.
Рис.4 Диапазон значений первого октета IP-адресов
Адреса классов A, B, C применяются для присвоения узлам, являются уникальными идентификаторами узлов в составной сети и каждый такой адрес, естественно, не может быть присвоен более чем одному узлу составной сети.
Адреса класса A используют половину полного доступного адресного пространства IP.
Адреса класса В используют четверть полного доступного адресного пространства IP.
Адреса класса С использую восьмую часть полного доступного адресного пространства IP.
Не используемой осталась еще восьмая часть адресов вида: 111xxxxx.Y.Z.W.
Делим эту часть адресного пространства еще пополам. Получаем два диапазона адресов: 1
1110xxxx.Y.Z.W и 1111xxxx.Y.Z.W.
Часть адресного пространства 1110xxxx.Y.Z.W называют адресами класса D.
Адреса этого класса не могут быть уникальными идентификаторами узлов, не содержат в себе номера сети и номера узла и выполняют в IP с специальную функцию – используются для групповой адресации.
Это значит: узел сети помимо того, что имеет один IP адрес из классов А, В или С (являющийся его уникальным идентификатором в составной сети) может иметь один или множество адресов класса D. При этом, в отличие от адресов классов A, B, C адреса класса D могут быть одинаковы для множества узлов. Адрес класса D является адресом именно ГРУППЫ узлов, членами группы являются все те узлы, который имеют одинаковый адрес класса D. Пакет, посланный с адресом получателя класса D, должен быть доставлен всем без исключения узлам, являющимся членами той группы, на адрес которой послан пакет. В точечно-десятичной записи номера узлов сети класса D принадлежат диапазону:
224.x.y.z – 239.x.y.z.
Адреса класса D используют шестнадцатую часть полного доступного адресного пространства IP.
Не используемой осталась еще шестнадцатая часть адресов вида: 1111xxxx.Y.Z.W.
Часть адресного пространства 1111xxxx.Y.Z.W называют адресами класса Е.
Адреса этого класса не могут быть уникальными идентификаторами узлов, не содержат в себе номера сети и номера узла, а являются зарезервированными для дальнейшего использования и сегодня в IP не используются. В точечно-десятичной записи номера узлов сети класса E принадлежат диапазону:
240.x.y.z – 255.x.y.z.
Адреса класса E использую шестнадцатую часть полного доступного адресного пространства IP.
Таким образом. техника классов, в отличии от доклассовой (RFC760) является гораздо более гибкой: она позволяет разделить адресное пространство на неравные сети:
• 128 сетей по 16 млн. узлов
• 16 тыс. сетей по 64 тыс. узлов
• 2 млн. сетей по 256 узлов
• Дополнительная возможность организовать групповую доставку пакетов, 256 млн. групп
Классовая техника назначения адресов является гораздо более масштабируемой, нежели предложенная в RFC760. Впрочем, классовая техника также не достаточно масштабируема и имеет свои недостатки.
Но в 1981 году, когда был создан RFC791 проблем, связанных с классовой техникой еще не существовало, они появились лишь с ростом сети Интернет.
Работа с IP адресами предполагает использование таких типов адресов, которые бы могли использоваться в особых целях. Т.е. вместо основной задачи IP адреса – идентифицировать компьютер в составной сети, в особых случаях адресу вменяется в обязанность идентификация группы компьютеров – участников одной IP сети, идентификация номера сети и т.д.
Для систематизации назначения подобных IP адресов были приняты соглашения по их форме и способу идентификации. Рассмотрим особые адреса.
А) Если ВСЕ биты, ответственные за номер узла в IP адресе равны «0», то такой адрес не может быть присвоен узлу. Такой адрес является номером сети. Приведем примеры номеров сетей:
• В классе А:
- 1.0.0.0, 56.0.0.0, 126.0.0.0, 127.0.0.0
• В классе В:
- 128.10.0.0, 150.150.0.0, 190.0.0.0, 191.200.0.0
• В классе С:
192.10.11.0, 201.30.0.0, 222.0.0.0, 223.45.89.0
Обратите внимание, адреса типа: 10.1.2.0, 67.77.0.0, 155.34.89.0, 228.4.5.0, 250.249.248.0 не являются номерами сетей.
НЕ все биты, отвечающие за номер узла в этих адресах равны нулю, (а ответ на вопрос, какие биты адреса являются адресом узла следует из использования понятия класса), или вообще не содержат в себе номера сети и узла (классы D, E):
• 10.1.2.0, класс А, за номер узла отвечают х.1.2.0 – следовательно, это не номер сети
• 67.77.0.0, класс А, за номер узла отвечают х.77.0.0 – следовательно, это не номер сети
• 155.34.89.0, класс В, за номер узла отвечают х.х.89.0 – следовательно, это не номер сети
• 228.4.5.0, класс D, вообще не содержит в себе номера сети и узла
• 250.249.248.0, класс E, вообще не содержит в себе номера сети и узла
Где применяются IP адреса, являющиеся адресами сетей? Конечно же, в таблицах маршрутизации – вспомним, что в простейшей таблице маршрутизации два столбца: номер сети назначения и адрес интерфейса следующего маршрутизатора.
В) Если ВСЕ биты, ответственные за номер узла в IP адресе равны «1», то такой адрес так же не может быть присвоен узлу. Такой адрес называется широковещательнымили широковещательным в заданную сеть. Приведем примеры широковещательных адресов в сетях различных классов:
• В классе А: 1.255.255.255, 56.255.255.255, 126.255.255.255, 127.255.255.255
• В классе В: 128.10.255.255, 150.150.255.255, 190.0.255.255, 191.200.255.255
• В классе С: 192.10.11.255, 201.30.0.255, 222.0.0.255, 223.45.89.255
Обратите внимание, адреса типа: 10.1.2.255, 67.77.255.255, 155.34.89.255, 228.4.5.255, 250.249.248.255 не являются широковещательными адресами.
НЕ все биты, отвечающие за номер узла в этих адресах равны «1», (а ответ на вопрос, какие биты адреса являются адресом узла следует из использования понятия класса), или вообще не содержат в себе номера сети и узла (классы D, E):
• 10.1.2.255, класс А, за номер узла отвечают х.1.2.255 – следовательно, это не широковещательный адрес
• 67.77.255.255, класс А, за номер узла отвечают х.77.255.255 – следовательно, это не широковещательный адрес
• 155.34.89.255, класс В, за номер узла отвечают х.х.89.255 – следовательно, это не широковещательный адрес
• 228.4.5.255, класс D, вообще не содержит в себе номера сети и узла
• 250.249.248.255, класс E, вообще не содержит в себе номера сети и узла
Где и как применяются в IP сети широковещательные адреса, и как их применение согласуется с недопустимостью широковещания в составной сети? В IP действительно нет широковещания во всю составную сеть, но так как каждая сеть, входящая в составную сеть сама по себе широковещательная (или может быть широковещательной), то в широковещании в пределах одной канальной сети нет ничего плохого.
При передаче из одной канальной сети в другую широковещательного IP пакета, по составной сети перемещается один пакет, адрес получателя которого, например, 45.255.255.255. Такой пакет, перемещаясь между транзитными маршрутизаторами является самым обычным пакетом – он просто маршрутизируется, так же как и индивидуально назначенный узлу пакет до маршрутизатора, который подключен к сети назначения 45.0.0.0 и только лишь в саму канальную сеть номер 45.0.0.0 отправляется широковещательным кадром канального уровня.
Таким образом, видно, что передача таких пакетов не нарушает общей идеи составной сети, которая заключается в запрете широковещания ВСЕМ узлам составной сети.
Из вышесказанного следует, что широковещательный адрес может фигурировать в заголовке IP пакета в качестве адреса получателя, но не может фигурировать в заголовке в качестве отправителя.
С) Следующий особый адрес – неопределенный адрес. Адрес, являющийся номером сети класса А, а именно 0.0.0.0 применяется для указания отсутствия IP адреса у узла.
Зачем это может быть нужно? Если при старте интерфейс не имеет адреса, то с помощью специального протокола, он может получить адрес, которым будет пользоваться в дальнейшем, от специального сервера. Пока же узел не имеет своего адреса, он пользуется адресом 0.0.0.0. Такой адрес не может фигурировать в заголовке IP пакета в качестве адреса получателя, но может фигурировать в качестве адреса отправителя, указывая, что отправитель не имеет собственного адреса. Очевидно, такой адрес не может быть присвоен узлу как уникальный идентификатор.
D) Еще один специальный адрес – ограниченно широковещательный(limited broadcast). Это адрес, все биты которого равны «1», т.е. 255.255.255.255. Этот адрес принадлежит классу Е (который является зарезервированным), и является единственным используемым адресом из этого диапазона.
Пакет, посланный по такому адресу принимается всеми узлами своей сети и никогда не маршрутизируется в другие сети. Положим, мы являемся узлом 5.1.1.1. номер нашей сети 5.0.0.0, широковещательный адрес, по которому можно послать пакет всем узлам нашей сети 5.255.255.255, но из высказанного следует, что того же можно добиться, послав пакет по адресу 255.255.255.255.
Зачем это нужно, ведь любой узел знает свой адрес, значит, знает номер своей сети, знает широковещательный адрес своей сети и может послать на этот адрес пакет, зачем же еще ограниченно широковещательный адрес? Ответ как раз и сформулирован в предыдущем предложении: если узел еще НЕ имеет IP адреса, то он не знает широковещательного адреса той сети, которой принадлежит, а послать пакет по адресу 255.255.255.255 может всегда.
Итого: ограниченно широковещательный адрес нужен для коммуникаций между узлом, пока не имеющим IP адреса (и не знающего номера сети, которой принадлежит) и сервером, предоставляющим IP адреса.
Мы уже говорили, что узел не имея адреса, шлет пакеты специального прикладного протокола, предназначенного для получения IP адресов (DHCP) от неопределенного адреса 0.0.0.0. При этом узел не знает адреса того сервера, который назначит ему адрес, так же он не знает номера своей сети, и поэтому шлет такой пакет на ограниченно широковещательный адрес. И если в одной сети с безадресным узлом есть DHCP сервер, то он получит данный пакет!
А как DHCP сервер ответит клиенту, если у того нет адреса? Тоже ограниченно широковещательно. Действительно, положим, у нас нет еще адреса, и мы получаем ограниченно широковещательный пакет. Мы знаем, что такой пакет не покидает сети, в которой отправлен, и хоть мы не знаем номера своей сети, но мы знаем, что если мы уже получили такой пакет, то мы находимся в той же сети, как и отправитель этого пакета, следовательно, этот пакет предназначен и для нас тоже!
Таким образом, с помощью неопределенного адреса и ограниченно широковещательного адреса безадресный клиент и DHCP сервер обмениваются информацией, что приводит к назначению узлу IP адреса.
Т.е. безадресный клиент посылает IP пакеты с обратным адресом 0.0.0.0 и адресом получателя 255.255.255.255, а в ответ получает пакеты от адреса DHCP сервера и адресом получателя 255.255.255.255.
Другие особые адреса: сеть класса А, 0.0.0.0 является зарезервированной (и не используемой) и не может присваиваться реальным сетям. Ее номер сети, как уже говорилось выше, используется для указания отсутствия IP адреса у отправителя пакета.
Сеть класса А 127.0.0.0 является зарезервированной для специального применения. Все пакеты, которые стек TCP/IP генерирует в эту сеть, НИКОГДА не отправляются в линии связи через любые сетевые интерфейсы. Вместо этого такие пакеты «закольцовываются», т.е. послав такой пакет, станция сама выступает его получателем (стек просто переносит такие пакеты из буфера отправки в буфер приема).
Это полезно для локального тестирования правильной работы стека TCP/IP, если обмен пакетами с узлом, например, 127.0.0.1 проходит нормально, то с программным обеспечением стека TCP/IP все в порядке. Если же нет, то проблемы носят локальный характер, и не связаны с неисправностью сетевых интерфейсов, линий связи и удаленными системами.
Разумеется, сетевой интерфейс не может иметь адреса в сети 127.0.0.0. Так же очевидно, что в линии связи пакеты с такими адресами отправителей и получателей вообще никогда не попадают, такие пакеты остаются в памяти того узла, который их сгенерировал.
Подведем итог по количеству сетей разных классов и узлов в этих сетях, которые можно реально использовать.
Сетей класса А пригодных для адресации в реальных сетях – 126, а не 128, так как сети 0.0.0.0 и 127.0.0.0 являются используемыми особо. Узлов в сети класса А – 224-2, так как узлу нельзя присвоить ни адрес, являющейся номером сети, ни широковещательный адрес.
Сетей класса B пригодных для адресации в реальных сетях – 214, узлов в сети класса В – 216-2, так как узлу нельзя присвоить ни адрес, являющейся номером сети, ни широковещательный адрес.
Сетей класса С пригодных для адресации в реальных сетях – 221, узлов в сети класса С – 254, а не 256, так как узлу нельзя присвоить ни адрес, являющейся номером сети, ни широковещательный адрес.