ICMP-сообщения об ошибках никогда не выдаются:
Эти правила призваны блокировать потоки дейтаграмм, посылаемые в отклик на мультикастинг- или широковещательные ICMP-сообщения. Особенности протокола ICMPv6 описаны в документе RFC-2463. В IPv6 на протокол ICMP возложены функции управления группами (IGMP).
ICMP-сообщения имеют свой формат, а схема их вложения аналогична UDP или TCP и представлена на рис. 3.1.
Все ICMP пакеты начинаются с 8-битного поля типа ICMP и его кода (15 значений).
(рис 3.1) Схема вложения ICMP-пакетов в Ethernet-кадрПо существу, значения полей типа и кода выполняют почти ту же функцию, что и порт в ТСР и UDP-протоколах.
Код уточняет функцию ICMP-сообщения. Таблица 3.1 этих кодов приведена ниже (символом * помечены сообщения об ошибках, остальные являются запросами).
Процедура "отключение источника" (quench, поле тип ICMP=4 ) позволяет управлять потоками данных в каналах Интернет. Не справляясь с обработкой дейтаграмм, ЭВМадресат (или транзитное сетевое устройство) может послать запрос "отключить источник" отправителю, который может сократить темп посылки пакетов, например, вдвое, или вовсе прервать их посылку. Специальной команды, отменяющей прежние запреты, не существует. Если сообщения об отключении прекращаются, источник может возобновить посылку пакетов или увеличить частоту их отправки. Ниже (на рис. 3.2) представлен формат эхозапроса (ping) и отклика для протокола ICMP.
Поля идентификатор (обычно это идентификатор процесса) и номер по порядку (увеличивается на 1 при посылке каждого пакета) служат для того, чтобы отправитель мог связать в пары запросы и отклики.
Поле тип определяет, является ли этот пакет запросом (8) или откликом (0). Поле контрольная сумма представляет собой 16-разрядное дополнение по модулю 1 контрольной суммы всего ICMP-сообщения, начиная с поля тип. Поле данные служит для записи информации, возвращаемой отправителю. При выполнении процедуры ping эхозапрос с временной меткой в поле данные посылается адресату. Если адресат активен, он принимает IP-пакет, меняет адрес отправителя и получателя местами и посылает его обратно. ЭВМ-отправитель, восприняв этот отклик, может сравнить временную метку, записанную им в пакет, с текущим показанием внутренних часов и определить время распространения пакета (RTT - round trip time). Размер поля данные не регламентирован и определяется предельным размером IP-пакета.
| ICMP-сообщение | описание сообщения | |
|---|---|---|
| Тип | код | |
| 0 | Эхо-ответ (ping-отклик) | |
| 3 | Адресат недостижим | |
| 0 | * Сеть недостижима | |
| 1 | * ЭВМ недостижима | |
| 2 | * Протокол недоступен | |
| 3 | * Порт недоступен | |
| 4 | * Необходима фрагментация сообщения (установлен флаг DF) | |
| 5 | * Маршрутизация отправителя нереализуема | |
| 6 | * Сеть места назначения неизвестна | |
| 7 | * ЭВМ места назначения неизвестна | |
| 8 | * Исходная ЭВМ изолирована (устарело) | |
| 9 | * Связь с сетью места назначения административно запрещена | |
| 10 | * Связь с ЭВМ места назначения административно запрещена | |
| 11 | * Сеть не доступна для данного вида сервиса (TOS) | |
| 12 | * ЭВМ не доступна для данного вида сервиса (TOS) | |
| 13 | * Связь административно запрещена с помощью фильтра | |
| 14 | * Нарушение старшинства ЭВМ | |
| 15 | * Дискриминация по старшинству | |
| 4 | 0 | * Отключение источника при переполнении очереди (quench) |
| 5 | Переадресовать (изменить маршрут) | |
| 0 | Переадресовать дейтаграмму в сеть (устарело) | |
| 1 | Переадресовать дейтаграмму на ЭВМ | |
| 2 | Переадресовать дейтаграмму для типа сервиса (ToS) и сети | |
| 3 | Переадресовать дейтаграмму для типа сервиса и ЭВМ | |
| 8 | 0 | Эхо запроса (ping-запрос) |
| 9 | 0 | Объявление маршрутизатора |
| 10 | 0 | Запрос маршрутизатора |
| 11 | Для дейтаграммы время жизни истекло (ttl=0): | |
| 0 | *при передаче | |
| 1 | * тайм-аут при сборке (случай фрагментации) | |
| 12 | * Проблема с параметрами дейтаграммы | |
| 0 | * Ошибка в IP-заголовке | |
| 1 | * Отсутствует необходимая опция | |
| 13 | Запрос временной метки | |
| 14 | Временная метка-отклик | |
| 15 | Запрос информации (устарел) | |
| 16 | Информационный отклик (устарел) | |
| 17 | Запрос адресной маски | |
| 18 | Отклик на запрос адресной маски | |

