### 2.1 Протокол IP

Рассмотрим, что же является коммутационным ядром протоколов TCP/IP. Протокол IP описан в документе RFC 791. Этот протокол собственно и реализует механизм прохождения информации по сети, он специально ограничен задачами обеспечения передачи дейтаграмм от отправителя к получателю через распределённую сеть. Дейтаграммой называют блоки для передачи данных. Кроме этого, протокол IP обеспечивает при необходимости функции фрагментации и сборки дейтаграмм при передаче в распределенных сетях с разными размерами кадров. Протокол IP лишен механизмов повышения достоверности передачи данных, управления протоколом, синхронизации и других услуг, обычно применяемых в протоколах более высокого уровня. Протокол IP получает информацию для передачи от протоколов более высокого уровня, таких как TCP и UDP, а затем передает её через распределённую сеть, используя сервисы локальных сетей. Протокол IP выполняет несколько основных функций:

1. Определяет базовый элемент передачи данных – дейтаграмму, её формат, значение полей в заголовке.
2. Проводит фрагментацию дейтаграммы и её сборку.
3. Выполняет ненадежную доставку дейтаграммы получателю.
4. Обеспечивает логическую адресацию устройств в сети.
5. Реализует поддержку маршрутизации.

На рисунке 2.2 приведена полная схема полей заголовка IP-дейтаграммы.

Рисунок 2.2 - Схема полей заголовка IP-дейтаграммы
Номер версии(4 бита) | Длина заголовка(4 бита) | Тип сервиса(8 бит) | Общая длина(16 бит)
Идентификатор(16 бит) | Флаги (3 бита) | Смещение фрагмента (13 бит)
Время жизни(8 бита) | Протокол (8 бит) | Контрольная сумма заголовка (16 бит)
Адрес отправителя (32 бита)
Адрес получателя (32 бита)
Опции (поле переменной длины) | Выравнивание до 32-битной границы

