Заголовок какого сетевого протокола имеет фиксированную длину

Обновлено: 02.07.2024

Internet Protocol — Межсетевой протокол адресации и маршрутизации, объединяет отдельные компьютерные сети в единую сеть Интернет, обеспечивая доставку пакетов данных между любыми узлами сети через произвольное число промежуточных узлов (маршрутизаторов).

Свойства:

  • Протокол не гарантирует доставки пакета до адресата (пакеты могут прийти в порядке отличном от отправки, прийти несколько раз, прийти повреждёнными или не прийти вовсе). Гарантию безошибочной доставки пакетов дают протоколы более высокого (транспортного) уровня использующие IP адресацию и маршрутизацию в качестве транспорта, например - TCP.
  • Протокол предусматривает дробление (фрагментацию) пакета данных в процессе доставки по причинам разнородных по возможностям каналов связей, такие фрагменты пакетов собираются воедино на стороне получателя. В версии 6 маршрутизаторы более не обязаны делать фрагментацию, в связи с этим в сетях IPv6 отправитель должен отправлять пакеты размером не превышающим минимального MTU назначенного пути или использовать минимальное значение MTU для сетей IPv6 равное 1280 байт.
  • В протоколе предусмотрена возможность запрета фрагментации (в версии 6 включена по умолчанию) конкретного пакета. Если такой пакет нельзя передать через сегмент связи целиком, то он уничтожается а отправителю направляется уведомление о проблеме по протоколу ICMP.

На текущий момент сеть Интернет объединена двумя версиями данного протокола адресации (IPv4, IPv6) вследствие нехватки количества адресов предоставляемого 4 версией протокола для растущего количества узлов которым необходимо единое адресное пространство.

Изменения 6 версии:

  • размер адреса увеличен с 4 байт до 16 байт;
  • размер заголовка пакета увеличился с 20 до 40 байт;
  • максимальный размер пакета увеличен с 65 Кб до 4 Гб;
  • исчезла излишняя контрольная сумма и необходимость её пересчёта на каждом узле маршрутизации;
  • появились метки потоков и классы траффика;
  • добавлена многоадресная маршрутизация;
  • включена поддержка шифрования по протоколу IPsec;

Пакет версии 4 включает:

  • 4 бита — версия протокола, содержит значение “4”
  • 4 бита — IHL, длина заголовка пакета в 32-битных словах
  • 1 байт— ToS, тип обслуживания, на практике в большинстве реализаций протокола поле почти всегда равно “0"
  • 2 байта— длина пакета от 20 до 65535 байт
  • 2 байта— идентификатор пакета, все фрагменты одного пакета имеют один идентификатор
  • 1 бит — значение “0”
  • 1 бит — флаг разрешения фрагментации
  • 1 бит — флаг указывающий последний фрагмент пакета (если значение равно “0”)
  • 13 бит — смещение текущего фрагмента в 64-битных словах
  • 1 байт — TTL, оставшееся число маршрутизаторов которое может пройти пакет, уменьшается на каждом маршрутизаторе на 1, при достижении значения “0" пакет удаляется и отправителю направляется уведомление ICMP “Time Exceeded”
  • 1 байт— идентификатор протокола транспортируемого вложенного пакета (ICMP=1, TCP=6, UDP=17, …)
  • 2 байта — контрольная сумма заголовка
  • 4 байта— адрес отправителя
  • 4 байта— адрес получателя
  • 0–40 байт — дополнительные параметры
  • 0–65515 байт — область данных

Пакет версии 6 включает:

  • 4 бита — версия протокола, содержит значение “6"
  • 1 байт — класс трафика определяющий его приоритет
  • 20 бит — метка потока идентифицирующая канал однотипных пакетов между адресатами
  • 2 байта — длина области данных в байтах
  • 1 байт — тип первого расширенного заголовка IPv6
  • 1 байт — TTL, оставшееся число маршрутизаторов которое может пройти пакет, уменьшается на каждом маршрутизаторе на 1, при достижении значения “0” пакет удаляется и отправителю направляется уведомление ICMP “Time Exceeded”
  • 16 байт — адрес отправителя
  • 16 байт — адрес получателя
  • расширенные заголовки
  • 0–64 Кбайт — область данных (с помощью опции jumbo payload в расширенном заголовке Hop-By-Hop Options возможно увеличение области данных до 4 Гбайт минус 1 байт)

Расширенные заголовки содержат дополнительную информацию и размещены между фиксированным заголовком и заголовком протокола более высокого уровня в области данных. Каждый расширенный заголовок имеет поле в котором хранится тип следующего расширенного заголовка, последний расширенный заголовок содержит в этом поле тип протокола более высокого уровня, находящегося в области данных. Каждый расширенный заголовок должен иметь размер в байтах, кратный 8. Некоторые заголовки необходимо расширить до нужного размера. Все расширенные заголовки являются необязательными.

Расширенные заголовки должны быть обработаны только конечным узлом, за исключением заголовка Hop-By-Hop Options, который должен быть обработан каждым промежуточным узлом на пути пакета, включая отправителя и получателя. Расширенные заголовки не должны повторяться в пакете более одного раза, за исключением заголовка Destination Options, который может появиться дважды.

Если расширенных заголовков в пакете несколько, то необходимо отсортировать их в порядке списка указанного ниже:

  • “0” Hop-by-Hop Options — параметры, которые должны быть обработаны каждым транзитным узлом
  • “60” Destination Options — параметры которые должны быть обработаны только получателем
  • “43” Routing — позволяет отправителю определять список узлов, которые пакет должен пройти
  • “44” Fragment — содержит информацию по фрагментации пакета
  • “51” Authentication Header — используется для аутентификации большей части пакета (IPsec)
  • “50” Encapsulating Security Payload— используется для шифрования данных (IPsec)

IP расшифровывается как Internet Protocol, часто его называют протокол интернет. Но строго говоря это не совсем так, правильный перевод межсетевой протокол или протокол межсетевого взаимодействия.

p, blockquote 1,0,0,0,0 -->

Протокол IP

p, blockquote 2,0,0,0,0 -->

