Поле типа сервиса ( ToS ) — это второй байт заголовка IPv4 . На протяжении многих лет оно имело различные цели и было определено различными способами в пяти RFC . [1]
До переопределения поле ToS могло указывать приоритет датаграммы и запрашивать маршрут для обслуживания с малой задержкой, высокой пропускной способностью или высокой надежностью. На основе этих значений ToS пакет помещался в приоритетную исходящую очередь [2] или выбирал маршрут с соответствующей задержкой, пропускной способностью или надежностью. На практике поле ToS никогда не находило широкого применения за пределами сетей Министерства обороны США. Однако большая часть экспериментальной, исследовательской и развёртывающей работы была сосредоточена на том, как использовать эти восемь бит, что привело к текущему определению поля DS .
Современное переопределение поля ToS (а также поля Traffic Class в пакетах IPv6 ) разделяет этот байт на 6-битное поле Differentiated Services (DS) [3] и 2-битное поле Explicit Congestion Notification (ECN). [4] В то время как Differentiated Services в некоторой степени обратно совместимы с ToS, ECN таковым не является.
Поле Type of Service в заголовке IP изначально было определено в RFC 791 и с тех пор интерпретировалось для IP Precedence и ToS . Определение было в значительной степени получено из спецификации Министерства обороны США JANAP-128, которая определяет приоритет сообщений. Она определила механизм назначения приоритета каждому пакету IP, а также механизм запроса определенной обработки, такой как высокая пропускная способность, высокая надежность или низкая задержка и т. д. В обновлении RFC 1349 введен бит Monetary Cost (ранее этот бит был отмечен как «Зарезервировано для будущего использования»). Раздел 2.4 RFC 1583 (OSPFv2) вводит метод маршрутизации с учетом ToS.
На практике только часть поля IP Precedence когда-либо использовалась за пределами сетей US DoD: чем выше значение поля IP Precedence, тем выше приоритет IP-пакета. Некоторые сети US DoD использовали бит задержки для выбора маршрута между океаническими кабельными путями и путями спутниковой связи (SATCOM), когда существовали оба пути. IPv6 никогда не имел "традиционного" поля ToS, похожего на IPv4, отчасти потому, что авторы знали об усилиях DiffServ при его разработке (RFC 2460, раздел 7).
В RFC 2474 определение всего этого поля было изменено. Теперь оно называется полем "DS" (Differentiated Services, "DiffServ"), а верхние 6 бит содержат значение, называемое "DSCP" (Differentiated Services Code Point). Верхние 3 бита DS поддерживают совместимость с IP Precedence. Начиная с RFC 3168, оставшиеся два бита (два наименее значимых бита) используются для явного уведомления о перегрузке.
RFC 8622 добавил low-effort (LE) DS для трафика, который может быть вытеснен другим трафиком (трафик с наилучшими усилиями). Он предназначен для фонового трафика с низким приоритетом, такого как массовая передача данных с низким приоритетом во времени.
До прекращения поддержки поле «Тип службы» определялось следующим образом в RFC 791:
Приоритет — это 3-битное поле, которое обрабатывает пакеты с высоким приоритетом как более важные, чем другие пакеты. Если маршрутизатор перегружен и ему нужно отбросить некоторые пакеты, он сначала отбросит пакеты с самым низким приоритетом. Хотя поле приоритета было частью IP версии 4, оно никогда не использовалось.
RFC 1349 ввел дополнительное поле "lowcost". Четыре доступных бита ToS теперь становятся:
Именование здесь соответствует соглашению операционных систем Unix. [5] RFC 1349 и RFC 1060 показывают только примеры использования одного бита за раз для значений по умолчанию приложения, хотя RFC 791 упоминает, что максимум два из трех имеющихся у него указаний должны быть установлены номинально. Одно такое использование известно из mod_iptos. [6]
Поскольку последние три бита прошли множество определений до RFC 2474 (см. ниже), документация и реализации могут быть запутанными и противоречивыми.
RFC 2474 (выпущенный в декабре 1998 года) зарезервировал первые шесть бит поля DS (или IPv4 ToS) для точки кода дифференцированных услуг (DSCP), а RFC 3168 зарезервировал последние два бита для явного уведомления о перегрузке .
DSCP определяет селектор класса (CS), присваивая имя каждому определяемому им значению, что отражает то, что интерпретировалось бы как приоритет IP, если следовать старой спецификации:
Номенклатура DSCP:
Таблица выше, в которой для значений всего поля ToS выписаны отдельные значения (не путать с редко используемой 5-битной частью):
Примечание: В таблице выше ToS показан в десятичном формате. Однако многие маршрутизаторы выражают ToS в шестнадцатеричном формате.
Начнем с приоритета IP 1 или 001
в двоичном формате. Тогда все поле ToS будет равно 001 00000
, предполагая, что неиспользуемые 5 бит равны нулю. DSCP можно интерпретировать путем повторного сегментирования до 001000 00
, где 001000
= 8 — значение DSCP, соответствующее CS1.
Хотя определения IP ToS используются нечасто, они широко распространены в netinet/ip.h
Unix -подобных или Unix- операционных системах в виде IPTOS_FIELDNAME
макросов. [5] Поле «lowcost» закомментировано в OpenBSD из-за его нового использования для указания поддержки ECN. [5] Остатки старой терминологии RFC 1349 можно найти в Transmission 2.93 [7], а также в других инструментах, поддерживающих настройку этого поля.
Старый модуль Apache «mod_iptos», когда-то упакованный в Ubuntu, отмечает, что в какой-то момент появился способ использовать несколько битов опций RFC 1349 вместе. [6]