Межсетевой уровень TCP/IP: протокол IP, ICMP
Протокол IP является ненадежным протоколом без установления соединения. Это означает, что протокол IP не подтверждает доставку данных, не контролирует целостность полученных данных и не производит операцию квитирования (handshaking) - обмена служебными сообщениями, подтверждающими установку соединения с узлом назначения и его готовность к приему данных. Протокол IP обрабатывает каждую дейтаграмму как независимую единицу, не имеющую связи ни с какими другими дейтаграммами в Интернет. После того, как дейтаграмма отправляется в сеть, ее дальнейшая судьба никак не контролируется отправителем (на уровне протокола IP). Если дейтаграмма не может быть доставлена, она уничтожается. Узел, уничтоживший дейтаграмму, может оправить по обратному адресу ICMP-сообщение о причине сбоя. Гарантию правильной передачи данных предоставляют протоколы вышестоящего уровня (например, протокол TCP), которые имеют для этого необходимые механизмы. Одна из основных задач, решаемых протоколом IP, - маршрутизация дейтаграмм, т.е. определение пути следования дейтаграммы от одного узла сети к другому на основании адреса получателя.
Узлом сети называется компьютер, подключенный к сети и поддерживающий протокол IP. Узел сети может иметь один и более IP-интерфейсов, подключенных к одной или разным сетям, каждый такой интерфейс идентифицируется уникальным IP-адресом.
IP-сетью называется множество компьютеров (IP-интерфейсов), часто, но не всегда подсоединенных к одному физическому каналу связи, способных пересылать IP-дейтаграммы друг другу непосредственно (то есть без ретрансляции через промежуточные компьютеры), при этом IP-адреса интерфейсов одной IP-сети имеют общую часть, которая называется адресом, или номером, IP-сети, и специфическую для каждого интерфейса часть, называемую адресом, или номером, данного интерфейса в данной IP-сети.
Маршрутизатором, или шлюзом, называется узел сети с несколькими IP-интерфейсами, подключенными к разным IP-сетям, осуществляющий на основе решения задачи маршрутизации перенаправление дейтаграмм из одной сети в другую для доставки от отправителя к получателю.
Хостами называются узлы IP-сети, не являющиеся маршрутизаторами. Обычно хост имеет один IP-интерфейс (например, связанный с сетевой картой Ethernet или с модемом), хотя может иметь и несколько.
Формат заголовка IP-дейтаграммы. IP-дейтаграмма состоит из заголовка и данных. Заголовок дейтаграммы состоит из 32-разрядных слов и имеет переменную длину, зависящую от размера поля “Options”, но всегда кратную 32 битам. За заголовком непосредственно следуют данные, передаваемые в дейтаграмме.
Формат заголовка:
Рис. Формат IP-заголовка
Значения полей заголовка следующие.
Ver (4 бита) - версия протокола IP, в настоящий момент используется версия 4, новые разработки имеют номера версий 6-8.
IHL (Internet Header Length) (4 бита) - длина заголовка в 32-битных словах; диапазон допустимых значений от 5 (минимальная длина заголовка, поле “Options” отсутствует) до 15 (т.е. может быть максимум 40 байт опций).
TOS (Type Of Service) (8 бит) - значение поля определяет приоритет дейтаграммы и желаемый тип маршрутизации.
Рис. 51. Структура байта TOS
Три младших бита (“Precedence”) определяют приоритет дейтаграммы:
· 111 - управление сетью
· 110 - межсетевое управление
· 101 - CRITIC-ECP
· 100 - более чем мгновенно
· 011 - мгновенно
· 010 - немедленно
· 001 - срочно
· 000 - обычно
Биты D,T,R,C определяют желаемый тип маршрутизации:
· D (Delay) - выбор маршрута с минимальной задержкой,
· T (Throughput) - выбор маршрута с максимальной пропускной способностью,
· R (Reliability) - выбор маршрута с максимальной надежностью,
· C (Cost) - выбор маршрута с минимальной стоимостью.
В дейтаграмме может быть установлен только один из битов D,T,R,C. Старший бит байта не используется.
Total Length (16 бит) - длина всей дейтаграммы в октетах, включая заголовок и данные, максимальное значение 65535, минимальное - 21 (заголовок без опций и один октет в поле данных).
ID (Identification) (16 бит), Flags (3 бита), Fragment Offset (13 бит) используются для фрагментации и сборки дейтаграмм и будут подробнее рассмотрены ниже в п. 2.4.1.
TTL (Time To Live) (8 бит) - “время жизни” дейтаграммы. Устанавливается отправителем, измеряется в секундах. Каждый маршрутизатор, через который проходит дейтаграмма, переписывает значение TTL, предварительно вычтя из него время, потраченное на обработку дейтаграммы. Так как в настоящее время скорость обработки данных на маршрутизаторах велика, на одну дейтаграмму тратится обычно меньше секунды, поэтому фактически каждый маршрутизатор вычитает из TTL единицу. При достижении значения TTL=0 дейтаграмма уничтожается, при этом отправителю может быть послано соответствующее ICMP-сообщение. Контроль TTL предотвращает зацикливание дейтаграммы в сети.
Protocol (8 бит) - определяет программу (вышестоящий протокол стека), которой должны быть переданы данные дейтаграммы для дальнейшей обработки. Коды некоторых протоколов приведены в таблице 8.
Таблица Коды IP-протоколов
Код | Протокол | Описание |
ICMP | Протокол контрольных сообщений | |
IGMP | Протокол управления группой хостов | |
IP | IP поверх IP (инкапсуляция) | |
TCP | TCP | |
EGP | Протокол внешней маршрутизации (устарел) | |
IGP | Протокол внутренней маршрутизации (устарел) | |
UDP | UDP | |
RSVP | Протокол резервирования ресурсов при мультикастинге | |
IGRP | Протокол внутренней маршрутизации от фирмы cisco | |
OSPF | Протокол внутренней маршрутизации |
Header Checksum (16 бит) - контрольная сумма заголовка, представляет собой 16 бит, дополняющие биты в сумме всех 16-битовых слов заголовка. Перед вычислением контрольной суммы значение поля “Header Checksum” обнуляется. Поскольку маршрутизаторы изменяют значения некоторых полей заголовка при обработке дейтаграммы (как минимум, поля “TTL”), контрольная сумма каждым маршрутизатором пересчитывается заново. Если при проверке контрольной суммы обнаруживается ошибка, дейтаграмма уничтожается.
Source Address (32 бита) - IP-адрес отправителя.
Destination Address (32 бита) - IP-адрес получателя.
Options - опции, поле переменной длины. Опций может быть одна, несколько или ни одной. Опции определяют дополнительные услуги модуля IP по обработке дейтаграммы, в заголовок которой они включены.
Padding - выравнивание заголовка по границе 32-битного слова, если список опций занимает нецелое число 32-битных слов. Поле “Padding” заполняется нулями.
Протокол ICMP
Протокол ICMP (Internet Control Message Protocol, Протокол Управляющих Сообщений Интернет) является неотъемлемой частью IP-модуля. Он обеспечивает обратную связь в виде диагностических сообщений, посылаемых отправителю при невозможности доставки его дейтаграммы и в других случаях. ICMP стандартизован в RFC-792, дополнения — в RCF-950,1256.
ICMP-сообщения не порождаются при невозможности доставки:
· дейтаграмм, содержащих ICMP-сообщения;
· не первых фрагментов дейтаграмм;
· дейтаграмм, направленных по групповому адресу (широковещание, мультикастинг);
· дейтаграмм, адрес отправителя которых нулевой или групповой.
Все ICMP-сообщения имеют IP-заголовок, значение поля “Protocol” равно 1. Данные дейтаграммы с ICMP-сообщением не передаются вверх по стеку протоколов для обработки, а обрабатываются IP-модулем.
После IP-заголовка следует 32-битное слово с полями “Тип”, “Код” и “Контрольная сумма”. Поля типа и кода определяют содержание ICMP-сообщения. Формат остальной части дейтаграммы зависит от вида сообщения. Контрольная сумма считается так же, как и в IP-заголовке, но в этом случае суммируется содержимое ICMP-сообщения, включая поля “Тип” и “Код”.
Таблица Некоторые виды ICMP-сообщений
Тип | Код | Сообщение |
Destination Unreachable (адресат недостижим по различным причинам): | ||
Net Unreachable (сеть недоступна) | ||
Host Unreachable (хост недоступен) | ||
Protocol Unreachable (протокол недоступен) | ||
Port Unreachable (порт недоступен) | ||
DF=1 (необходима фрагментация, но она запрещена) | ||
Source Route failed (невозможно выполнить опцию Source Route) | ||
Router Advertisement (объявление маршрутизатора) | ||
Router Solicitation (запрос объявления маршрутизатора) | ||
Time Exceeded (время жизни дейтаграммы истекло) | ||
Address Mask Request (запрос сетевой маски) | ||
Address Mask Reply (ответ на запрос сетевой маски) |