Протокол Ip возник задолго до того, как появилась и стала набирать популярность сеть, которую мы называем интернет. В англоязычной терминологии internetworking означает объединение сетей, и цель протокола ip как раз объединить сети, построенные с помощью разных технологий канального уровня. У этой терминологии словом internet называлась объединенная сеть, а subnet — подсеть или отдельная сеть. Словом Internet с большой буквы сейчас называется самая крупная объединенная сеть построенная по протоколу ip.

p, blockquote 3,0,0,0,0 -->

Место в моделях OSI и TCP/IP

В модели взаимодействия открытых систем и в модели TCP/IP протокол IP, находится на одном и том же уровне — сетевом.

p, blockquote 4,0,0,0,0 -->

Протокол IP в OSI

p, blockquote 5,0,0,0,0 -->

Сетевой уровень стека протоколов TCP/IP включая также и другие протоколы кроме ip. Это ARP, DHCP и ICMP, но для передачи данных используется только протокол ip, остальные протоколы служат для обеспечения корректной работы крупной составной сети.

p, blockquote 6,0,1,0,0 -->

Протокол IP в стеке TCP

p, blockquote 7,0,0,0,0 -->

Сервисы IP

p, blockquote 8,0,0,0,0 -->

IP пакет просто отправляется в сеть в надежде, что он дойдет до получателя, если пакет по каким-то причинам не дошел, не предпринимается никаких попыток оповестить отправителя, и также не предпринимается попыток запросить этот пакет снова. Считается, что ошибка должна быть исправлена протоколами, которые находятся на вышестоящих уровнях.

p, blockquote 9,0,0,0,0 -->

Задачей IP является объединение сети, построенных на основе разных технологий канального уровня, которые могут значительно отличаться друг от друга в одну крупную объединенную сеть, в которой компьютеры могут свободно общаться друг с другом не взирая на различия конкретной сетевой технологии. Вторая важная задача протокола IP, это маршрутизация, то есть поиск маршрута от отправителя к получателю в крупной составной сети через промежуточные узлы маршрутизаторы. Также IP обеспечивает необходимое качество обслуживания.

p, blockquote 10,0,0,0,0 -->

Формат заголовка IP-пакета

Для того чтобы понять, как протокол IP реализует эту задачу, рассмотрим формат заголовка IP пакета.

p, blockquote 11,0,0,0,0 -->

Формат заголовка IP адреса

p, blockquote 12,0,0,0,0 -->

Номер версии

Первое поле номер версии. Сейчас используется две версии протокола IP 4 и 6. Большая часть компьютеров использует IPv4. Длина адреса в этой версии 4 байта. Формат адреса IP версии 4 мы рассматривали подробно. Проблема в том, что адресов IPv4, четыре с небольшим миллиарда, что уже сейчас не хватает для всех устройств в сети, а в будущем точно не хватит. Поэтому была предложена новая версия IPv6 в которой длина IP адреса составляет 16 байт. Сейчас эта версия вводится в эксплуатацию, но процесс занимает очень долгое время.

p, blockquote 13,1,0,0,0 -->

Длина заголовка

Следующее поле длина заголовка. В отличии от Ethernet заголовок IP включает обязательные поля, а также может включать дополнительные поля, которые называются опции. В поле длина заголовка записывается полная длина, как обязательной части, так и опции.

p, blockquote 14,0,0,0,0 -->

Тип сервиса

Следующее поле тип сервиса. Это поле нужно для обеспечения необходимого качества обслуживания, но сейчас на практике используется очень редко.

p, blockquote 15,0,0,0,0 -->

Общая длина

Следующее поле общая длина. Общая длина содержит длину всего IP пакета, включая заголовок и данные. Максимальная длина пакета 65 535 байт, но на практике такие большие пакеты не используются, а максимальный размер ограничен размером кадра канального уровня, а для Ethernet это 1 500 байт. В противном случае для передачи одного IP пакета необходимо было бы несколько кадров канального уровня что неудобно.

p, blockquote 16,0,0,0,0 -->

Идентификатор пакета

Поля идентификатор пакета, флаги и смещение фрагмента используются для реализации фрагментации.

p, blockquote 17,0,0,0,0 -->

Время жизни

Дальше идет поле время жизни. Время жизни Time To Live или TTL — это максимальное время в течение которого пакет может перемещаться по сети. Оно введено для того чтобы пакеты не гуляли по сети бесконечно, если в конфигурации сети возникла какая-то ошибка. Например, в результате неправильной настройке маршрутизаторов в сети, может образоваться петля. Раньше, время жизни измерялось в секундах, но сейчас маршрутизаторы обрабатывают пакет значительно быстрее чем за секунду, поэтому время жизни уменьшается на единицу на каждом маршрутизаторе, и оно измеряется в количествах прохождения через маршрутизаторы по-английски (hop) от слова прыжок. Таким образом название время жизни сейчас стало уже некорректным.

p, blockquote 18,0,0,0,0 -->

Тип протокола

После времени жизни, указывается тип протокола следующего уровня. Это поле необходимо для реализации функции мультиплексирования и демультиплексирования, то есть передачи с помощью протокола IP данных от разных протоколов следующего уровня. В этом поле указывается код протокола следующего уровня, некоторые примеры кодов для TCP код 6, UDP — 17 и ICMP — 1.

p, blockquote 19,0,0,1,0 -->

Контрольная сумма

Затем идет контрольная сумма, которая используется для проверки правильности доставки пакета, если при проверке контрольные суммы обнаруженные ошибки, то пакет отбрасывается, никакой информации отправителю пакета не отправляется. Контрольная сумма рассчитывается только по заголовку IP пакета и она пересчитывается на каждом маршрутизаторе из-за того что данные в заголовке меняются. Как минимум изменяется время жизни пакета, а также могут измениться некоторые опции.

p, blockquote 20,0,0,0,0 -->

IP адрес получателя и отправителя

После контрольной суммы идут IP адрес отправителя, и IP адрес получателя. В IPv4 длина IP адреса четыре байта, 32 бита на этом обязательная часть IP заголовка заканчивается, после этого идут не обязательные поля которые в IP называются опции.