Поле “Номер версии” указывает на версию используемого протокола IP. Поле предназначено для того, чтобы все пользователи были уверены, что они работают с одним и тем же форматом дейтаграммы. Поле проверяется перед выполнением обработки дейтаграммы. Если версия протокола меняется, то при обработке будут отбрасываться дейтаграммы с другой версией протокола IP.
Поле “Длина заголовка” определяет значение длины заголовка, измеренное в 32-битных словах. Корректный заголовок может иметь минимальный размер 5 слов. При увеличении объёма служебной информации эта длина может быть увеличена за счет поля “Опции”.
Поле “Тип сервиса” определяет тип требуемого обслуживания. Первые три бита этого поля определяют приоритет дейтаграммы и могут иметь значение от нуля (нормальная дейтаграмма) до семи (управляющая дейтаграмма). Устройства в сети принимают во внимание приоритет дейтаграммы и обрабатывают в первую очередь более важные. Протоколы маршрутизации в основном пытаются вычислить наилучший маршрут к получателю, основываясь на различных определениях критериев пути, таких как скорость, надежность и т.д. Протоколы маршрутизации более высокого уровня, такие как OSPF и BGP, поддерживают маршрутизацию на основании указанного типа сервиса. Программное обеспечение большинства рабочих станций и маршрутизаторов игнорируют поле “Тип сервиса” при обработке.
Однако на основании этого механизма могут быть реализованы различные алгоритмы, например алгоритм управления перегрузкой сети.
Третий бит определяет вид задержки: 0 – нормальная задержка, 1 – малая задержка. Четвертый бит определяет уровень пропускной способности (нормальная или высокая). Пятый бит определяет надежность доставки. Шестой и седьмой биты зарезервированы.
Протокол IP обрабатывает каждую дейтаграмму как независимую единицу. При этом используются четыре основных механизма: установка типа сервиса, установка времени жизни (TTL), установка опций и вычисление контрольной суммы заголовка.
Поле “Общая длина” указывает общую длину дейтаграммы с учетом заголовка и поля данных. Максимальный размер дейтаграммы может составлять 216 или 65535 байт. В подавляющем большинстве сетей столь большой размер дейтаграмм не используется.
Поле “Идентификатор” используется для распознавания дейтаграмм, образованных процессом фрагментации. Все фрагменты исходной дейтаграммы должны иметь одинаковое значение этого поля.
Поле “Флаги” указывает на возможность фрагментации. Нулевое состояние первого бита разрешает выполнять фрагментацию, единичное состояние – запрещает. Второй бит определяет последний фрагмент дейтаграммы.
Поле “Смещение фрагмента” используется для указания места данного фрагмента в исходной дейтаграмме. Смещение фрагмента изменяется порциями по восемь байт. Первый фрагмент всегда имеет нулевое смещение. Поле используется для сборки-разборки фрагментов дейтаграммы при передаче её между сетями с различными MTU.
Поле “Протокол” указывает, какому протоколу верхнего уровня принадлежит дейтаграмма, т.е. при поступлении дейтаграммы к получателю это поле указывает, какому приложению (прикладной программе, протоколу и т.д.) она принадлежит.
Поле “Время жизни” показывает максимальное время, в течение которого дейтаграмма может находиться в сети. Если это поле имеет нулевое значение, то дейтаграмма уничтожается. Определение времени жизни служит для указания максимального времени нахождения дейтаграммы в сети. Этот параметр устанавливается при отправке дейтаграммы (TTL=255) и уменьшается по мере прохождения маршрутизаторов. Каждый маршрутизатор уменьшает время жизни дейтаграммы на время, необходимое для её обработки.
В настоящее время скорость обработки дейтаграмм маршрутизаторами увеличилась настолько, что время практически всегда меньше одной секунды, поэтому современные маршрутизаторы уменьшают значение этого поля ровно на единицу. Можно сказать, что теперь это поле служит для ограничения количества маршрутизаторов (или транзитных узлов), которые может пересечь дейтаграмма.
Поле “Контрольная сумма” рассчитывается по всему заголовку. А так как некоторые поля заголовка меняют своё значение при прохождении дейтаграммы через маршрутизаторы, контрольная сумма проверяется и повторно рассчитывается при каждой обработке заголовка дейтаграммы. Механизм определения контрольной суммы заголовка обеспечивает правильную передачу дейтаграммы через сеть. Алгоритм вычисления контрольной суммы заголовка дейтаграммы протокола IP применяется и во многих других протоколах, таких как TCP, UDP, ICMP и OSPF.
Поле “Адрес отправителя” и поле “Адрес получателя” имеют одинаковую длину и одинаковую структуру. Данные полей содержат 32–х битные IP-адреса отправителя и получателя дейтаграммы.
Поле “Опции” является необязательным и обычно используется при отладке сетей. Это поле не имеет фиксированной длины, поэтому для выравнивания заголовка дейтаграммы по 32-х битной границе предусмотрено следующее поле – поле ”Выравнивание”. Процедура выравнивания заключается в заполнении нулями этого поля.
В сети построенной на базе стека протоколов TCP/IP конечные устройства получают уникальные адреса. Эти устройства могут быть персональными компьютерами, коммуникационными серверами, маршрутизаторами и т.д. При этом некоторые устройства, которые имеют несколько фиксированных портов, например маршрутизаторы, должны иметь уникальный адрес на каждом из портов. Исходя из схемы адресации и возможности того, что некоторые устройства в сети могут иметь несколько адресов, можно сделать вывод, что такая схема адресации описывает не само устройство в сети, а определённое соединение этого устройства с сетью. Это приводит к ряду неудобств. Одним из них является необходимость замены адреса устройства при перемещении его в другую сеть. Основной же недостаток в том, что для работы с устройствами, имеющими несколько подключений к распределённой сети, необходимо знать все адреса, идентифицирующие эти подключения. Незнание хотя бы одного адреса может привести к тому, что этим устройством не будет получена информация при отказе других соединений.
Каждое устройство в сети, построенной на базе протокола IP, имеет адреса трех уровней:

1. Физический адрес узла, определённый технологией, с помощью которой построена данная сеть. Например, для узлов, входящих в локальную сеть Ethernet – это MAC-адрес сетевой карты или порта маршрутизатора, назначаемый производителями оборудования. Формат физического адреса имеет шесть байт: старшие три байта – это идентификатор фирмы производителя, младшие три байта уникальны и назначаются самим производителем.
2. Непосредственно IP адрес, состоящий из четырех байт. Этот адрес используется на сетевом уровне эталонной модели OSI.
3. Символьный идентификатор – привычное имя. Этот идентификатор может назначаться администратором произвольно и служить, например, для упрощения взаимодействия с удаленной системой.

Вся нумерация сетей делится на несколько классов: A, B, C, D, E.
Диапазоны этих сетей показаны в таблице 2.1.

Таблица 2.1 – Диапазоны сетей
Класс адреса | Диапазоны значений
A | 1.XXX.XXX.XXX – 126.XXX.XXX.XXX
B | 128.0.XXX.XXX – 191.255.XXX.XXX
C | 192.0.0.XXX – 223.255.255.XXX
D | 224.0.0.1 – 239.255.255.255
E | 240.0.0.0 – 255.255.255.254

Классы A, B и С используются в качестве единичных адресов сети Internet. По этим адресам устройства общаются друг с другом. Сети класса D используются для связи с группой устройств или для широковещательных рассылок. Сети класса E на данный момент не используются. В рамках существующих сетей было решено выделить некоторое адресное пространство для использования в закрытых (от Internet) сетях. Эти сети не рекомендовано использовать в открытом Internet без специальных механизмов преобразования (NAT). Примеры таких сетей – 10.XXX.XXX.XXX или чаще используемая 192.168.XXX.XXX.