(рис 3.2a) Формат эхо-запроса и отклика ICMP(рис 3.2) Так как в пакете ICMP нет поля порт, то при запуске нескольких процессов PING одновременно может возникнуть проблема с тем, какому из процессов следует передать тот или иной отклик. Для преодоления этой неопределенности следует использовать уникальные значения полей идентификатор.
Время распространения ICMP-запроса, вообще говоря, не равно времени распространения отклика (ситуация с очередями, например, в маршрутизаторах может быть разной). Это связано не только с возможными изменениями в канале. В общем случае маршруты их движения могут быть различными. Те же запросы используются при выполнении процедуры Traceroute.
Эта процедура позволяет не только диагностировать, но и оптимизировать маршрут. Например, команда traceroute cernvm.cern.ch, выданная в ЭВМ SUN (ИТЭФ), может отобразить на экране (в скобках указаны IP-адреса узлов и значения времени жизни дейтаграмм, значения RTT приводится в миллисекундах) (таблица 3.1.1.):
| traceroute to crnvma cern ch | (128 141 2 4) 30 hops max, 40 byte packets | |
|---|---|---|
| 1 | itep-fddi-bbone | (193.124.224.50) 3 ms 2 ms 3 ms |
| 2 | (193.124.137.13) 3 ms 3 ms 3 ms | |
| 3 | npi- |
(193.124.137.9) 27 ms 3 ms 9 ms |
| 4 | desy.hamburg.de.radio- |
(193.124.137.6) 556 ms 535 ms 535 ms |
| 5 | * 188.1.133.56 | (188.1.133.56) 637ms 670ms |
| 6 | duesseldorf2.empb.net | (193.172.4.12) 740ms(ttl=59!) 839ms(ttl=59!) 2066ms(ttl=59!) |
| 7 | bern3.empb.net | (193.172.4.30) 2135ms (ttl=58!) 1644ms (ttl=58!) 1409ms (ttl=58!) |
| 8 | cernh3.euro-hep.net | (193.172.24.10) 1808ms 1508ms 1830ms |
| 9 | cgate1.cern.ch | (192.65.185.1) 1116ms 1270ms 1278ms |
| 10 | crnvma.cern.ch | (128.141.2.4) 1132ms 1362ms 1524ms |
Отсюда видно, что наиболее узкими участками маршрута (на момент выполнения процедуры) являются Гамбург-Дюссельдорф-Берн-CERN. Следует иметь в виду, что канал МГУ-Гамбург был спутниковым и 500мс задержки здесь вносит удвоенное время распространения сигнала до спутника и обратно. Участок Гамбург-Дюссельдорф (X.25, квота 256кбит/с) был общим для потока данных из Германии в США. Передача IP поверх X.25 также снижает эффективную широкополосность канала. Остальные связи обладают недостаточной пропускной способностью. Программа ping показывает для данных участков в часы пик высокую долю потерянных пакетов. Таким образом, имея карту связей и используя указанные процедуры, вы можете успешно диагностировать ситуацию в сети. Продвинутые же программисты могут легко написать свои диагностические программы, базирующиеся на ICMP, как для локальной сети, так и для "окрестного" Интернет.
Когда маршрутизатор не может доставить дейтаграмму по месту назначения, он посылает отправителю сообщение "адресат недостижим" (destination unreachable). Формат такого сообщения показан ниже (на рис. 3.3).
(рис 3.3) Формат ICMP-сообщения "адресат недостижим"Поле код содержит целое число, проясняющее положение дел. Перечень кодов таких сообщений помещен в таблице 3.1. Поле MTU на следующем этапе характеризует максимальную длину пакетов на очередном шаге пересылки. Эта информация (MTU) позволяет выбрать оптимальный размер пакета.
Так как в сообщении содержится Интернет-заголовок и первые 64-бита дейтаграммы, легко понять, какой адрес оказался недостижим. Этот тип ICMP-сообщения посылается и в случае, когда дейтаграмма имеет флаг DF=1 ("не фрагментировать"), а фрагментация необходима. В поле код в этом случае будет записано число 4.
Если буфер приема сообщения переполнен, ЭВМ посылает сообщение типа 4.
Так как собственные часы различных ЭВМ имеют свое представление о времени, протокол ICMP, среди прочего, служит для синхронизации работы различных узлов, если это требуется (запросы временных меток).
Когда дейтаграммы поступают слишком часто и принимающая сторона не справляется с этим потоком, отправителю может быть послано сообщение с требованием резко сократить информационный поток (quenchзапрос). Снижение потока должно продолжаться до тех пор, пока не прекратятся quenchзапросы. Такое сообщение имеет формат, показанный на рис. 3.4.
(рис 3.4) Формат ICMP-запроса снижения загрузкиВ Internet таблицы маршрутизации остаются без изменений достаточно долгое время, но иногда они все же меняются. Если маршрутизатор обнаружит, что ЭВМ использует неоптимальный маршрут, он может послать ей ICMP-запрос переадресации. При этом следует учитывать, что этой возможностью может воспользоваться и хакер. Формат такого сообщения отображен на рисунке 3.5.
(рис 3.5) Формат ICMP-запроса переадресацииПоле Internet-адрес маршрутизатора содержит адрес маршрутизатора, который ЭВМ должна использовать, чтобы посланная дейтаграмма достигла места назначения, указанного в ее заголовке. В поле internet-заголовок кроме самого заголовка лежит 64 первых бита дейтаграммы, вызвавшей это сообщение. Поле код специфицирует то, как нужно интерпретировать адрес места назначения (см. табл. 3.1).
Команды переадресации маршрутизатор посылает только ЭВМ и никогда другим маршрутизаторам. Рассмотрим конкретный пример. Пусть некоторая ЭВМ на основе своей маршрутной таблицы посылает пакет маршрутизатору M1. Он, просмотрев свою маршрутную таблицу, находит, что пакет следует переслать маршрутизатору M2. Причем выясняется, что пакет из M1 в M2 следует послать через тот же интерфейс, через который он попал в M1. Это означает, что M2 доступен и непосредственно для ЭВМ-отправителя. В такой ситуации M1 посылает ICMP-запрос переадресации ЭВМ-отправителю указанного пакета с тем, чтобы она внесла соответствующие коррективы в свою маршрутную таблицу (либо чтобы администратор поменял IPадрес или маску ЭВМ).
Маршрутная таблица может загружаться из файла, формироваться менеджером сети, но может создаваться и в результате запросов и объявлений, посылаемых маршрутизаторами. После загрузки системы маршрутизатор посылает широковещательный запрос. Один или более маршрутизаторов посылают в ответ сообщения об имеющейся маршрутной информации. Кроме того, маршрутизаторы периодически (раз в 450600 сек.) широковещательно объявляют о своих маршрутах, что позволяет другим маршрутизаторам скорректировать свои маршрутные таблицы. В RFC-1256 описаны форматы ICMP-сообщений такого рода (см. рис. 3.6). Из--за своей уязвимости данная технология в последнее время практически не используется.
(рис 3.6) Формат ICMP-сообщений об имеющихся маршрутахПоле число адресов характеризует количество адресных записей в сообщении. Поле длина адреса содержит число 32-битных слов, необходимых для описания адреса маршрутизатора. Поле время жизни предназначено для записи продолжительности жизни объявленных маршрутов (адресов) в секундах. По умолчанию время жизни равно 30 мин. Поля уровень приоритета представляют собой меру приоритетности маршрута по отношению к другим
(рис 3.7) Формат запроса маршрутной информацииЕсли вы работаете с ОС Windows, а конфигурационными сетевыми параметрами являются IP-адрес вашей ЭВМ, сетевая маска и адреса GW и DNS, то процедуры переадресации, скорее всего к вам отношения не имеют.
Так как следующий прогон (hop) дейтаграммы определяется на основании локальной маршрутной таблицы, ошибки в последней могут привести к зацикливанию пакетов. Причиной зацикливания могут быть и многие другие причины. Для подавления таких циркуляций используется контроль по времени жизни пакета (TTL). При ликвидации пакета по истечении TTL маршрутизатор посылает отправителю сообщение "время истекло", которое имеет формат (рис. 3.8):
(рис 3.8) Формат сообщения "время (TTL) истекло"Значение поля код определяет природу таймаута (см. табл. 3.1).
Когда маршрутизатор или ЭВМ выявили какую-либо ошибку, не из числа описанных выше (например, нелегальный заголовок дейтаграммы), посылается сообщение "конфликт параметров". Это может произойти, например, при неверных параметрах опций. В этом случае посылается сообщение вида (рис. 3.9):
(рис 3.9) Формат сообщения типа "конфликт параметров"Поле указатель отмечает октет дейтаграммы, который создал проблему. Код=1 применяется для сообщения о том, что отсутствует требуемая опция (например, опция безопасности при конфиденциальных обменах); поле указатель при значении поля код=1 не используется.
В процессе трассировки маршрутов возникает проблема синхронизации работы часов в различных ЭВМ. К счастью, синхронизация внутренних часов ЭВМ требуется не так часто (например, при выполнении синхронных измерений), негативную роль здесь могут играть задержки в каналах связи. Для запроса временной метки другой ЭВМ используется сообщение запрос временной метки, которое вызывает отклик с форматом (рис. 3.10):
(рис 3.10) Формат ICMP-запроса временной меткиПоле тип=13 указывает на то, что это запрос, а тип=14 - на то, что это отклик. Поле идентификатор и номер по порядку используются отправителем для связи запроса и отклика. Поле исходная временная метка заполняется отправителем непосредственно перед отправкой пакета. Поле временная метка на входе заполняется маршрутизатором при получении этого пакета, а временная метка на выходе - непосредственно перед его отправкой.
При работе с субсетью важно знать маску этой субсети. Как уже отмечалось выше, IPадрес содержит секцию адреса ЭВМ и секцию адреса сети. Для получения маски субсети ЭВМ может послать "запрос маски" в маршрутизатор и получить отклик, содержащий эту маску. ЭВМ может это сделать непосредственно, если ей известен адрес маршрутизатора, либо прибегнуть к широковещательному запросу. Ниже описан формат таких запросовоткликов (рис. 3.11).
(рис 3.11) Формат запроса (отклика) маски субсетиПоле тип здесь специфицирует модификацию сообщения, тип=17 - это запрос, а тип=18 - отклик. Поля идентификатор и номер по порядку, как обычно, обеспечивают взаимную привязку запроса и отклика, а поле адресная маска содержит 32-разрядную маску сети.
Процесс интеграции услуг в Интернет несколько лет назад перешел в практическую плоскость и вслед за IPтелефонией, настала очередь
Протокол
Протокол UDP исключает большие задержки, но приложения UDP, которые используют управление перегрузкой, вынуждены вносить задержки сами. Протокол
Одной из целей
Возможны разные механизмы управления перегрузкой для разных приложений. Например, игры реального времени могут требовать быстрого использования всей доступной полосы пропускания, в то время как потоковая среда может использовать компромисс между скоростью отклика и стабильной, менее импульсивной передачей. (Резкое изменение потока может вызвать неприемлемые сбои UI, такие, как слышимые паузы или щелчки). Протокол
Протокол
В
Предполагается, что протокольные механизмы
Протокол
Ниже рассмотрены наиболее существенные отличия
Каждое
(рис 3.12) Структура обменов в протоколе DCCP Любое соединение
Протокол
Посылается клиентом для инициализации соединения (первый шаг трехходовой процедуры).
Посылается сервером в ответ на запрос DCCPRequest (второй этап трехшаговой процедуры инициации соединения).
Используется для передачи прикладных данных.
Используется для передачи только подтверждений.
Используется для передачи прикладных данных в сочетании с подтверждениями.
Посылается сервером для предложения клиенту закрыть соединение.
Используется клиентом или сервером для закрытия соединения; также для запуска процедуры сброса (DCCPReset).
Используется для закрытия соединения, обычным или необычным образом.
Используется для ресинхронизации номеров пакетов после длительного периода потерь.
Процедура взаимодействия партнеров включает в себя следующие обмены.
Все
(рис 3.13) Базовый заголовок пакетов DCCPЕсли X равно нулю, передаются только младшие (
Порт отправителя и получателя (по 16 бит каждый)
Эти поля идентифицируют соединение, аналогично соответствующим полям TCP и UDP. Порт отправителя характеризует порт, через который послан данный пакет, а порт назначения характеризует процесс, которому должен быть этот пакет доставлен. Когда соединение формируется, клиент должен выбрать порт отправителя случайным образом, чтобы уменьшить вероятность атаки.
Прикладные интерфейсы
Смещение данных (8 бит)
Смещение от начала заголовка пакета
CCVal (4 бита)
Используется HCотправителем CCID. Например, CCID отправителя A-B, который активен в CCVal. Отправитель должен установить CCVal равным нулю, если только HCотправитель CCID не требует иного, а получатель должен игнорировать поле CCVal, если HCполучатель CCID не специфицирует обратного.
Checksum .
Поле CsCov определяет части пакета, которые покрываются полем контрольная сумма. Она всегда покрывает заголовок и опции
Контрольная сумма (16 бит)
Интернет контрольная сумма заголовка пакета CsCov, все, некоторые или никакие поля данных приложений.
Зарезервировано (Res) (3 бита)
Отправитель должен записать в это поле все нули, а получатель должен это поле игнорировать.
Тип (4 бита)
Поле тип специфицирует тип пакета. Определены следующие типы пакетов:
| Тип | назначение |
|---|---|
| 0 | |
| 1 | |
| 2 | |
| 3 | |
| 4 | |
| 5 | |
| 6 | |
| 7 | |
| 8 | |
| 9 | |
| 10-15 | Зарезервировано |
Адресаты должны игнорировать любые пакеты с зарезервированным типом.
Расширенные порядковые номера (X). 1 бит
Если Х=1, в заголовке используются 48-разрядные порядковые номера. Пакеты X, равное 0 или 1. Все пакеты Х=1 ; партнеры должны игнорировать любые такие пакеты с Х=0. При высокоскоростных соединениях следует использовать для всех пакетов Х=1.
Порядковый номер. 48 или 24 бита
Идентифицирует пакет в последовательности. Номер по порядку увеличивается на 1 после посылки каждого пакета, включая пакеты
Каждому механизму управления перегрузкой, поддерживаемому
CCID является характеристикой сервера, при согласовании CCIDопций может использоваться список из нескольких приемлемых CCID, записанных в убывающем порядке по приоритету. Например, опция "Change R(CCID, 2 3 4)" просит получателя применять для своих пакетов CCID 2, хотя CCID 3 и 4 также являются приемлемыми. (Это соответствует байтам "35, 6, 1, 2, 3, 4": Change R опция <35>, длина опции <6>, ID код <1>, CCID (2, 3, 4) ). Аналогично, "Confirm L(CCID, 1, 2 3 4)" говорит получателю, что отправитель использует для своих пакетов CCID 2, но что CCID 3 и 4 могут быть также приемлемыми. В настоящее время стандартизованы следующие значения CCID:
| CCID | значение |
|---|---|
| 0-1 | Зарезервировано |
| 2 | TCP-подобное управление перегрузкой |
| 3 | Управление перегрузкой |
| 4-255 | Зарезервировано |
Все определенные в настоящее время типы пакетов, за исключением X=1, он имеет формат, показанный на рис. 3.14.
(рис 3.14) Формат подзаголовка номера подтвержденияКлиент инициирует X=1 ).
(рис 3.15) Формат пакета DCCP-запросаКод сервиса: 32 бита
Описывает прикладной уровень сервиса, к которому желает подключиться клиентское приложение. Поле код сервиса предназначено для индикации прикладного протокола, используемого для соединения.
Сервер откликается на корректный X=1 ).
(рис 3.16) Формат пакета DCCP-откликаНомер подтверждения имеет 48 бит
Содержит GSR (Greatest Sequence Number Received - наибольший полученный порядковый номер). Так как
Код сервиса: 32 бита
Должен равняться коду сервиса, соответствующему
Поле данных
(рис 3.17) Формат пакета DCCP-DataПакеты
Все пакеты
| Тип | Длина [байт] | назначение |
|---|---|---|
| 0 | 1 | Заполнитель |
| 2 | 1 | Медленный получатель |
| 32 | 3-4 | Игнорируется |
| 33 | переменная | Изменение |
| 34 | переменная | Предпочтение |
| 35 | переменная | Подтверждение |
| 36 | переменная | Инициализация Cookie |
| 37 | переменная | Вектор Ack [в данный момент 0] |
| 38 | переменная | Вектор Ack [в данный момент 1] |
| 39 | переменная | Data Dropped |
| 40 | 6 | Временная метка |
| 41 | 6-10 | Отклик на временную метку |
| 42 | переменная | Идентификация |
| 44 | переменная | Вызов |
| 45 | 4 | Контрольная сумма поля данных |
| 46 | 4-6 | Время работы |
| 128-255 | переменная | Специфические опции CCID |
Первый байт данных каждой опции Change, Prefer или Confirm является числовым параметром, определяющим тип согласуемого параметра. Остальные данные представляют собой одно или более значение параметра и интерпретируются в соответствии с особенностями данного параметра (характеристики). В настоящее время определены следующие параметры (таблица 3.5):
Управление перегрузкой требует, чтобы получатели передавали отправителям данные о потерях пакетов и метках . Получатели
Ack Ratio предоставляет общий механизм, с помощью которого CCID, определяющий время подтверждения информационных пакетов, может выполнять упрощенное управление перегрузкой. CCID 2, TCP-подобное управление перегрузкой, использует Ack Ratio, чтобы ограничить частоту подтверждений. Некоторые CCID игнорируют Ack Ratio, выполняя управление перегрузкой для подтверждений каким-то другим способом.
| Число | назначение | нач. знач | обязательность |
|---|---|---|---|
| 0 | Зарезервировано | ||
| 1 | Управление перегрузкой (CCID) | 2 | Y |
| 2 | Возможность коротких номеров | 1 | Y |
| 3 | Окно последовательности | 100 | Y |
| 4 | Невозможность |
0 | N |
| 5 | Ack Ratio | 2 | N |
| 6 | Послать вектор Ack | 0 | N |
| 7 | Послать число |
0 | N |
| 8 | 0 | N | |
| 9 | Проверка контрольной суммы данных | 0 | N |
| 10-127 | Зарезервировано | ||
| 128-255 | CCID-Specific Features (специфические характеристики) |
HCП-получатель посылает опцию Slow Receiver (медленный получатель) своему отправителю, чтобы уведомить его о проблемах с обработкой его данных.
Опция Data Dropped (отброшенных данных) указывает, что некоторые пакеты, отмеченные как полученные, на самом деле были отброшены, прежде чем были переданы приложению. Механизм управления перегрузкой отправителя может реагировать на потерянные информационные пакеты.
Опция контрольной суммы поля данных содержит в себе 16-битное дополнение по модулю 1 суммы всех 16-битных слов, содержащихся в поле данных
Протокол
В противоположность TCP,
Транспортный протокол реального времени, RTP [RFC-1889], в настоящее время используется (поверх UDP) многими приложениями
Протокол
Текущий список Интернет-проектов, в том числе по направлению
Актуальность проблем транспортировки мультимедийных данных по каналам Интернет с QoS=лучшее_возможное стимулирует разработки модификаций протоколов, управляющих перегрузкой (
Эти преимущества достигаются за счет того, что
Протокол
В процессе реализации механизма управления перегрузкой
Динамика работы
Любое реалистическое выражение для пропускной способности TCP, как функции частоты потерь и RTT, приемлемо для реализации
Выражение для пропускной способности, рекомендуемое для
где X - скорость передачи в байтах в сек, s длина пакета в байтах, R = RTT в секундах, p - вероятность потери сегментов (между 0 и 1.0). t_RTO является значением времени таймаута повторной передачи в секундах, b - число пакетов, подтверждаемых одним TCP ACK.
При реализации протокола используется значение t_RTO = $$4 \times R$$. Возможно и более точное выражение для расчета t_RTO, но эксперименты показывают, что предложенное выражение позволяет достичь вполне приемлемых результатов [3.9]. Другой способ - использование выражения t_RTO = max(4R, 1сек), для того, чтобы обеспечить рекомендуемый минимум
Многие современные реализации TCP соединений используют задержанные подтверждения, посылая подтверждения для пары полученных пакетов, и, таким образом, используют b = 2. Однако в TCP разрешается посылать подтверждения для каждого информационного пакета, что соответствует b = 1. Так как большинство реализаций не используют задержанных подтверждений, рекомендуется работать с b = 1.
Параметры s (размер пакета), p (частота потерь) и R (RTT) должны измеряться или вычисляться программами, реализующими протокол
Рассмотрим сначала содержимое информационных пакетов, посылаемых отправителем, и пакетов обратной связи, отправляемых получателем. Так как
Каждый информационный пакет, посланный отправителем, содержит следующие данные:
i как ts_i. Разрешающая способность для таких меток должна быть на уровне миллисекунд. Метки используются получателем для определения, принадлежит ли потеря одному и тому же событию потери. Также они применяются для оценки значения RTT. Альтернативой меткам, инкрементируемым каждую миллисекунду, могут быть метки, которые инкрементируются каждую четверть RTT. Оценку RTT, полученную по пакету i, обозначим R_i. Оценка RTT используется получателем совместно с временной меткой, для определения, принадлежат ли множественные потери одному и тому же событию.Каждый пакет обратной связи, посылаемый получателем, содержит следующую информацию.
t_recvdata. Если последний полученный пакет имеет номер i, тогда t_recvdata = ts_i. Эта временная метка используется отправителем для оценки RTT.t_delay.X_recv.p.Отправитель данных посылает поток пакетов данных получателю с контролируемой частотой. Когда получен пакет обратной связи от отправителя, отправитель данных изменяет скорость передачи, используя информацию, содержащуюся в сообщении обратной связи. Если получатель не получил сообщения обратной связи за время 2RTT, он должен понизить скорость передачи в два раза. Это делается с помощью таймера nofeedback.
Протокол отправителя включает в себя следующие шаги.
Параметр s (размер пакета) обычно известен приложению. Исключение составляют два случая:
s проблем не составляет;Для инициализации отправителя значение X делается равным 1 пакету/сек, а время таймера feedback устанавливается > 2 сек. Начальные значения для величин R (RTT) и t_RTO не присваиваются. Начальное значение (Time Last Doubled) во время медленного старта делается равным 1.
Поведение отправителя при получении пакета обратной связи
Отправитель знает свое текущее значение скорости передачи пакетов X и поддерживает его в течение RTT (R).
Когда отправителю в момент t_now приходит пакет обратной связи, должны быть осуществлены следующие действия:
RTT ;RTT.Если не получено обратной связи до этого, то R = R_sample.
В противном случае
R = q $$\times$$ R + (1q) $$\times$$ R_sample;
Протокол q, но рекомендуется значение по умолчанию q=0.9 ;
t_RTO = $$4 \times R$$ ;
Если ( p > 0 )
На основе выражения для пропускной способности TCP вычисляем X_calc.
X = max(min(X_calc, 2 $$\times$$ X_recv), s/t_mbi);
В противном случае
Если ( t_now - )
X = max(min(2 $$\times$$ X, 2 $$\times$$ X_recv), s/R);
Заметим, что если p == 0, отправитель находится в состоянии медленного старта, когда он практически удваивает скорость передачи за время RTT. Значение s/R определяет минимальную скорость передачи в период медленного старта, равную одному пакету за RTT. Параметр t_mbi равен 64 секундам и характеризует максимум межпакетной задержки передачи в отсутствии обратной связи. Таким образом, когда p > 0, отправитель посылает как минимум по одному пакету каждые 64 секунды;
Если время таймера nofeedback истекает, отправитель должен выполнить следующие действия:
X_recv. Так как скорость передачи ограничена 2 X_recv, модификация X_recv ограничивает текущее значение скорости передачи, позволяет отправителю начать медленный старт, удваивая скорость передачи для каждого RTT, если сообщения обратной связи подтверждают отсутствие потерь.Если (X_calc > 2 $$\times$$ X_recv)
X_recv = max(X_recv/2, s/(2 $$\times$$ t_mbi));
В противном случае
X_recv = X_calc/4;
Выражение s/(2 $$\times$$ t_mbi) ограничивает частоту одним пакетом каждые 64 секунды в случае постоянного отсутствия обратной связи.
X должно быть повторно вычислено, как это описано в пункте (4) выше.Если истекает время таймера nofeedback, когда отправитель еще не имеет реального значения RTT и не получил еще сообщения обратной связи от получателя, тогда шаг (1) может быть обойден, а скорость передачи сразу сокращена вдвое:
X = max(X/2, s/t_mbi)
Заметим, что когда отправитель прерывает передачу, получатель прекратит отправку сообщений обратной связи. Это вызовет запуск таймера nofeedback и уменьшение X_recv. Если отправитель позднее начинает передачу снова, X_recv ограничит скорость передачи и будет реализовываться обычный медленный старт, пока скорость передачи не достигнет X_calc.
Если отправитель был пассивен с момента таймаута nofeedback, а X_recv меньше четырех пакетов за RTT, тогда X_recv не должно сокращаться вдвое в ответ на истечение времени таймаута. Это гарантирует, что разрешенная скорость передачи никогда не будет сокращена ниже двух пакетов за RTT после периода пассивности.
Для предотвращения осцилляций полезно уменьшить скорость передачи отправителя - это приведет к сокращению длины очереди и, следовательно, RTT. Чтобы достичь этого, отправитель поддерживает оценку долгосрочного значения RTT и модифицирует скорость передачи в зависимости от того, на сколько отличается последнее значение RTT от этой оценки. Долгосрочное значение R_sqmean определяется следующим образом:
если до этого не получено сообщения обратной связи
R_sqmean = sqrt(R_sample);
в противном случае
R_sqmean = q2*R_sqmean + (1q2)*sqrt(R_sample);
Таким образом, R_sqmean представляет собой экспоненциально взвешенное среднее значение квадратного корня из RTT. Константа q2 должна быть установлена аналогично q, рекомендуемое значение равно 0.9.
Базовое значение скорости передачи X отправитель получает из функции пропускной способности. Далее вычисляется модифицированное мгновенное значение частоты X_inst:
X_inst = X * R_sqmean / sqrt(R_sample) ;
Когда sqrt(R_sample) больше, чем R_sqmean, тогда очередь обычно растет, а скорость передачи должна быть понижена.
Так как t_ipi:
t_ipi = s/X_inst ;
Когда отправитель начинает передачу в момент t_0, он вычисляет t_ipi и рассчитывает номинальное время посылки для первого пакета t_1 = t_0 + t_ipi. Когда приложение переходит в состояние простоя, оно проверяет текущее время, t_now и затем запрашивает повторную диспетчеризацию после ( t_ipi - (t_now - t_0) ) секунд. Когда приложение диспетчеризовано, оно снова проверяет текущее время, t_now. Если ( t_now > t_1 - delta ), посылается первый пакет.
Теперь может быть вычислено новое значение t_ipi, которое используется для вычисления номинального времени отправки t_2 пакета 2: t2 = t_1 + t_ipi. Далее процесс повторяется для каждого последующего пакета.
В некоторых случаях, когда номинальное время отправки следующего пакета t_i вычислено, может так случиться, что t_now > t_i - delta. В таком варианте пакет должен быть послан немедленно. Таким образом, если операционная система имеет таймер с низким разрешением, а скорость передачи высока, тогда
Параметр delta служит для того, чтобы придать некоторую гибкость при выборе момента отправки пакета. Если операционная система имеет разрешение таймера t_gran секунд, тогда значение delta вычисляется согласно:
delta = min(t_ipi/2, t_gran/2) ;
t_gran равно 10мсек для многих систем Unix. Если t_gran неизвестно, можно уверенно предполагать значение 10мсек.
Получение точных и стабильных результатов измерений частоты потерь является крайне важным для протокола
В рамках протокола
Получатель поддерживает структуру данных, которая позволяет отслеживать, какие пакеты пришли, а какие нет. Предполагается, что структура данных состоит из списка номеров пакетов, которые пришли, и временных меток, указывающих на время прихода.
Потеря пакета детектируется при получении, по крайней мере, трех пакетов с номерами больше, чем у потерянного. Требование трех пакетов идентично регламентации протокола TCP и делает
Для соединений
Чтобы определить, является ли потерянный, помеченный пакет началом нового случая потери или его следует отнести к уже зарегистрированному случаю, нужно сравнить порядковый номер и временную метку пакета, доставленного получателю. Для помеченного пакета S_new его время приема T_new может быть записано непосредственно. Для потерянного пакета номинальное "время прибытия" можно получить методом интерполяции. Пусть:
S_loss равно порядковому номеру потерянного пакета;
S_before равно порядковому номеру последнего потерянного пакета, который должен был прибыть до S_loss ;
S_after - порядковый номер первого пакета, который должен прийти после S_loss ;
T_before является временем приема S_before ;
T_after является временем прихода S_after.
Заметим, что T_before может оказаться до или после T_after изза смены порядка прихода пакетов. Для потерянного пакета S_loss можно интерполировать номинальное "время прибытия", зная времена S_before и S_after. Таким образом:
T_loss = T_before + ( (T_after - T_before)* (S_loss - S_before)/(S_after - S_before) ) ;
Заметим, что если последовательность номеров оказалась разорвана между S_before и S_after, то порядковые номера должны быть модифицированы с учетом этого, прежде будут начаты вычисления. Если наибольший возможный порядковый номер равен S_max и S_before > S_after, то замена каждого порядкового номера S на S' = (S + (S_max + 1)/2) mod (S_max + 1) вполне достаточна.
Если потерянный пакет S_old был идентифицирован как начинающий предыдущее событие потери и S_new только что определено как потерянное, то мы интерполируем номинальные времена прибытия S_old и S_new как T_old и T_new соответственно.
Если T_old + R >= T_new, то S_new является частью существующего события потери. В противном случае S_new - первый пакет нового события потери.
Если интервал потерь A начинается с порядкового номера пакета S_A, а следующий интервал потерь B начинается с порядкового номера пакета S_B, то число пакетов в интервале потерь A равно ( S_B - S_A ).
Чтобы вычислить частоту потерь p, нужно сначала определить средний период потерь. Это делается с помощью фильтра, который взвешивает n последних интервалов событий потери таким образом, что измеренная
Веса для w_0 - w_(n1) вычисляются следующим образом:
если ( i < n/2 )
w_i = 1;
в противном случае
w_i = 1 - (i - (n/2 - 1))/(n/2 + 1);
таким образом, если n=8, величины от w_0 до w_7 равны:
1.0, 1.0, 1.0, 1.0, 0.8, 0.6, 0.4, 0.2
Величина n для числа интервалов потери, используемая при вычислениях частоты потерь, определяет скорость реакции
При вычислении среднего интервала потерь мы должны решить, следует ли включать самое последнее событие потерь. Мы это делаем только в случае, когда оно достаточно велико, чтобы увеличить средний интервал потерь.
Таким образом, если самыми последними интервалами потерь являются I_0 до I_n, где I_0 - интервал с момента самого последнего случая потерь, то мы вычисляем средний интервал потери I_mean как:
I_tot0 = 0;
I_tot1 = 0;
W_tot = 0;
for (i = 0 to n1) { I_tot0 = I_tot0 + (I_i * w_i); W_tot = W_tot + w_i; }
for (i = 1 to n) { I_tot1 = I_tot1 + (I_i * w_(i1)); }
I_tot = max(I_tot0, I_tot1);
I_mean = I_tot/W_tot;
Частота потери пакетов p равна:
p = 1 / I_mean;
Как описано выше в разделе "Вычисление частоты потери пакетов", самому последнему интервалу потерь при оценке усредненного интервала потерь приписывается доля 1/(0.75 $$\times$$ n). В этом разделе рассмотрен опционный механизм обесценивания предыдущих событий (history discounting), подробнее обсуждаемый в [3.3] и [3.9]. Этот механизм позволяет TFRCполучателю настроить веса, акцентируя внимания на весах событий потерь, произошедших относительно недавно. В этой версии самые последние интервалы потерь имеют более чем вдвое больший вес при вычислении усредненной длительности интервала потерь.
Чтобы ввести в действие этот механизм, определяем фактор обесценивания (дискаунт фактор) DF_i для каждого интервала потерь L_i, ( i > 0 ), где каждый фактор обесценивания является числом с плавающей запятой. Массив этих факторов содержит в себе историю обесценивания для каждого из интервалов потерь. В начале все значения DF_i массива приравниваются 1:
for (i = 1 to n) { DF_i = 1; }
Усредненный интервал потерь вычисляется с использованием n предшествующих интервалов потерь I_1, ..., I_n, и интервала I_0, который относится к пакетам, полученным после последнего события потери. Вычисление усредненного интервала потерь с помощью факторов обесценивания является простой модификацией процедуры, описанной в разделе "Вычисление частоты потери пакетов":
I_tot0 = I_0 * w_0
I_tot1 = 0;
W_tot0 = w_0
W_tot1 = 0;
for (i = 1 to n1) {
I_tot0 = I_tot0 + (I_i $$\times$$ w_i $$\times$$ DF_i $$\times$$ DF);
W_tot0 = W_tot0 + w_i $$\times$$ DF_i $$\times$$ DF; }
for (i = 1 to n) { I_tot1 = I_tot1 + (I_i $$\times$$ w_(i1) $$\times$$ DF_i); W_tot1 = W_tot1 + w_(i1) $$\times$$ DF_i; }
p = min(W_tot0/I_tot0, W_tot1/I_tot1);
Общий фактор обесценивания DF обновляется при получении каждого пакета. Сначала получатель вычисляет взвешенное среднее I_mean интервалов потерь I_1, ..., I_n:
I_tot = 0;
W_tot = 0;
for (i = 1 to n) { W_tot = W_tot + w_(i1) $$\times$$ DF_i; I_tot = I_tot + (I_i $$\times$$ w_(i1) $$\times$$ DF_i); }
I_mean = I_tot / W_tot;
Это взвешенное среднее I_mean сравнивается с I_0, - числом пакетов, полученных с момента последнего события потерь. Если I_0 больше чем вдвое I_mean, тогда новый интервал потерь значительно больше предыдущих и общий фактор обесценивания DF обновляется, чтобы понизить относительный вес старых интервалов:
if (I_0 > 2 $$\times$$ I_mean) {
DF = 2 $$\times$$ I_mean/I_0;
if (DF < THRESHOLD)
DF = THRESHOLD;
} else
DF = 1;
Ненулевое значение THRESHOLD гарантирует, что более старые интервалы потери, относящиеся к предшествующему периоду высокой перегрузки, не будут обесценены вовсе. Рекомендуется установить THRESHOLD равным 0.5. Заметим, что с приходом каждого нового пакета, I_0 будет увеличиваться, а фактор обесценивания DF - обновляться.
Когда происходит новое событие потери, текущий интервал I_0 сдвигается на место I_1, интервал потери I_i занимает место I_(i+1), а интервал потерь I_n забывается. Предшествующий дискаунтфактор DF должен быть введен в дискаунт массив. Так как DF_i несет в себе дискаунтфактор, ассоциированный с интервалом потерь I_i, массив DF_i должен быть также сдвинут. Это делается следующим образом:
for (i = 1 to n) { DF_i = DF $$\times$$ DF_i; }
for (i = n-1 to 0 step - 1) { DF_(i+1) = DF_i; }
I_0 = 1;
DF_0 = 1;
DF = 1;
Получатель периодически посылает сообщения обратной связи отправителю. Пакеты обратной связи должны посылаться, по крайней мере, один раз за RTT, если только отправитель не передает меньше одного пакета за RTT, в этом случае сообщения обратной связи должны посылаться после каждого получения информационного пакета. Пакет обратной связи следует также посылать всякий раз, когда детектируется новое событие потери, не дожидаясь конца RTT, и всякий раз, когда фиксируется нарушение порядка следования пакетов.
Если отправитель работает с высокой частотой (посылает много пакетов за RTT), существуют некоторые преимущества посылки сообщений обратной связи периодически, чаще одного раза за RTT, что позволяет быстрее реагировать на изменения результатов измерения RTT и обеспечить большую устойчивость к потере пакетов обратной связи. Однако, нет никакого смысла посылать много пакетов обратной связи за время RTT.
Когда приходит информационный пакет, получатель выполняет следующие действия.
p равно p_prev. Вычисляется новое значение p, как это описано в разделе "Протокол отправителя данных".p > p_prev, происходит истечение времени таймера обратной связи и выполняются действия, описанные в разделе "Протокол отправителя данных".Если p <= p_prev, не нужно предпринимать никаких действий. Однако при оптимизации может проверяться, происходит ли при получении пакета заполнение пробела в истории поступления, при котором два события потери сливаются в одно. Если произошло именно это, получатель может также послать сообщение обратной связи немедленно. Влияние такой оптимизации в нормальной ситуации является незначительным.
Когда время таймера обратной связи истекает, необходимые действия зависят от того, был ли получен информационный пакет со времени отправки последнего сообщения обратной связи.
Пусть максимальный порядковый номер пакета для получателя равен S_m, а значение RTT, измеренное с учетом S_m, равно R_m. Если были получены информационные пакеты с момента посылки предыдущего сообщения обратной связи, получатель выполняет следующие действия.
X_recv, на основе полученных пакетов за время предыдущих R_m секунд.R_m секунд.Если с момента посылки сообщения обратной связи не получено никаких информационных пакетов, тo пакет обратной связи не посылается, а таймер обратной связи перезапускается на время R_m секунд.
Получатель инициализируется первым пакетом, который к нему приходит. Пусть порядковый номер пакета равен i.
Когда первый пакет получен:
p=0 ;X_recv = 0 ;R_i секунд.Пакеты вплоть до первой потери не могут быть задействованы для вычисления скорости передачи, так как темп передачи в это время меняется слишком быстро. X_recv, частотой приема за последний период RTT. После первой потери X_recv, и использует этот искусственный интервал потери для запуска механизма предыстории потерь.
В протоколе X_recv, заданный текущий размер пакета s и RTT R. Первый интервал потерь устанавливается тогда равным 1/p.
Вполне возможно реализовать вариант
Главным преимуществом модели
Напротив, модель
В данном разделе специфицируется реализации механизма управления перегрузкой
Для t_RTO = 4 $$\times$$ R и b = 1 выражение пропускной способности в разделе "Уравнение пропускной способности TCP" может быть преобразовано к виду:
$$X=\frac{s}{R \times f(p)}$$
Для $$f(p) = sqrt(2 \times p/3) + (12 \times sqrt(3 \times p/8) \times p \times (1+32 \times p^2))$$.
Для вычисления функции f(p) могут использоваться lookup-таблицы.
Заметим, что опционный механизм подавления осцилляций для отправителя, описанный в разделе "Предотвращение осцилляций", использует вычисление квадратных корней.
Вычисление среднего значения интервала потерь в разделе "Интервал между случаями потери пакетов" включает в себя умножения на веса w_0 - w_(n-1), которые для n=8 равны:
1.0, 1.0, 1.0, 1.0, 0.8, 0.6, 0.4, 0.2.
С минимальной потерей гладкости можно использовать веса, которые являются степенью 2 или суммами степеней 2, напр.,
1.0, 1.0, 1.0, 1.0, 0.75, 0.5, 0.25, 0.25.
Опционный механизм "исторического дискаунтинга" используется для расчета усредненной частоты потерь. Механизм дискаунтинга включается, только когда приходится сталкиваться с достаточно протяженными периодами без потери пакетов. Для обеспечения более высокой эффективности работы дискаунтфакторы DF_i могут делаться равными целым степеням 2.
ICMP-сообщения об ошибках никогда не выдаются:
Эти правила призваны блокировать потоки дейтаграмм, посылаемые в отклик на мультикастинг- или широковещательные ICMP-сообщения. Особенности протокола ICMPv6 описаны в документе RFC-2463. В IPv6 на протокол ICMP возложены функции управления группами (IGMP).
ICMP-сообщения имеют свой формат, а схема их вложения аналогична UDP или TCP и представлена на рис. 3.1.
Все ICMP пакеты начинаются с 8-битного поля типа ICMP и его кода (15 значений).
(рис 3.1) Схема вложения ICMP-пакетов в Ethernet-кадрПо существу, значения полей типа и кода выполняют почти ту же функцию, что и порт в ТСР и UDP-протоколах.
Код уточняет функцию ICMP-сообщения. Таблица 3.1 этих кодов приведена ниже (символом * помечены сообщения об ошибках, остальные являются запросами).
Процедура "отключение источника" (quench, поле тип ICMP=4 ) позволяет управлять потоками данных в каналах Интернет. Не справляясь с обработкой дейтаграмм, ЭВМадресат (или транзитное сетевое устройство) может послать запрос "отключить источник" отправителю, который может сократить темп посылки пакетов, например, вдвое, или вовсе прервать их посылку. Специальной команды, отменяющей прежние запреты, не существует. Если сообщения об отключении прекращаются, источник может возобновить посылку пакетов или увеличить частоту их отправки. Ниже (на рис. 3.2) представлен формат эхозапроса (ping) и отклика для протокола ICMP.
Поля идентификатор (обычно это идентификатор процесса) и номер по порядку (увеличивается на 1 при посылке каждого пакета) служат для того, чтобы отправитель мог связать в пары запросы и отклики.
Поле тип определяет, является ли этот пакет запросом (8) или откликом (0). Поле контрольная сумма представляет собой 16-разрядное дополнение по модулю 1 контрольной суммы всего ICMP-сообщения, начиная с поля тип. Поле данные служит для записи информации, возвращаемой отправителю. При выполнении процедуры ping эхозапрос с временной меткой в поле данные посылается адресату. Если адресат активен, он принимает IP-пакет, меняет адрес отправителя и получателя местами и посылает его обратно. ЭВМ-отправитель, восприняв этот отклик, может сравнить временную метку, записанную им в пакет, с текущим показанием внутренних часов и определить время распространения пакета (RTT - round trip time). Размер поля данные не регламентирован и определяется предельным размером IP-пакета.
| ICMP-сообщение | описание сообщения | |
|---|---|---|
| Тип | код | |
| 0 | Эхо-ответ (ping-отклик) | |
| 3 | Адресат недостижим | |
| 0 | * Сеть недостижима | |
| 1 | * ЭВМ недостижима | |
| 2 | * Протокол недоступен | |
| 3 | * Порт недоступен | |
| 4 | * Необходима фрагментация сообщения (установлен флаг DF) | |
| 5 | * Маршрутизация отправителя нереализуема | |
| 6 | * Сеть места назначения неизвестна | |
| 7 | * ЭВМ места назначения неизвестна | |
| 8 | * Исходная ЭВМ изолирована (устарело) | |
| 9 | * Связь с сетью места назначения административно запрещена | |
| 10 | * Связь с ЭВМ места назначения административно запрещена | |
| 11 | * Сеть не доступна для данного вида сервиса (TOS) | |
| 12 | * ЭВМ не доступна для данного вида сервиса (TOS) | |
| 13 | * Связь административно запрещена с помощью фильтра | |
| 14 | * Нарушение старшинства ЭВМ | |
| 15 | * Дискриминация по старшинству | |
| 4 | 0 | * Отключение источника при переполнении очереди (quench) |
| 5 | Переадресовать (изменить маршрут) | |
| 0 | Переадресовать дейтаграмму в сеть (устарело) | |
| 1 | Переадресовать дейтаграмму на ЭВМ | |
| 2 | Переадресовать дейтаграмму для типа сервиса (ToS) и сети | |
| 3 | Переадресовать дейтаграмму для типа сервиса и ЭВМ | |
| 8 | 0 | Эхо запроса (ping-запрос) |
| 9 | 0 | Объявление маршрутизатора |
| 10 | 0 | Запрос маршрутизатора |
| 11 | Для дейтаграммы время жизни истекло (ttl=0): | |
| 0 | *при передаче | |
| 1 | * тайм-аут при сборке (случай фрагментации) | |
| 12 | * Проблема с параметрами дейтаграммы | |
| 0 | * Ошибка в IP-заголовке | |
| 1 | * Отсутствует необходимая опция | |
| 13 | Запрос временной метки | |
| 14 | Временная метка-отклик | |
| 15 | Запрос информации (устарел) | |
| 16 | Информационный отклик (устарел) | |
| 17 | Запрос адресной маски | |
| 18 | Отклик на запрос адресной маски | |

(рис 3.2a) Формат эхо-запроса и отклика ICMP(рис 3.2) Так как в пакете ICMP нет поля порт, то при запуске нескольких процессов PING одновременно может возникнуть проблема с тем, какому из процессов следует передать тот или иной отклик. Для преодоления этой неопределенности следует использовать уникальные значения полей идентификатор.
Время распространения ICMP-запроса, вообще говоря, не равно времени распространения отклика (ситуация с очередями, например, в маршрутизаторах может быть разной). Это связано не только с возможными изменениями в канале. В общем случае маршруты их движения могут быть различными. Те же запросы используются при выполнении процедуры Traceroute.
Эта процедура позволяет не только диагностировать, но и оптимизировать маршрут. Например, команда traceroute cernvm.cern.ch, выданная в ЭВМ SUN (ИТЭФ), может отобразить на экране (в скобках указаны IP-адреса узлов и значения времени жизни дейтаграмм, значения RTT приводится в миллисекундах) (таблица 3.1.1.):
| traceroute to crnvma cern ch | (128 141 2 4) 30 hops max, 40 byte packets | |
|---|---|---|
| 1 | itep-fddi-bbone | (193.124.224.50) 3 ms 2 ms 3 ms |
| 2 | (193.124.137.13) 3 ms 3 ms 3 ms | |
| 3 | npi- |
(193.124.137.9) 27 ms 3 ms 9 ms |
| 4 | desy.hamburg.de.radio- |
(193.124.137.6) 556 ms 535 ms 535 ms |
| 5 | * 188.1.133.56 | (188.1.133.56) 637ms 670ms |
| 6 | duesseldorf2.empb.net | (193.172.4.12) 740ms(ttl=59!) 839ms(ttl=59!) 2066ms(ttl=59!) |
| 7 | bern3.empb.net | (193.172.4.30) 2135ms (ttl=58!) 1644ms (ttl=58!) 1409ms (ttl=58!) |
| 8 | cernh3.euro-hep.net | (193.172.24.10) 1808ms 1508ms 1830ms |
| 9 | cgate1.cern.ch | (192.65.185.1) 1116ms 1270ms 1278ms |
| 10 | crnvma.cern.ch | (128.141.2.4) 1132ms 1362ms 1524ms |
Отсюда видно, что наиболее узкими участками маршрута (на момент выполнения процедуры) являются Гамбург-Дюссельдорф-Берн-CERN. Следует иметь в виду, что канал МГУ-Гамбург был спутниковым и 500мс задержки здесь вносит удвоенное время распространения сигнала до спутника и обратно. Участок Гамбург-Дюссельдорф (X.25, квота 256кбит/с) был общим для потока данных из Германии в США. Передача IP поверх X.25 также снижает эффективную широкополосность канала. Остальные связи обладают недостаточной пропускной способностью. Программа ping показывает для данных участков в часы пик высокую долю потерянных пакетов. Таким образом, имея карту связей и используя указанные процедуры, вы можете успешно диагностировать ситуацию в сети. Продвинутые же программисты могут легко написать свои диагностические программы, базирующиеся на ICMP, как для локальной сети, так и для "окрестного" Интернет.
Когда маршрутизатор не может доставить дейтаграмму по месту назначения, он посылает отправителю сообщение "адресат недостижим" (destination unreachable). Формат такого сообщения показан ниже (на рис. 3.3).
(рис 3.3) Формат ICMP-сообщения "адресат недостижим"Поле код содержит целое число, проясняющее положение дел. Перечень кодов таких сообщений помещен в таблице 3.1. Поле MTU на следующем этапе характеризует максимальную длину пакетов на очередном шаге пересылки. Эта информация (MTU) позволяет выбрать оптимальный размер пакета.
Так как в сообщении содержится Интернет-заголовок и первые 64-бита дейтаграммы, легко понять, какой адрес оказался недостижим. Этот тип ICMP-сообщения посылается и в случае, когда дейтаграмма имеет флаг DF=1 ("не фрагментировать"), а фрагментация необходима. В поле код в этом случае будет записано число 4.
Если буфер приема сообщения переполнен, ЭВМ посылает сообщение типа 4.
Так как собственные часы различных ЭВМ имеют свое представление о времени, протокол ICMP, среди прочего, служит для синхронизации работы различных узлов, если это требуется (запросы временных меток).
Когда дейтаграммы поступают слишком часто и принимающая сторона не справляется с этим потоком, отправителю может быть послано сообщение с требованием резко сократить информационный поток (quenchзапрос). Снижение потока должно продолжаться до тех пор, пока не прекратятся quenchзапросы. Такое сообщение имеет формат, показанный на рис. 3.4.
(рис 3.4) Формат ICMP-запроса снижения загрузкиВ Internet таблицы маршрутизации остаются без изменений достаточно долгое время, но иногда они все же меняются. Если маршрутизатор обнаружит, что ЭВМ использует неоптимальный маршрут, он может послать ей ICMP-запрос переадресации. При этом следует учитывать, что этой возможностью может воспользоваться и хакер. Формат такого сообщения отображен на рисунке 3.5.
(рис 3.5) Формат ICMP-запроса переадресацииПоле Internet-адрес маршрутизатора содержит адрес маршрутизатора, который ЭВМ должна использовать, чтобы посланная дейтаграмма достигла места назначения, указанного в ее заголовке. В поле internet-заголовок кроме самого заголовка лежит 64 первых бита дейтаграммы, вызвавшей это сообщение. Поле код специфицирует то, как нужно интерпретировать адрес места назначения (см. табл. 3.1).
Команды переадресации маршрутизатор посылает только ЭВМ и никогда другим маршрутизаторам. Рассмотрим конкретный пример. Пусть некоторая ЭВМ на основе своей маршрутной таблицы посылает пакет маршрутизатору M1. Он, просмотрев свою маршрутную таблицу, находит, что пакет следует переслать маршрутизатору M2. Причем выясняется, что пакет из M1 в M2 следует послать через тот же интерфейс, через который он попал в M1. Это означает, что M2 доступен и непосредственно для ЭВМ-отправителя. В такой ситуации M1 посылает ICMP-запрос переадресации ЭВМ-отправителю указанного пакета с тем, чтобы она внесла соответствующие коррективы в свою маршрутную таблицу (либо чтобы администратор поменял IPадрес или маску ЭВМ).
Маршрутная таблица может загружаться из файла, формироваться менеджером сети, но может создаваться и в результате запросов и объявлений, посылаемых маршрутизаторами. После загрузки системы маршрутизатор посылает широковещательный запрос. Один или более маршрутизаторов посылают в ответ сообщения об имеющейся маршрутной информации. Кроме того, маршрутизаторы периодически (раз в 450600 сек.) широковещательно объявляют о своих маршрутах, что позволяет другим маршрутизаторам скорректировать свои маршрутные таблицы. В RFC-1256 описаны форматы ICMP-сообщений такого рода (см. рис. 3.6). Из--за своей уязвимости данная технология в последнее время практически не используется.
(рис 3.6) Формат ICMP-сообщений об имеющихся маршрутахПоле число адресов характеризует количество адресных записей в сообщении. Поле длина адреса содержит число 32-битных слов, необходимых для описания адреса маршрутизатора. Поле время жизни предназначено для записи продолжительности жизни объявленных маршрутов (адресов) в секундах. По умолчанию время жизни равно 30 мин. Поля уровень приоритета представляют собой меру приоритетности маршрута по отношению к другим
(рис 3.7) Формат запроса маршрутной информацииЕсли вы работаете с ОС Windows, а конфигурационными сетевыми параметрами являются IP-адрес вашей ЭВМ, сетевая маска и адреса GW и DNS, то процедуры переадресации, скорее всего к вам отношения не имеют.
Так как следующий прогон (hop) дейтаграммы определяется на основании локальной маршрутной таблицы, ошибки в последней могут привести к зацикливанию пакетов. Причиной зацикливания могут быть и многие другие причины. Для подавления таких циркуляций используется контроль по времени жизни пакета (TTL). При ликвидации пакета по истечении TTL маршрутизатор посылает отправителю сообщение "время истекло", которое имеет формат (рис. 3.8):
(рис 3.8) Формат сообщения "время (TTL) истекло"Значение поля код определяет природу таймаута (см. табл. 3.1).
Когда маршрутизатор или ЭВМ выявили какую-либо ошибку, не из числа описанных выше (например, нелегальный заголовок дейтаграммы), посылается сообщение "конфликт параметров". Это может произойти, например, при неверных параметрах опций. В этом случае посылается сообщение вида (рис. 3.9):
(рис 3.9) Формат сообщения типа "конфликт параметров"Поле указатель отмечает октет дейтаграммы, который создал проблему. Код=1 применяется для сообщения о том, что отсутствует требуемая опция (например, опция безопасности при конфиденциальных обменах); поле указатель при значении поля код=1 не используется.
В процессе трассировки маршрутов возникает проблема синхронизации работы часов в различных ЭВМ. К счастью, синхронизация внутренних часов ЭВМ требуется не так часто (например, при выполнении синхронных измерений), негативную роль здесь могут играть задержки в каналах связи. Для запроса временной метки другой ЭВМ используется сообщение запрос временной метки, которое вызывает отклик с форматом (рис. 3.10):
(рис 3.10) Формат ICMP-запроса временной меткиПоле тип=13 указывает на то, что это запрос, а тип=14 - на то, что это отклик. Поле идентификатор и номер по порядку используются отправителем для связи запроса и отклика. Поле исходная временная метка заполняется отправителем непосредственно перед отправкой пакета. Поле временная метка на входе заполняется маршрутизатором при получении этого пакета, а временная метка на выходе - непосредственно перед его отправкой.
При работе с субсетью важно знать маску этой субсети. Как уже отмечалось выше, IPадрес содержит секцию адреса ЭВМ и секцию адреса сети. Для получения маски субсети ЭВМ может послать "запрос маски" в маршрутизатор и получить отклик, содержащий эту маску. ЭВМ может это сделать непосредственно, если ей известен адрес маршрутизатора, либо прибегнуть к широковещательному запросу. Ниже описан формат таких запросовоткликов (рис. 3.11).
(рис 3.11) Формат запроса (отклика) маски субсетиПоле тип здесь специфицирует модификацию сообщения, тип=17 - это запрос, а тип=18 - отклик. Поля идентификатор и номер по порядку, как обычно, обеспечивают взаимную привязку запроса и отклика, а поле адресная маска содержит 32-разрядную маску сети.
Процесс интеграции услуг в Интернет несколько лет назад перешел в практическую плоскость и вслед за IPтелефонией, настала очередь
Протокол
Протокол UDP исключает большие задержки, но приложения UDP, которые используют управление перегрузкой, вынуждены вносить задержки сами. Протокол
Одной из целей
Возможны разные механизмы управления перегрузкой для разных приложений. Например, игры реального времени могут требовать быстрого использования всей доступной полосы пропускания, в то время как потоковая среда может использовать компромисс между скоростью отклика и стабильной, менее импульсивной передачей. (Резкое изменение потока может вызвать неприемлемые сбои UI, такие, как слышимые паузы или щелчки). Протокол
Протокол
В
Предполагается, что протокольные механизмы
Протокол
Ниже рассмотрены наиболее существенные отличия
Каждое
(рис 3.12) Структура обменов в протоколе DCCPЛюбое соединение
Протокол
Посылается клиентом для инициализации соединения (первый шаг трехходовой процедуры).
Посылается сервером в ответ на запрос DCCPRequest (второй этап трехшаговой процедуры инициации соединения).
Используется для передачи прикладных данных.
Используется для передачи только подтверждений.
Используется для передачи прикладных данных в сочетании с подтверждениями.
Посылается сервером для предложения клиенту закрыть соединение.
Используется клиентом или сервером для закрытия соединения; также для запуска процедуры сброса (DCCPReset).
Используется для закрытия соединения, обычным или необычным образом.
Используется для ресинхронизации номеров пакетов после длительного периода потерь.
Процедура взаимодействия партнеров включает в себя следующие обмены.
Все
(рис 3.13) Базовый заголовок пакетов DCCPЕсли X равно нулю, передаются только младшие (
Порт отправителя и получателя (по 16 бит каждый)
Эти поля идентифицируют соединение, аналогично соответствующим полям TCP и UDP. Порт отправителя характеризует порт, через который послан данный пакет, а порт назначения характеризует процесс, которому должен быть этот пакет доставлен. Когда соединение формируется, клиент должен выбрать порт отправителя случайным образом, чтобы уменьшить вероятность атаки.
Прикладные интерфейсы
Смещение данных (8 бит)
Смещение от начала заголовка пакета
CCVal (4 бита)
Используется HCотправителем CCID. Например, CCID отправителя A-B, который активен в CCVal. Отправитель должен установить CCVal равным нулю, если только HCотправитель CCID не требует иного, а получатель должен игнорировать поле CCVal, если HCполучатель CCID не специфицирует обратного.
Checksum .
Поле CsCov определяет части пакета, которые покрываются полем контрольная сумма. Она всегда покрывает заголовок и опции
Контрольная сумма (16 бит)
Интернет контрольная сумма заголовка пакета CsCov, все, некоторые или никакие поля данных приложений.
Зарезервировано (Res) (3 бита)
Отправитель должен записать в это поле все нули, а получатель должен это поле игнорировать.
Тип (4 бита)
Поле тип специфицирует тип пакета. Определены следующие типы пакетов:
| Тип | назначение |
|---|---|
| 0 | |
| 1 | |
| 2 | |
| 3 | |
| 4 | |
| 5 | |
| 6 | |
| 7 | |
| 8 | |
| 9 | |
| 10-15 | Зарезервировано |
Адресаты должны игнорировать любые пакеты с зарезервированным типом.
Расширенные порядковые номера (X). 1 бит
Если Х=1, в заголовке используются 48-разрядные порядковые номера. Пакеты X, равное 0 или 1. Все пакеты Х=1 ; партнеры должны игнорировать любые такие пакеты с Х=0. При высокоскоростных соединениях следует использовать для всех пакетов Х=1.
Порядковый номер. 48 или 24 бита
Идентифицирует пакет в последовательности. Номер по порядку увеличивается на 1 после посылки каждого пакета, включая пакеты
Каждому механизму управления перегрузкой, поддерживаемому
CCID является характеристикой сервера, при согласовании CCIDопций может использоваться список из нескольких приемлемых CCID, записанных в убывающем порядке по приоритету. Например, опция "Change R(CCID, 2 3 4)" просит получателя применять для своих пакетов CCID 2, хотя CCID 3 и 4 также являются приемлемыми. (Это соответствует байтам "35, 6, 1, 2, 3, 4": Change R опция <35>, длина опции <6>, ID код <1>, CCID (2, 3, 4) ). Аналогично, "Confirm L(CCID, 1, 2 3 4)" говорит получателю, что отправитель использует для своих пакетов CCID 2, но что CCID 3 и 4 могут быть также приемлемыми. В настоящее время стандартизованы следующие значения CCID:
| CCID | значение |
|---|---|
| 0-1 | Зарезервировано |
| 2 | TCP-подобное управление перегрузкой |
| 3 | Управление перегрузкой |
| 4-255 | Зарезервировано |
Все определенные в настоящее время типы пакетов, за исключением X=1, он имеет формат, показанный на рис. 3.14.
(рис 3.14) Формат подзаголовка номера подтвержденияКлиент инициирует X=1 ).
(рис 3.15) Формат пакета DCCP-запросаКод сервиса: 32 бита
Описывает прикладной уровень сервиса, к которому желает подключиться клиентское приложение. Поле код сервиса предназначено для индикации прикладного протокола, используемого для соединения.
Сервер откликается на корректный X=1 ).
(рис 3.16) Формат пакета DCCP-откликаНомер подтверждения имеет 48 бит
Содержит GSR (Greatest Sequence Number Received - наибольший полученный порядковый номер). Так как
Код сервиса: 32 бита
Должен равняться коду сервиса, соответствующему
Поле данных
(рис 3.17) Формат пакета DCCP-DataПакеты
Все пакеты
| Тип | Длина [байт] | назначение |
|---|---|---|
| 0 | 1 | Заполнитель |
| 2 | 1 | Медленный получатель |
| 32 | 3-4 | Игнорируется |
| 33 | переменная | Изменение |
| 34 | переменная | Предпочтение |
| 35 | переменная | Подтверждение |
| 36 | переменная | Инициализация Cookie |
| 37 | переменная | Вектор Ack [в данный момент 0] |
| 38 | переменная | Вектор Ack [в данный момент 1] |
| 39 | переменная | Data Dropped |
| 40 | 6 | Временная метка |
| 41 | 6-10 | Отклик на временную метку |
| 42 | переменная | Идентификация |
| 44 | переменная | Вызов |
| 45 | 4 | Контрольная сумма поля данных |
| 46 | 4-6 | Время работы |
| 128-255 | переменная | Специфические опции CCID |
Первый байт данных каждой опции Change, Prefer или Confirm является числовым параметром, определяющим тип согласуемого параметра. Остальные данные представляют собой одно или более значение параметра и интерпретируются в соответствии с особенностями данного параметра (характеристики). В настоящее время определены следующие параметры (таблица 3.5):
Управление перегрузкой требует, чтобы получатели передавали отправителям данные о потерях пакетов и метках . Получатели
Ack Ratio предоставляет общий механизм, с помощью которого CCID, определяющий время подтверждения информационных пакетов, может выполнять упрощенное управление перегрузкой. CCID 2, TCP-подобное управление перегрузкой, использует Ack Ratio, чтобы ограничить частоту подтверждений. Некоторые CCID игнорируют Ack Ratio, выполняя управление перегрузкой для подтверждений каким-то другим способом.
| Число | назначение | нач. знач | обязательность |
|---|---|---|---|
| 0 | Зарезервировано | ||
| 1 | Управление перегрузкой (CCID) | 2 | Y |
| 2 | Возможность коротких номеров | 1 | Y |
| 3 | Окно последовательности | 100 | Y |
| 4 | Невозможность |
0 | N |
| 5 | Ack Ratio | 2 | N |
| 6 | Послать вектор Ack | 0 | N |
| 7 | Послать число |
0 | N |
| 8 | 0 | N | |
| 9 | Проверка контрольной суммы данных | 0 | N |
| 10-127 | Зарезервировано | ||
| 128-255 | CCID-Specific Features (специфические характеристики) |
HCП-получатель посылает опцию Slow Receiver (медленный получатель) своему отправителю, чтобы уведомить его о проблемах с обработкой его данных.
Опция Data Dropped (отброшенных данных) указывает, что некоторые пакеты, отмеченные как полученные, на самом деле были отброшены, прежде чем были переданы приложению. Механизм управления перегрузкой отправителя может реагировать на потерянные информационные пакеты.
Опция контрольной суммы поля данных содержит в себе 16-битное дополнение по модулю 1 суммы всех 16-битных слов, содержащихся в поле данных
Протокол
В противоположность TCP,
Транспортный протокол реального времени, RTP [RFC-1889], в настоящее время используется (поверх UDP) многими приложениями
Протокол
Текущий список Интернет-проектов, в том числе по направлению
Актуальность проблем транспортировки мультимедийных данных по каналам Интернет с QoS=лучшее_возможное стимулирует разработки модификаций протоколов, управляющих перегрузкой (
Эти преимущества достигаются за счет того, что
Протокол
В процессе реализации механизма управления перегрузкой
Динамика работы
Любое реалистическое выражение для пропускной способности TCP, как функции частоты потерь и RTT, приемлемо для реализации
Выражение для пропускной способности, рекомендуемое для
где X - скорость передачи в байтах в сек, s длина пакета в байтах, R = RTT в секундах, p - вероятность потери сегментов (между 0 и 1.0). t_RTO является значением времени таймаута повторной передачи в секундах, b - число пакетов, подтверждаемых одним TCP ACK.
При реализации протокола используется значение t_RTO = $$4 \times R$$. Возможно и более точное выражение для расчета t_RTO, но эксперименты показывают, что предложенное выражение позволяет достичь вполне приемлемых результатов [3.9]. Другой способ - использование выражения t_RTO = max(4R, 1сек), для того, чтобы обеспечить рекомендуемый минимум
Многие современные реализации TCP соединений используют задержанные подтверждения, посылая подтверждения для пары полученных пакетов, и, таким образом, используют b = 2. Однако в TCP разрешается посылать подтверждения для каждого информационного пакета, что соответствует b = 1. Так как большинство реализаций не используют задержанных подтверждений, рекомендуется работать с b = 1.
Параметры s (размер пакета), p (частота потерь) и R (RTT) должны измеряться или вычисляться программами, реализующими протокол
Рассмотрим сначала содержимое информационных пакетов, посылаемых отправителем, и пакетов обратной связи, отправляемых получателем. Так как
Каждый информационный пакет, посланный отправителем, содержит следующие данные:
i как ts_i. Разрешающая способность для таких меток должна быть на уровне миллисекунд. Метки используются получателем для определения, принадлежит ли потеря одному и тому же событию потери. Также они применяются для оценки значения RTT. Альтернативой меткам, инкрементируемым каждую миллисекунду, могут быть метки, которые инкрементируются каждую четверть RTT. Оценку RTT, полученную по пакету i, обозначим R_i. Оценка RTT используется получателем совместно с временной меткой, для определения, принадлежат ли множественные потери одному и тому же событию.Каждый пакет обратной связи, посылаемый получателем, содержит следующую информацию.
t_recvdata. Если последний полученный пакет имеет номер i, тогда t_recvdata = ts_i. Эта временная метка используется отправителем для оценки RTT.t_delay.X_recv.p.Отправитель данных посылает поток пакетов данных получателю с контролируемой частотой. Когда получен пакет обратной связи от отправителя, отправитель данных изменяет скорость передачи, используя информацию, содержащуюся в сообщении обратной связи. Если получатель не получил сообщения обратной связи за время 2RTT, он должен понизить скорость передачи в два раза. Это делается с помощью таймера nofeedback.
Протокол отправителя включает в себя следующие шаги.
Параметр s (размер пакета) обычно известен приложению. Исключение составляют два случая:
s проблем не составляет;Для инициализации отправителя значение X делается равным 1 пакету/сек, а время таймера feedback устанавливается > 2 сек. Начальные значения для величин R (RTT) и t_RTO не присваиваются. Начальное значение (Time Last Doubled) во время медленного старта делается равным 1.
Поведение отправителя при получении пакета обратной связи
Отправитель знает свое текущее значение скорости передачи пакетов X и поддерживает его в течение RTT (R).
Когда отправителю в момент t_now приходит пакет обратной связи, должны быть осуществлены следующие действия:
RTT ;RTT.Если не получено обратной связи до этого, то R = R_sample.
В противном случае
R = q $$\times$$ R + (1q) $$\times$$ R_sample;
Протокол q, но рекомендуется значение по умолчанию q=0.9 ;
t_RTO = $$4 \times R$$ ;
Если ( p > 0 )
На основе выражения для пропускной способности TCP вычисляем X_calc.
X = max(min(X_calc, 2 $$\times$$ X_recv), s/t_mbi);
В противном случае
Если ( t_now - )
X = max(min(2 $$\times$$ X, 2 $$\times$$ X_recv), s/R);
Заметим, что если p == 0, отправитель находится в состоянии медленного старта, когда он практически удваивает скорость передачи за время RTT. Значение s/R определяет минимальную скорость передачи в период медленного старта, равную одному пакету за RTT. Параметр t_mbi равен 64 секундам и характеризует максимум межпакетной задержки передачи в отсутствии обратной связи. Таким образом, когда p > 0, отправитель посылает как минимум по одному пакету каждые 64 секунды;
Если время таймера nofeedback истекает, отправитель должен выполнить следующие действия:
X_recv. Так как скорость передачи ограничена 2 X_recv, модификация X_recv ограничивает текущее значение скорости передачи, позволяет отправителю начать медленный старт, удваивая скорость передачи для каждого RTT, если сообщения обратной связи подтверждают отсутствие потерь.Если (X_calc > 2 $$\times$$ X_recv)
X_recv = max(X_recv/2, s/(2 $$\times$$ t_mbi));
В противном случае
X_recv = X_calc/4;
Выражение s/(2 $$\times$$ t_mbi) ограничивает частоту одним пакетом каждые 64 секунды в случае постоянного отсутствия обратной связи.
X должно быть повторно вычислено, как это описано в пункте (4) выше.Если истекает время таймера nofeedback, когда отправитель еще не имеет реального значения RTT и не получил еще сообщения обратной связи от получателя, тогда шаг (1) может быть обойден, а скорость передачи сразу сокращена вдвое:
X = max(X/2, s/t_mbi)
Заметим, что когда отправитель прерывает передачу, получатель прекратит отправку сообщений обратной связи. Это вызовет запуск таймера nofeedback и уменьшение X_recv. Если отправитель позднее начинает передачу снова, X_recv ограничит скорость передачи и будет реализовываться обычный медленный старт, пока скорость передачи не достигнет X_calc.
Если отправитель был пассивен с момента таймаута nofeedback, а X_recv меньше четырех пакетов за RTT, тогда X_recv не должно сокращаться вдвое в ответ на истечение времени таймаута. Это гарантирует, что разрешенная скорость передачи никогда не будет сокращена ниже двух пакетов за RTT после периода пассивности.
Для предотвращения осцилляций полезно уменьшить скорость передачи отправителя - это приведет к сокращению длины очереди и, следовательно, RTT. Чтобы достичь этого, отправитель поддерживает оценку долгосрочного значения RTT и модифицирует скорость передачи в зависимости от того, на сколько отличается последнее значение RTT от этой оценки. Долгосрочное значение R_sqmean определяется следующим образом:
если до этого не получено сообщения обратной связи
R_sqmean = sqrt(R_sample);
в противном случае
R_sqmean = q2*R_sqmean + (1q2)*sqrt(R_sample);
Таким образом, R_sqmean представляет собой экспоненциально взвешенное среднее значение квадратного корня из RTT. Константа q2 должна быть установлена аналогично q, рекомендуемое значение равно 0.9.
Базовое значение скорости передачи X отправитель получает из функции пропускной способности. Далее вычисляется модифицированное мгновенное значение частоты X_inst:
X_inst = X * R_sqmean / sqrt(R_sample) ;
Когда sqrt(R_sample) больше, чем R_sqmean, тогда очередь обычно растет, а скорость передачи должна быть понижена.
Так как t_ipi:
t_ipi = s/X_inst ;
Когда отправитель начинает передачу в момент t_0, он вычисляет t_ipi и рассчитывает номинальное время посылки для первого пакета t_1 = t_0 + t_ipi. Когда приложение переходит в состояние простоя, оно проверяет текущее время, t_now и затем запрашивает повторную диспетчеризацию после ( t_ipi - (t_now - t_0) ) секунд. Когда приложение диспетчеризовано, оно снова проверяет текущее время, t_now. Если ( t_now > t_1 - delta ), посылается первый пакет.
Теперь может быть вычислено новое значение t_ipi, которое используется для вычисления номинального времени отправки t_2 пакета 2: t2 = t_1 + t_ipi. Далее процесс повторяется для каждого последующего пакета.
В некоторых случаях, когда номинальное время отправки следующего пакета t_i вычислено, может так случиться, что t_now > t_i - delta. В таком варианте пакет должен быть послан немедленно. Таким образом, если операционная система имеет таймер с низким разрешением, а скорость передачи высока, тогда
Параметр delta служит для того, чтобы придать некоторую гибкость при выборе момента отправки пакета. Если операционная система имеет разрешение таймера t_gran секунд, тогда значение delta вычисляется согласно:
delta = min(t_ipi/2, t_gran/2) ;
t_gran равно 10мсек для многих систем Unix. Если t_gran неизвестно, можно уверенно предполагать значение 10мсек.
Получение точных и стабильных результатов измерений частоты потерь является крайне важным для протокола
В рамках протокола
Получатель поддерживает структуру данных, которая позволяет отслеживать, какие пакеты пришли, а какие нет. Предполагается, что структура данных состоит из списка номеров пакетов, которые пришли, и временных меток, указывающих на время прихода.
Потеря пакета детектируется при получении, по крайней мере, трех пакетов с номерами больше, чем у потерянного. Требование трех пакетов идентично регламентации протокола TCP и делает
Для соединений
Чтобы определить, является ли потерянный, помеченный пакет началом нового случая потери или его следует отнести к уже зарегистрированному случаю, нужно сравнить порядковый номер и временную метку пакета, доставленного получателю. Для помеченного пакета S_new его время приема T_new может быть записано непосредственно. Для потерянного пакета номинальное "время прибытия" можно получить методом интерполяции. Пусть:
S_loss равно порядковому номеру потерянного пакета;
S_before равно порядковому номеру последнего потерянного пакета, который должен был прибыть до S_loss ;
S_after - порядковый номер первого пакета, который должен прийти после S_loss ;
T_before является временем приема S_before ;
T_after является временем прихода S_after.
Заметим, что T_before может оказаться до или после T_after изза смены порядка прихода пакетов. Для потерянного пакета S_loss можно интерполировать номинальное "время прибытия", зная времена S_before и S_after. Таким образом:
T_loss = T_before + ( (T_after - T_before)* (S_loss - S_before)/(S_after - S_before) ) ;
Заметим, что если последовательность номеров оказалась разорвана между S_before и S_after, то порядковые номера должны быть модифицированы с учетом этого, прежде будут начаты вычисления. Если наибольший возможный порядковый номер равен S_max и S_before > S_after, то замена каждого порядкового номера S на S' = (S + (S_max + 1)/2) mod (S_max + 1) вполне достаточна.
Если потерянный пакет S_old был идентифицирован как начинающий предыдущее событие потери и S_new только что определено как потерянное, то мы интерполируем номинальные времена прибытия S_old и S_new как T_old и T_new соответственно.
Если T_old + R >= T_new, то S_new является частью существующего события потери. В противном случае S_new - первый пакет нового события потери.
Если интервал потерь A начинается с порядкового номера пакета S_A, а следующий интервал потерь B начинается с порядкового номера пакета S_B, то число пакетов в интервале потерь A равно ( S_B - S_A ).
Чтобы вычислить частоту потерь p, нужно сначала определить средний период потерь. Это делается с помощью фильтра, который взвешивает n последних интервалов событий потери таким образом, что измеренная
Веса для w_0 - w_(n1) вычисляются следующим образом:
если ( i < n/2 )
w_i = 1;
в противном случае
w_i = 1 - (i - (n/2 - 1))/(n/2 + 1);
таким образом, если n=8, величины от w_0 до w_7 равны:
1.0, 1.0, 1.0, 1.0, 0.8, 0.6, 0.4, 0.2
Величина n для числа интервалов потери, используемая при вычислениях частоты потерь, определяет скорость реакции
При вычислении среднего интервала потерь мы должны решить, следует ли включать самое последнее событие потерь. Мы это делаем только в случае, когда оно достаточно велико, чтобы увеличить средний интервал потерь.
Таким образом, если самыми последними интервалами потерь являются I_0 до I_n, где I_0 - интервал с момента самого последнего случая потерь, то мы вычисляем средний интервал потери I_mean как:
I_tot0 = 0;
I_tot1 = 0;
W_tot = 0;
for (i = 0 to n1) { I_tot0 = I_tot0 + (I_i * w_i); W_tot = W_tot + w_i; }
for (i = 1 to n) { I_tot1 = I_tot1 + (I_i * w_(i1)); }
I_tot = max(I_tot0, I_tot1);
I_mean = I_tot/W_tot;
Частота потери пакетов p равна:
p = 1 / I_mean;
Как описано выше в разделе "Вычисление частоты потери пакетов", самому последнему интервалу потерь при оценке усредненного интервала потерь приписывается доля 1/(0.75 $$\times$$ n). В этом разделе рассмотрен опционный механизм обесценивания предыдущих событий (history discounting), подробнее обсуждаемый в [3.3] и [3.9]. Этот механизм позволяет TFRCполучателю настроить веса, акцентируя внимания на весах событий потерь, произошедших относительно недавно. В этой версии самые последние интервалы потерь имеют более чем вдвое больший вес при вычислении усредненной длительности интервала потерь.
Чтобы ввести в действие этот механизм, определяем фактор обесценивания (дискаунт фактор) DF_i для каждого интервала потерь L_i, ( i > 0 ), где каждый фактор обесценивания является числом с плавающей запятой. Массив этих факторов содержит в себе историю обесценивания для каждого из интервалов потерь. В начале все значения DF_i массива приравниваются 1:
for (i = 1 to n) { DF_i = 1; }
Усредненный интервал потерь вычисляется с использованием n предшествующих интервалов потерь I_1, ..., I_n, и интервала I_0, который относится к пакетам, полученным после последнего события потери. Вычисление усредненного интервала потерь с помощью факторов обесценивания является простой модификацией процедуры, описанной в разделе "Вычисление частоты потери пакетов":
I_tot0 = I_0 * w_0
I_tot1 = 0;
W_tot0 = w_0
W_tot1 = 0;
for (i = 1 to n1) {
I_tot0 = I_tot0 + (I_i $$\times$$ w_i $$\times$$ DF_i $$\times$$ DF);
W_tot0 = W_tot0 + w_i $$\times$$ DF_i $$\times$$ DF; }
for (i = 1 to n) { I_tot1 = I_tot1 + (I_i $$\times$$ w_(i1) $$\times$$ DF_i); W_tot1 = W_tot1 + w_(i1) $$\times$$ DF_i; }
p = min(W_tot0/I_tot0, W_tot1/I_tot1);
Общий фактор обесценивания DF обновляется при получении каждого пакета. Сначала получатель вычисляет взвешенное среднее I_mean интервалов потерь I_1, ..., I_n:
I_tot = 0;
W_tot = 0;
for (i = 1 to n) { W_tot = W_tot + w_(i1) $$\times$$ DF_i; I_tot = I_tot + (I_i $$\times$$ w_(i1) $$\times$$ DF_i); }
I_mean = I_tot / W_tot;
Это взвешенное среднее I_mean сравнивается с I_0, - числом пакетов, полученных с момента последнего события потерь. Если I_0 больше чем вдвое I_mean, тогда новый интервал потерь значительно больше предыдущих и общий фактор обесценивания DF обновляется, чтобы понизить относительный вес старых интервалов:
if (I_0 > 2 $$\times$$ I_mean) {
DF = 2 $$\times$$ I_mean/I_0;
if (DF < THRESHOLD)
DF = THRESHOLD;
} else
DF = 1;
Ненулевое значение THRESHOLD гарантирует, что более старые интервалы потери, относящиеся к предшествующему периоду высокой перегрузки, не будут обесценены вовсе. Рекомендуется установить THRESHOLD равным 0.5. Заметим, что с приходом каждого нового пакета, I_0 будет увеличиваться, а фактор обесценивания DF - обновляться.
Когда происходит новое событие потери, текущий интервал I_0 сдвигается на место I_1, интервал потери I_i занимает место I_(i+1), а интервал потерь I_n забывается. Предшествующий дискаунтфактор DF должен быть введен в дискаунт массив. Так как DF_i несет в себе дискаунтфактор, ассоциированный с интервалом потерь I_i, массив DF_i должен быть также сдвинут. Это делается следующим образом:
for (i = 1 to n) { DF_i = DF $$\times$$ DF_i; }
for (i = n-1 to 0 step - 1) { DF_(i+1) = DF_i; }
I_0 = 1;
DF_0 = 1;
DF = 1;
Получатель периодически посылает сообщения обратной связи отправителю. Пакеты обратной связи должны посылаться, по крайней мере, один раз за RTT, если только отправитель не передает меньше одного пакета за RTT, в этом случае сообщения обратной связи должны посылаться после каждого получения информационного пакета. Пакет обратной связи следует также посылать всякий раз, когда детектируется новое событие потери, не дожидаясь конца RTT, и всякий раз, когда фиксируется нарушение порядка следования пакетов.
Если отправитель работает с высокой частотой (посылает много пакетов за RTT), существуют некоторые преимущества посылки сообщений обратной связи периодически, чаще одного раза за RTT, что позволяет быстрее реагировать на изменения результатов измерения RTT и обеспечить большую устойчивость к потере пакетов обратной связи. Однако, нет никакого смысла посылать много пакетов обратной связи за время RTT.
Когда приходит информационный пакет, получатель выполняет следующие действия.
p равно p_prev. Вычисляется новое значение p, как это описано в разделе "Протокол отправителя данных".p > p_prev, происходит истечение времени таймера обратной связи и выполняются действия, описанные в разделе "Протокол отправителя данных".Если p <= p_prev, не нужно предпринимать никаких действий. Однако при оптимизации может проверяться, происходит ли при получении пакета заполнение пробела в истории поступления, при котором два события потери сливаются в одно. Если произошло именно это, получатель может также послать сообщение обратной связи немедленно. Влияние такой оптимизации в нормальной ситуации является незначительным.
Когда время таймера обратной связи истекает, необходимые действия зависят от того, был ли получен информационный пакет со времени отправки последнего сообщения обратной связи.
Пусть максимальный порядковый номер пакета для получателя равен S_m, а значение RTT, измеренное с учетом S_m, равно R_m. Если были получены информационные пакеты с момента посылки предыдущего сообщения обратной связи, получатель выполняет следующие действия.
X_recv, на основе полученных пакетов за время предыдущих R_m секунд.R_m секунд.Если с момента посылки сообщения обратной связи не получено никаких информационных пакетов, тo пакет обратной связи не посылается, а таймер обратной связи перезапускается на время R_m секунд.
Получатель инициализируется первым пакетом, который к нему приходит. Пусть порядковый номер пакета равен i.
Когда первый пакет получен:
p=0 ;X_recv = 0 ;R_i секунд.Пакеты вплоть до первой потери не могут быть задействованы для вычисления скорости передачи, так как темп передачи в это время меняется слишком быстро. X_recv, частотой приема за последний период RTT. После первой потери X_recv, и использует этот искусственный интервал потери для запуска механизма предыстории потерь.
В протоколе X_recv, заданный текущий размер пакета s и RTT R. Первый интервал потерь устанавливается тогда равным 1/p.
Вполне возможно реализовать вариант
Главным преимуществом модели
Напротив, модель
В данном разделе специфицируется реализации механизма управления перегрузкой
Для t_RTO = 4 $$\times$$ R и b = 1 выражение пропускной способности в разделе "Уравнение пропускной способности TCP" может быть преобразовано к виду:
$$X=\frac{s}{R \times f(p)}$$
Для $$f(p) = sqrt(2 \times p/3) + (12 \times sqrt(3 \times p/8) \times p \times (1+32 \times p^2))$$.
Для вычисления функции f(p) могут использоваться lookup-таблицы.
Заметим, что опционный механизм подавления осцилляций для отправителя, описанный в разделе "Предотвращение осцилляций", использует вычисление квадратных корней.
Вычисление среднего значения интервала потерь в разделе "Интервал между случаями потери пакетов" включает в себя умножения на веса w_0 - w_(n-1), которые для n=8 равны:
1.0, 1.0, 1.0, 1.0, 0.8, 0.6, 0.4, 0.2.
С минимальной потерей гладкости можно использовать веса, которые являются степенью 2 или суммами степеней 2, напр.,
1.0, 1.0, 1.0, 1.0, 0.75, 0.5, 0.25, 0.25.
Опционный механизм "исторического дискаунтинга" используется для расчета усредненной частоты потерь. Механизм дискаунтинга включается, только когда приходится сталкиваться с достаточно протяженными периодами без потери пакетов. Для обеспечения более высокой эффективности работы дискаунтфакторы DF_i могут делаться равными целым степеням 2.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.