p, blockquote 21,0,0,0,0 -->

Опции

Некоторые примеры опций. Для диагностики работы сети используется опция — записать маршрут, при которой в IP пакет записывается адрес каждого маршрутизатора через которую он проходит.

p, blockquote 22,0,0,0,0 -->

И опция — временные метки, при установке которой, каждый маршрутизатор записывает время прохождения пакеты.

p, blockquote 23,0,0,0,0 -->

Также опции позволяют отказаться от автоматической маршрутизации, и задать маршрут отправитель:

  • Это может быть жесткая маршрутизация, где в пакете явно указывается перечень маршрутизаторов через которые необходимо пройти.
  • И свободные маршрутизации в этом случае указываются только некоторые маршрутизаторы, через которые пакет должен пройти обязательно, также при необходимости он может пройти через другие маршрутизаторы.

Опции в заголовке IP может быть несколько и они могут иметь разный размер. В то же время длина IP заголовка должна быть кратна 32, поэтому при необходимости, в конце IP заголовок заполняются нулями до выравнивание по границе 32 бита. Следует отметить, что сейчас опции в заголовке IP почти не используются.

p, blockquote 25,0,0,0,0 --> p, blockquote 26,0,0,0,1 -->

В статье был рассмотрен протокол IP (Internet Protocol) — протокол межсетевого взаимодействия. Протокол IP является основой интернета. В OSI находится на сетевом уровне.

1. Функции протокола IP

2. IP-адреса

2.1. Классовая модель 2.2. Бесклассовая модель(CIDR) 2.3. Запись адресов в бесклассовой модели

3. Маршрутизация

1. Функции протокола IP

Протокол IP находится на межсетевом уровне стека протоколов TCP/IP. Функции протокола IP определены в стандарте RFC-791 следующим образом: “Протокол IP обеспечивает передачу блоков данных, называемых дейтаграммами, от отправителя к получателям, где отправители и получатели являются компьютерами, идентифицируемыми адресами фиксированной длины (IP-адресами). Протокол IP обеспечивает при необходимости также фрагментацию и сборку дейтаграмм для передачи данных через сети с малым размером пакетов”.

Гарантию правильной передачи данных предоставляют протоколы вышестоящего уровня (например, протокол TCP), которые имеют для этого необходимые механизмы.

Одна из основных задач, решаемых протоколом IP, - маршрутизация дейтаграмм, т.е. определение пути следования дейтаграммы от одного узла сети к другому на основании адреса получателя.

Общий сценарий работы модуля IP на каком-либо узле сети, принимающего дейтаграмму из сети, таков:

  • с одного из интерфейсов уровня доступа к среде передачи (например, с Ethernet-интерфейса) в модуль IP поступает дейтаграмма;
  • модуль IP анализирует заголовок дейтаграммы;
  • если пунктом назначения дейтаграммы является данный компьютер:
    • если дейтаграмма является фрагментом большей дейтаграммы, ожидаются остальные фрагменты, после чего из них собирается исходная большая дейтаграмма;
    • из дейтаграммы извлекаются данные и направляются на обработку одному из протоколов вышележащего уровня (какому именно - указывается в заголовке дейтаграммы);

    При получении данных от вышестоящего уровня для отправки их по сети IP-модуль формирует дейтаграмму с этими данными, в заголовок которой заносятся адреса отправителя и получателя (также полученные от транспортного уровня) и другая информация; после чего выполняются следующие шаги:

    • если дейтаграмма предназначена этому же узлу, из нее извлекаются данные и направляются на обработку одному из протоколов транспортного уровня (какому именно - указывается в заголовке дейтаграммы);
    • если дейтаграмма не направлена ни на один из IP-адресов данного узла, то определяются следующий узел сети, на который должна быть переправлена дейтаграмма для доставки ее по назначению, и интерфейс нижнего уровня, после чего дейтаграмма передается на нижний уровень этому интерфейсу для отправки; при необходимости может быть произведена фрагментация дейтаграммы;
    • если же дейтаграмма ошибочна или по каким-либо причинам не может быть доставлена, она уничтожается.

    Здесь и далее узлом сети называется компьютер, подключенный к сети и поддерживающий протокол IP. Узел сети может иметь один и более IP-интерфейсов, подключенных к одной или разным сетям, каждый такой интерфейс идентифицируется уникальным IP-адресом.

    IP-сетью называется множество компьютеров (IP-интерфейсов), часто, но не всегда подсоединенных к одному физическому каналу связи, способных пересылать IP-дейтаграммы друг другу непосредственно (то есть без ретрансляции через промежуточные компьютеры), при этом IP-адреса интерфейсов одной IP-сети имеют общую часть, которая называется адресом, или номером, IP-сети, и специфическую для каждого интерфейса часть, называемую адресом, или номером, данного интерфейса в данной IP-сети.

    Маршрутизатором, или шлюзом, называется узел сети с несколькими IP-интерфейсами, подключенными к разным IP-сетям, осуществляющий на основе решения задачи маршрутизации перенаправление дейтаграмм из одной сети в другую для доставки от отправителя к получателю.

    Хостами называются узлы IP-сети, не являющиеся маршрутизаторами. Обычно хост имеет один IP-интерфейс (например, связанный с сетевой картой Ethernet или с модемом), хотя может иметь и несколько.

    Маршрутизаторы представляют собой либо специализированные вычислительные машины, либо компьютеры с несколькими IP-интерфейсами, работа которых управляется специальным программным обеспечением. Компьютеры конечных пользователей, различные серверы Интернет и т.п. вне зависимости от своей вычислительной мощности являются хостами.

    2. IP-адреса

    IP-адрес является уникальным 32-битным идентификатором IP-интерфейса в Интернет. Часто говорят, что IP-адрес присваивается узлу сети (например, хосту); это верно в случае, если узел является хостом с одним IP-интерфейсом, иначе следует уточнить, об адресе какого именно интерфейса данного узла идет речь. Далее для краткости там, где это не вызовет неверного толкования, вместо адреса IP-интерфейса узла сети говорится об IP-адресе хоста.

    IP-адреса принято записывать разбивкой всего адреса по октетам, каждый октет записывается в виде десятичного числа, числа разделяются точками. Например, адрес

    IP-адрес хоста состоит из номера IP-сети, который занимает старшую область адреса, и номера хоста в этой сети, который занимает младшую часть. Положение границы сетевой и хостовой частей (обычно оно характеризуется количеством бит, отведенных на номер сети) может быть различным, определяя различные типы IP-адресов, которые рассматриваются ниже.

    2.1. Классовая модель

    В классовой модели IP-адрес может принадлежать к одному из четырех классов сетей. Каждый класс характеризуется определенным размером сетевой части адреса, кратным восьми; таким образом, граница между сетевой и хостовой частями IP-адреса в классовой модели всегда проходит по границе октета. Принадлежность к тому или иному классу определяется по старшим битам адреса.

    Класс А. Старший бит адреса равен нулю. Размер сетевой части равен 8 битам. Таким образом, может существовать всего примерно 2 7 сетей класса А, но каждая сеть обладает адресным пространством на 2 24 хостов. Так как старший бит адреса нулевой, то все IP-адреса этого класса имеют значение старшего октета в диапазоне 0 — 127, который является также и номером сети.

    Класс В. Два старших бита адреса равны 10. Размер сетевой части равен 16 битам. Таким образом, может существовать всего примерно 2 14 сетей класса В, каждая сеть обладает адресным пространством на 2 16 хостов. Значения старшего октета IP-адреса лежат в диапазоне 128 — 191, при этом номером сети являются два старших октета.

    Класс С. Три старших бита адреса равны 110. Размер сетевой части равен 24 битам. Количество сетей класса С примерно 2 21 , адресное пространство каждой сети рассчитано на 254 хоста. Значения старшего октета IP-адреса лежат в диапазоне 192 - 223, а номером сети являются три старших октета.

    Класс D. Сети со значениями старшего октета IP-адреса 224 и выше. Зарезервированы для специальных целей. Некоторые адреса используются для мультикастинга - передачи дейтаграмм группе узлов сети, например:

    224.0.0.1 - всем хостам данной сети;

    224.0.0.2 - всем маршрутизаторам данной сети;

    224.0.0.5 - всем OSPF-маршрутизаторам;

    224.0.0.6 - всем выделенным (designated) OSPF-маршрутизаторам;

    В классе А выделены две особые сети, их номера 0 и 127. Сеть 0 используется при маршрутизации как указание на маршрут по умолчанию и в других особых случаях.

    IP-интерфейс с адресом в сети 127 используется для адресации узлом себя самого (loopback, интерфейс обратной связи). Интерфейс обратной связи не обязательно имеет адрес в сети 127 (особенно у маршрутизаторов), но если узел имеет IP-интерфейс с адресом 127.0.0.1, то это - интерфейс обратной связи. Обращение по адресу loopback-интерфейса означает связь с самим собой (без выхода пакетов данных на уровень доступа к среде передачи); для протоколов на уровнях транспортном и выше такое соединение неотличимо от соединения с удаленным узлом, что удобно использовать, например, для тестирования сетевого программного обеспечения.

    В любой сети (это справедливо и для бесклассовой модели, которую мы рассмотрим ниже) все нули в номере хоста обозначают саму сеть, все единицы - адрес широковещательной передачи (broadcast).

    Другой пример: в сети 135.198.0.0 (класс В, номер хоста занимает два октета) широковещательный адрес 135.198.255.255, диапазон номеров хостов: 0.1 — 255.254 (135.198.0.1 — 135.198.255.254).

    2.2. Бесклассовая модель (CIDR)

    Предположим, в локальной сети, подключаемой к Интернет, находится 2000 компьютеров. Каждому из них требуется выдать IP-адрес. Для получения необходимого адресного пространства нужны либо 8 сетей класса C, либо одна сеть класса В. Сеть класса В вмещает 65534 адреса, что много больше требуемого количества. При общем дефиците IP-адресов такое использование сетей класса В расточительно. Однако если мы будем использовать 8 сетей класса С, возникнет следующая проблема: каждая такая IP-сеть должна быть представлена отдельной строкой в таблицах маршрутов на маршрутизаторах, потому что с точки зрения маршрутизаторов — это 8 абсолютно никак не связанных между собой сетей, маршрутизация дейтаграмм в которые осуществляется независимо, хотя фактически эти IP-сети и расположены в одной физической локальной сети и маршруты к ним идентичны. Таким образом, экономя адресное пространство, мы многократно увеличиваем служебный трафик в сети и затраты по поддержанию и обработке маршрутных таблиц.

    С другой стороны, нет никаких формальных причин проводить границу сеть-хост в IP-адресе именно по границе октета. Это было сделано исключительно для удобства представления IP-адресов и разбиения их на классы. Если выбрать длину сетевой части в 21 бит, а на номер хоста отвести, соответственно, 11 бит, мы получим сеть, адресное пространство которой содержит 2046 IP-адресов, что максимально точно соответствует поставленному требованию. Это будет одна сеть, определяемая своим уникальным 21-битным номером, следовательно, для ее обслуживания потребуется только одна запись в таблице маршрутов.

    Единственная проблема, которую осталось решить: как определить, что на сетевую часть отведен 21 бит? В случае классовой модели старшие биты IP-адреса определяли принадлежность этого адреса к тому или иному классу и, следовательно, количество бит, отведенных на номер сети.

    В случае адресации вне классов, с произвольным положением границы сеть-хост внутри IP-адреса, к IP-адресу прилагается 32-битовая маска, которую называют маской сети (netmask) или маской подсети (subnet mask). Сетевая маска конструируется по следующему правилу:

    • на позициях, соответствующих номеру сети, биты установлены;
    • на позициях, соответствующих номеру хоста, биты сброшены.

    Описанная выше модель адресации называется бесклассовой (CIDR - Classless Internet Direct Routing, прямая бесклассовая маршрутизация в Интернет). В настоящее время классовая модель считается устаревшей и маршрутизация и (большей частью) выдача блоков IP-адресов осуществляются по модели CIDR, хотя классы сетей еще прочно удерживаются в терминологии.

    2.3. Запись адресов в бесклассовой модели

    Для удобства записи IP-адрес в модели CIDR часто представляется в виде a.b.c.d / n, где a.b.c.d — IP адрес, n — количество бит в сетевой части.

    Маска сети для этого адреса: 17 единиц (сетевая часть), за ними 15 нулей (хостовая часть), что в октетном представлении равно

    Представив IP-адрес в двоичном виде и побитно умножив его на маску сети, мы получим номер сети (все нули в хостовой части). Номер хоста в этой сети мы можем получить, побитно умножив IP-адрес на инвертированную маску сети.

    Пример: IP = 205.37.193.134/26 или, что то же,

    IP = 205.37.193.134 netmask = 255.255.255.192.

    Распишем в двоичном виде:

    Умножив побитно, получаем номер сети (в хостовой части - нули):

    или, в октетном представлении, 205.37.193.128/26, или, что то же, 205.37.193.128 netmask 255.255.255.192.

    Хостовая часть рассматриваемого IP адреса равна 000110, или 6. Таким образом, 205.37.193.134/26 адресует хост номер 6 в сети 205.37.193.128/26. В классовой модели адрес 205.37.193.134 определял бы хост 134 в сети класса С 205.37.193.0, однако указание маски сети (или количества бит в сетевой части) однозначно определяет принадлежность адреса к бесклассовой модели.

    Упражнение. Покажите, что адрес 132.90.132.5 netmask 255.255.240.0 определяет хост 4.5 в сети 132.90.128.0/20 (в классовой модели это был бы хост 132.5 в сети класса В 132.90.0.0). Найдите адрес broadcast для этой сети.

    Очевидно, что сети классов А, В, С в бесклассовой модели представляются при помощи масок, соответственно, 255.0.0.0 (или /8), 255.255.0.0 (или /16) и 255.255.255.0 (или /24).

    3. Маршрутизация

    Процесс маршрутизации дейтаграмм состоит в определении следующего узла (next hop) в пути следования дейтаграммы и пересылки дейтаграммы этому узлу, который является либо узлом назначения, либо промежуточным маршрутизатором, задача которого — определить следующий узел и переслать ему дейтаграмму. Ни узел-отправитель, ни любой промежуточный маршрутизатор не имеют информации о всей цепочке, по которой пересылается дейтаграмма; каждый маршрутизатор, а также узел-отправитель, основываясь на адресе назначения дейтаграммы, находит только следующий узел ее маршрута.

    Маршрутизация дейтаграмм осуществляется на уровне протокола IP.

    Маршрутизация выполняется на основе данных, содержащихся в таблице маршрутов. Строка в таблице маршрутов состоит из следующих полей:

    Таблица может составляться вручную или с помощью специализированных протоколов. Каждый узел сети, в том числе и хост, имеет таблицу маршрутов, хотя бы самую простую.

    Основные положения:

    IP является дейтаграммным протоколом: при передаче информации по протоколу IP каждый пакет передается от узла к узлу и обрабатывается в узлах независимо от других пакетов.

    IP относится к протоколам без установки соединений. IP используется для негарантированной доставки данных, разделяемых на так называемые пакеты от одного узла сети к другому. Это означает, что на уровне этого протокола (третий уровень сетевой модели OSI) не даётся гарантий надёжной доставки пакета до адресата. В частности, пакеты могут прийти не в том порядке, в котором были отправлены, продублироваться (когда приходят две копии одного пакета; в реальности это бывает крайне редко), оказаться повреждёнными (обычно повреждённые пакеты уничтожаются) или не прибыть вовсе. Гарантию безошибочной доставки пакетов дают протоколы более высокого (транспортного уровня) сетевой модели OSI — например, Порты TCP — которые используют IP в качестве транспорта.

    Протокол IP использует принцип маршрутизации. Вид таблицы IP- маршрутизации зависит от конкретной реализации маршрутизатора, но в таблицах всех типов маршрутизаторов есть все ключевые поля, необходимые для выполнения маршрутизации. Существует несколько источников, поставляющих записи в таблицу маршрутизации:

    Во-первых, при инициализации программное обеспечение стека TCP/IP заносит в таблицу записи о непосредственно подключенных сетях и маршрутизаторах по умолчанию, а также записи об особых адресах типа 127.0.0.0.

    Во-вторых, администратор вручную заносит статические записи о специфичных маршрутах или о маршрутизаторе по умолчанию.

    В-третьих, протоколы маршрутизации автоматически заносят в таблицу динамические записи о имеющихся маршрутах.

    Важной особенностью протокола IP, отличающей его от других сетевых протоколов, является его способность выполнять динамическую фрагментацию пакетов при передаче их между сетями с различными MTU.


    Рассмотрим поля структуру IP- пакета на конкретном примере.

    Поле Длина заголовка (IHL) IP- пакета занимает 4 бит и указывает значение длины заголовка, измеренное в 32-битовых словах. Обычно заголовок IP-пакета имеет длину в 20 байт (пять 32-битовых слов), но при увеличении объема служебной информации эта длина может быть увеличена. Наибольший заголовок занимает 60 октетов.

    Поле Тип сервиса (Type of Service) занимает один байт и задает приоритетность пакета и вид критерия выбора маршрута. Первые три бита этого поля образуют подполе приоритета пакета (Precedence) . Приоритет может иметь значения от самого низкого - 0 (нормальный пакет) до самого высокого - 7 (пакет управляющей информации) . Маршрутизаторы и компьютеры могут принимать во внимание приоритет пакета и обрабатывать более важные пакеты в первую очередь. Поле Type of Service содержит также три бита, определяющие критерий выбора маршрута. Реально выбор осуществляется между тремя альтернативами: малой задержкой, высокой достоверностью и высокой пропускной способностью. Во многих сетях улучшение одного из этих параметров связано с ухудшением другого, кроме того, обработка каждого из них требует дополнительных вычислительных затрат. Поэтому редко, когда имеет смысл устанавливать одновременно хотя бы два из этих трех критериев выбора маршрута. Зарезервированные биты имеют нулевое значение. Установленный

    Поле Общая длина (Total Length) занимает 2 байта и означает общую длину пакета с учетом заголовка и поля данных. Максимальная длина пакета ограничена разрядностью поля, определяющего эту величину, и составляет 65 535 байт, однако в большинстве компьютеров и сетей такие большие пакеты не используются. При передаче по сетям различного типа длина пакета выбирается с учетом максимальной длины пакета протокола нижнего уровня, несущего IP- пакеты. Если это кадры Ethernet, то выбираются пакеты с максимальной длиной в 1500 байт, умещающиеся в поле данных кадра Ethernet. В стандарте предусматривается, что все хосты должны быть готовы принимать пакеты вплоть до 576 байт длиной (приходят ли они целиком или по фрагментам). Существует такое правило: хостам рекомендуется отправлять пакеты размером более чем 576 байт, только если они уверены, что принимающий хост или промежуточная сеть готовы обслуживать пакеты такого размера.

    Поле Идентификатор пакета (Identification) занимает 2 байта и используется для распознавания пакетов, образовавшихся путем фрагментации исходного пакета. Все фрагменты должны иметь одинаковое значение этого поля.

    Поле Флаги (Flags) занимает 3 бита и содержит признаки, связанные с фрагментацией: установленный бит DF (Do not Fragment) запрещает маршрутизатору фрагментировать данный пакет, а установленный бит MF (More Fragments) говорит о том, что данный пакет является промежуточным (не последним) фрагментом. Оставшийся бит зарезервирован.

    Поле Смещение фрагмента (Fragment Offset) занимает 13 бит и задает смещение в байтах поля данных этого пакета от начала общего поля данных исходного пакета, подвергнутого фрагментации. Используется при сборке/разборке фрагментов пакетов при передачах их между сетями с различными величинами MTU. Смещение должно быть кратно 8 байт.

    Поле Время жизни (Time to Live) занимает 1 байт и означает предельный срок, в течение которого пакет может перемещаться по сети. Время жизни данного пакета измеряется в секундах и задается источником передачи. На маршрутизаторах и в других узлах сети по истечении каждой секунды из текущего времени жизни вычитается единица; единица вычитается и в том случае, когда время задержки меньше секунды. Поскольку современные маршрутизаторы редко обрабатывают пакет дольше, чем за одну секунду, то время жизни можно считать равным максимальному числу узлов, которые разрешено пройти данному пакету до того, как он достигнет места назначения. Если параметр времени жизни станет нулевым до того, как пакет достигнет получателя, этот пакет будет уничтожен. Время жизни можно рассматривать как часовой механизм самоуничтожения. Значение этого поля изменяется при обработке заголовка IP-пакета.

    Идентификатор Протокол верхнего уровня (Protocol) занимает 1 байт и указывает, какому протоколу верхнего уровня принадлежит информация, размещенная в поле данных пакета (например, это могут быть сегменты протоколов верхних уровней или протоколов маршрутизации). Значения идентификаторов для различных протоколов приводятся в документе RFC 3232 - Assigned Numbers.

    Контрольная сумма (Header Checksum) занимает 2 байта и рассчитывается только по заголовку. Поскольку некоторые поля заголовка меняют свое значение в процессе передачи пакета по сети (например, время жизни), контрольная сумма проверяется и повторно рассчитывается при каждой обработке IP- заголовка. Контрольная сумма - 16 бит - подсчитывается как дополнение к сумме всех 16-битовых слов заголовка. При вычислении контрольной суммы значение самого поля "контрольная сумма" устанавливается в нуль. Если контрольная сумма неверна, то пакет будет отброшен, как только ошибка будет обнаружена.

    IP-адрес назначения (Destination IP Address) имеют одинаковую длину - 32 бита - и одинаковую структуру.

    Поле Опции (IP Options) является необязательным и используется обычно только при отладке сети. Механизм опций предоставляет функции управления, которые необходимы или просто полезны при определенных ситуациях, однако он не нужен при обычных коммуникациях. Это поле состоит из нескольких подполей, каждое из которых может быть одного из восьми предопределенных типов. В этих подполях можно указывать точный маршрут прохождения маршрутизаторов, регистрировать проходимые пакетом маршрутизаторы, помещать данные системы безопасности, а также временные отметки. Так как число подполей может быть произвольным, то в конце поля Опции должно быть добавлено несколько байт для выравнивания заголовка пакета по 32-битной границе.

    Поле Выравнивание (Padding) используется для того, чтобы убедиться в том, что IP- заголовок заканчивается на 32-битной границе. Выравнивание осуществляется нулями.

    Фрагментация IP пакетов: MTU, MSS, и PMTUD. PMTUD (Path MTU Discovery) и проблема фрагментации пакетов (network mtu ping packet)

    Почему же работают пинг при проблемах с MTU? Пакеты ICMP Request и Relpy имеют размер от 32 до 64 байтов, пингуемый сервер возвращает очень мало информации, которая вполне укладывается в допустимый размер вместе со всеми заголовками.

    Протокол Порты TCP позволяет согласовать значение максимального размера сегмента (MSS) обоим участникам соединения. Каждая сторона указывает предлагаемый размер MSS в поле ОПЦИИ заголовка пакета TCP. Будет принято наименьшее из двух значений. Такое согласование позволяет избежать фрагментации пакетов при прохождении через маршрутизаторы и шлюзы, и их последующей сборки на целевом хосте, что приводит к задержкам и снижению скорости передачи.

    Поэтому протокол IP в узле-отправителе не использует свои возможности по фрагментации пакетов.

    А вот при необходимости передать пакет в следующую сеть, для которой размер пакета является слишком большим, IP-фрагментация становится необходимой.

    В большинстве типов локальных и глобальных сетей значения MTU, то есть максимальный размер поля данных, в которое должен инкапсулировать свой пакет протокол IP, значительно отличается.

    Сети Ethernet имеют значение MTU, равное 1500 байт, сети FDDI - 4096 байт, а сети Х.25 чаще всего работают с MTU в 128 байт.

    Итак, необходимость фрагментации пакетов на уровне IP мы пояснили. Теперь перейдем к самому процессу фрагментации пакетов IP.

    Как мы уже выяснили из предыдущего раздела нашего урока, в поле Flags заголовка IP-пакет может быть помечен как не фрагментируемый. Любой пакет, помеченный таким образом, не может быть фрагментирован модулем IP ни при каких условиях.

    Протокол IP допускает возможность использования в пределах отдельной подсети ее собственных средств фрагментирования, невидимых для протокола IP.

    Процедуры фрагментации и сборки протокола IP рассчитаны на то, чтобы пакет мог быть разбит на практически любое количество частей, которые впоследствии могли бы быть вновь собраны.

    Для того, чтобы не перепутать фрагмент различных типов, в заголовке IP-пакетов используется поле Identification.

    Модуль протокола IP, отправляющий пакет, устанавливает в поле Identification значение, которое должно быть уникальным для данной пары отправитель - получатель. Кроме этого отправитель в заголовке пакета устанавливает время, в течение которого пакет может быть активным в сети.

    Поле смещения фрагмента (Fragment Offset) сообщает получателю положение фрагмента в исходном пакете. Смещение фрагмента и длина определяют часть исходного пакета, принесенную этим фрагментом. Флаг "more fragments" показывает появление последнего фрагмента. Модуль протокола IP, отправляющий неразбитый на фрагменты пакет, устанавливает в нуль флаг "more fragments" и смещение во фрагменте.

    Все эти поля дают достаточное количество информации для сборки пакета.

    Итак, чтобы разделить на фрагменты большой пакет, модуль протокола IP, установленный, например, на маршрутизаторе, создает несколько новых пакетов и копирует содержимое полей IP-заголовка из большого пакета в IP-заголовки всех новых пакетов. Данные из старого пакета делятся на соответствующее число частей, размер каждой из которых, кроме самой последней, обязательно должен быть кратным 8 байт.

    Размер последней части данных равен полученному остатку.

    Каждая из полученных частей данных помещается в новый пакет.

    Когда происходит фрагментация, то некоторые параметры IP-заголовка копируются в заголовки всех фрагментов, а другие остаются лишь в заголовке первого фрагмента.

    Процесс фрагментации может изменить значения данных, расположенных в поле параметров, и значение контрольной суммы заголовка, изменить значение флага "more fragments" и смещение фрагмента, изменить длину IP-заголовка и общую длину пакета.

    В заголовок каждого пакета заносятся соответствующие значения в поле смещения "fragment offset", а в поле общей длины пакета помещается длина каждого пакета.

    Таким образом, первый фрагмент будет иметь в поле "fragment offset" нулевое значение. Во всех пакетах, кроме последнего, флаг "more fragments" устанавливается в единицу, а в последнем фрагменте - в нуль.

    Теперь давайте рассмотрим процесс сборки фрагментов пакетов.

    Чтобы собрать фрагменты пакета, модуль протокола IP объединяет IP-пакеты, имеющие одинаковые значения в полях идентификатора, отправителя, получателя и протокола.

    Таким образом, отправитель должен выбрать идентификатор таким образом, чтобы он был уникален для данной пары отправитель-получатель, для данного протокола и в течение того времени, пока данный пакет (или любой его фрагмент) может существовать в составной IP-сети.

    Вполне очевидно, что модуль протокола IP, отправляющий пакеты, должен иметь таблицу идентификаторов, где каждая запись соотносится с каждым отдельным получателем, с которым осуществлялась связь, и указывает последнее значение максимального времени жизни пакета в IP-сети.

    Однако, поскольку поле идентификатора допускает 65 536 различных значений, некоторые хосты могут использовать просто уникальные идентификаторы, не зависящие от адреса получателя.

    В некоторых случаях целесообразно, чтобы идентификаторы IP-пакетов выбирались протоколами более высокого, чем IP, уровня.

    Процедура объединения заключается в помещении данных из каждого фрагмента в позицию, указанную в заголовке пакета в поле "fragment offset".

    Каждый модуль IP должен быть способен передать пакет из 68 байт без дальнейшей фрагментации. Это связано с тем, что IP-заголовок может включать до 60 байт, а минимальный фрагмент данных - 8 байт. Каждый получатель должен быть в состоянии принять пакет из 576 байт в качестве единого куска либо в виде фрагментов, подлежащих сборке. Если бит флага запрета фрагментации (Don't Fragment, DF) установлен, то фрагментация данного пакета запрещена, даже если в этом случае он будет потерян.

    Данное средство может использоваться для предотвращения фрагментации в тех случаях, когда хост - получатель не имеет достаточных ресурсов для сборки фрагментов.

    Итак, после длительных объяснений давайте закрепим на примере все, что мы сейчас узнали о фрагментации IP-пакетов.


    Рассмотрим процесс фрагментации IP-пакетов при передаче между сетями с разным размером пакетов на примере, который показан на этом рисунке.

    Канальный и физический уровни обозначены, как К1, Ф1, К2, Ф2 соответственно.

    Пусть компьютер 1 связан с сетью, имеющей значение MTU в 4096 байт, например с сетью FDDI.

    В первом пакете величина поля смещения равна 0, а во втором - 2800.

    Признак фрагментации во втором пакете равен нулю, что показывает, что это последний фрагмент пакета.

    Общая величина IP-пакета составляет 2800 плюс 20 (размер IP-заголовка), то есть 2820 байт, что умещается в поле данных кадра FDDI.

    Далее модуль IP компьютера 1 передает эти пакеты своему сетевому интерфейсу (образуемому протоколами канального уровня К1 и физического уровня Ф1)

    Сетевой интерфейс отправляет кадры следующему маршрутизатору.

    После того, как кадры пройдут уровень сетевого интерфейса маршрутизатора (К1 и Ф1) и освободятся от заголовков FDDI, модуль IP по сетевому адресу определяет, что прибывшие два пакета нужно передать в сеть 2, которая является сетью Ethernet и имеет значение MTU, равное 1500.

    Следовательно, прибывшие IP-пакеты необходимо фрагментировать.

    Маршрутизатор извлекает поле данных из каждого пакета и делит его еще пополам, чтобы каждая часть уместилась в поле данных кадра Ethernet.

    Затем он формирует новые IP-пакеты, каждый из которых имеет длину 1400 + 20 = 1420 байт, что меньше 1500 байт, поэтому они нормально помещаются в поле данных кадров Ethernet.

    В результате в компьютер 2 по сети Ethernet приходят четыре IP-пакета с общим идентификатором 486.

    Если пакеты пришли не в том порядке, в котором были посланы, то смещение укажет правильный порядок их объединения.

    При приходе первого фрагмента пакета узел назначения запускает таймер, который определяет максимально допустимое время ожидания прихода остальных фрагментов этого пакета.

    Таймер устанавливается на максимальное из двух значений: первоначальное установочное время ожидания и время жизни, указанное в принятом фрагменте.

    Формат основного заголовка IPv6 имеет фиксированную длину 40 байт (рис.4.55).


    · удалены поля, относящиеся к фрагментации, так как все узлы, поддерживающие протокол IPv6, должны динамически определять нужный размер дейтаграммы, что делает фрагментацию маловероятной;

    · минимальный размер пакета, который должен передаваться в сетях IPv6 без фрагментации, увеличен с 576 до 1280 байт;

    Таким образом, протокол IPv6 является простым, быстрым и гибким протоколом сетевого уровня с огромным адресным пространством.

    Фрагментация. Транспортные протоколы стека TCP/IP. Транспортный протокол UDP. Транспортный протокол TCP.

    Фрагментация

    В объединяемых сетях разных технологий допустимая максимальная длина пакетов (Maximum Transfer Unit, MTU)различна и варьируется от 53 байт в АТМ-сетях до 65 535 байт в IP-сетях. При объединении таких сетей возникает проблема, связанная необходимостью разбиения большого пакета при его передаче через сеть с меньшей допустимой длиной пакета.

    Если пакет проходит через последовательность сетей и попадает в сеть, у которой значение MTU оказывается меньше размера пакета, пограничный маршрутизатор разбивает пакет на две или более части.

    Процесс разбиения длинного пакета на более короткие называется фрагментацией, а соответствующие короткие пакеты – фрагментами.

    При фрагментации каждый новый пакет получает свой IP-заголовок (20 байт), что увеличивает накладные расходы. После прохождения фрагментов через соответствующую сеть необходимо восстановить исходный пакет из фрагментов.

    Фрагментация в сетях может быть реализована двумя способами (рис.4.56):


    Принцип реализации прозрачной фрагментации на примере передачи длинного пакета от узла А к узлу В через две подсети (Ethernet и АТМ) с меньшим значением MTU показан на рис.4.57.


    Подсети с разными MTU имеют шлюзы – специализированные маршрутизаторы, предоставляющие интерфейсы для связи с другими сетями. Если на такой шлюз приходит пакет слишком большого размера, он разбивается на фрагменты в соответствии с принятым в данной сети значением MTU. Каждый фрагмент адресуется одному и тому же выходному шлюзу, который восстанавливает из этих фрагментов исходный пакет и. Таким образом, прохождение данных через сети (подсети) с маленькими значениями MTU оказывается прозрачным для пользователей.

    Прозрачная фрагментация обладает простотой, но при этом имеет ряд существенных недостатков:

    · выходной шлюз должен собрать все фрагменты для восстановления исходного пакета, для чего в заголовках фрагментов необходимо иметь дополнительную информацию, например, номер фрагмента и признак последнего фрагмента;

    · все фрагменты одного пакета должны покидать подсеть через один и то же шлюз, что снижает эффективность маршрутизации;

    · появляются дополнительные накладные расходы на фрагментацию и дефрагментацию, что снижает производительность сети и увеличивает время доставки пакетов.

    Сквозная фрагментация (рис.4.58) является альтернативной по отношению к прозрачной фрагментации и состоит в отказе от восстановления пакета из фрагментов в каждой подсети. Пакет разбивается на фрагменты сразу же в узле-отправителе А или в шлюзе Ш1 сети Эти фрагменты передаются по сети как самостоятельные пакеты независимо друг от друга и собираются только в конечном шлюзе ШN или узле-получателе В.


    Недостатками такого способа фрагментации являются следующие:

    · необходимо, чтобы каждый узел (или шлюз) могли восстанавливать пакеты из фрагментов;

    · возрастают накладные расходы на передачу данных, так как каждый фрагмент должен иметь заголовок, который сохраняется на протяжении всего пути, что снижает пропускную способность сети;

    · необходимо иметь информацию о том, какие значения MTU имеют подсети, через которые проходит путь передачи данных, чтобы задать размер фрагментов.

    Для того чтобы правильно восстановить исходный пакет из фрагментов необходимо иметь эффективную систему нумерации фрагментов. Одна из таких систем основана на понятии элементарного фрагмента, имеющего небольшой размер, достаточный для его передачи через любую подсеть. Например, длина элементарного фрагмента может быть равна 8 байтам, как это показано на рис.4.59. Исходный пакет разбивается на множество элементарных фрагментов одинаковой длины (рис.4.59,а), кроме последнего, который может быть короче. Фрагменты, формируемые в некоторой подсети и называемые межсетевыми пакетами, могут состоять из нескольких элементарных фрагментов (рис.4.59,б), число которых определяется значением MTU, принятым для данной подсети. Заголовок таких фрагментов должен содержать (рис.4.59):

    · номер исходного пакета (ИП);

    · номер первого элементарного фрагмента (нумерация начинается с нуля), содержащегося в нём, который в заголовке IP-пакета называется смещением фрагмента (СФ);

    · признак конца (ПК) пакета.

    Поскольку размер элементарного фрагмента выбирается таким образом, чтобы он мог пройти через любую сеть, дальнейшая фрагментация межсетевого пакета не составляет проблемы.

    Читайте также: