Эта статья может потребовать очистки , чтобы соответствовать стандартам качества Википедии . Конкретная проблема: слишком техническая для среднего читателя. ( октябрь 2021 г. ) |
Протокол управления передачей (TCP) использует алгоритм предотвращения перегрузки сети , который включает в себя различные аспекты схемы аддитивного увеличения/мультипликативного уменьшения (AIMD), наряду с другими схемами, включая медленный старт [1] и окно перегрузки (CWND), для предотвращения перегрузки. . Алгоритм предотвращения перегрузки TCP является основной основой для управления перегрузкой в Интернете. [2] [3] [4] В соответствии со сквозным принципом контроль перегрузки в значительной степени является функцией интернет-хостов ., а не сама сеть. Существует несколько вариаций и версий алгоритма, реализованного в стеках протоколов операционных систем компьютеров, подключенных к Интернету .
Чтобы избежать перегрузки , TCP использует многогранную стратегию управления перегрузкой. Для каждого соединения TCP поддерживает CWND, ограничивая общее количество неподтвержденных пакетов, которые могут находиться в сквозной передаче. Это чем-то похоже на скользящее окно TCP, используемое для управления потоком .
Алгоритм аддитивного увеличения/мультипликативного уменьшения (AIMD) представляет собой алгоритм управления с обратной связью . AIMD сочетает в себе линейный рост окна перегрузки с экспоненциальным уменьшением при возникновении перегрузки. Несколько потоков, использующих управление перегрузкой AIMD, в конечном итоге сойдутся, чтобы использовать равное количество оспариваемых каналов. [5]
Это алгоритм, описанный в RFC 5681 для состояния «предотвращения перегрузки». [6]
В TCP окно перегрузки (CWND) является одним из факторов, определяющих количество байтов, которые могут быть отправлены в любое время. Окно перегрузки поддерживается отправителем и является средством предотвращения перегрузки канала между отправителем и получателем из-за слишком большого трафика. Это не следует путать со скользящим окном, поддерживаемым отправителем, которое существует для предотвращения перегрузки получателя . Окно перегрузки рассчитывается путем оценки степени перегрузки на канале.
Когда соединение установлено, окно перегрузки, значение, поддерживаемое независимо на каждом хосте, устанавливается равным небольшому кратному максимальному размеру сегмента ( MSS ), разрешенному для этого соединения. Дальнейшая дисперсия в окне перегрузки определяется подходом аддитивного увеличения/мультипликативного уменьшения (AIMD). Это означает, что если все сегменты получены и подтверждения доходят до отправителя вовремя, к размеру окна добавляется некоторая константа. Он будет работать по разным алгоритмам.
Системный администратор может настроить ограничение максимального размера окна или настроить константу, добавляемую во время аддитивного увеличения, как часть настройки TCP .
Поток данных по TCP-соединению также контролируется с помощью окна приема, объявленного получателем. Отправитель может отправлять данные меньше, чем его собственное окно перегрузки и окно приема ,
Медленный старт, определенный в RFC 5681 . [7] является частью стратегии управления перегрузкой , используемой TCP в сочетании с другими алгоритмами, чтобы избежать отправки большего количества данных, чем сеть способна передать, то есть избежать перегрузки сети.
Медленный старт начинается с начального значения cwnd, должно быть 2, 3 или 4 MSS. [7] Значение размера окна перегрузки может быть увеличено на 1 MSS с каждым полученным подтверждением (ACK), эффективно удваивая размер окна каждый RTT . [а] или меньше
Скорость передачи будет увеличиваться с помощью алгоритма медленного старта до тех пор, пока либо не будет обнаружена потеря пакета, либо объявленное окно получателя (rwnd) не станет ограничивающим фактором.
Или достигнут порог медленного запуска (ssthresh), который используется для определения того, используется ли алгоритм медленного запуска или алгоритм предотвращения перегрузки, который представляет собой значение, установленное для ограничения медленного запуска.
Если CWND достигает ssthresh , TCP переключается на алгоритм предотвращения перегрузки. Оно должно увеличиваться на 1 MSS для каждого RTT.
Распространенная формула заключается в том, что каждый новый ACK увеличивает CWND на MSS * MSS/CWND. Он почти линейный и обеспечивает приемлемое приближение
Если происходит событие потери, TCP предполагает, что это связано с перегрузкой сети, и предпринимает шаги для снижения предлагаемой нагрузки на сеть. Эти измерения зависят от конкретного используемого алгоритма предотвращения перегрузки TCP.
Когда отправитель TCP обнаруживает потерю сегмента с помощью таймера повторной передачи, а данный сегмент еще не был повторно отправлен с помощью таймера повторной передачи, значение ssthresh должно быть установлено не более
половина объема данных, которые были отправлены, но еще не подтверждены в совокупности. Или 2 * ПСС
Медленный старт предполагает, что неподтвержденные сегменты вызваны перегрузкой сети. Хотя это приемлемое допущение для многих сетей, сегменты могут быть потеряны по другим причинам, например, из-за плохого качества передачи на канальном уровне . Таким образом, медленный старт может плохо работать в ситуациях с плохим приемом, например, в беспроводных сетях .
Протокол медленного старта также плохо работает для кратковременных соединений. Старые веб-браузеры создавали множество последовательных кратковременных подключений к веб-серверу и открывали и закрывали соединение для каждого запрошенного файла. Это удерживало большинство соединений в режиме медленного запуска, что приводило к плохому времени отклика. Чтобы избежать этой проблемы, современные браузеры либо открывают несколько соединений одновременно, либо повторно используют одно соединение для всех файлов, запрошенных с определенного веб-сервера. Соединения, однако, не могут быть повторно использованы для нескольких сторонних серверов, используемых веб-сайтами для реализации веб-рекламы , обмена функциями служб социальных сетей [ 8] исчетчик скриптов веб-аналитики .
Быстрая повторная передача — это усовершенствование TCP , которое сокращает время ожидания отправителя перед повторной передачей потерянного сегмента. Отправитель TCP обычно использует простой таймер для распознавания потерянных сегментов. Если подтверждение не получено для определенного сегмента в течение заданного времени (функция расчетного времени задержки приема- передачи ), отправитель предположит, что сегмент был потерян в сети, и повторит передачу сегмента.
Двойное подтверждение является основой для механизма быстрой повторной передачи. После получения пакета отправляется подтверждение для последнего упорядоченного байта полученных данных. Для упорядоченного пакета это фактически порядковый номер последнего пакета плюс длина полезной нагрузки текущего пакета. Если следующий пакет в последовательности потерян, но получен третий пакет в последовательности, то получатель может подтвердить только последний байт данных по порядку, который является тем же самым значением, которое было подтверждено для первого пакета. Второй пакет потерян, а третий пакет не в порядке, поэтому последний байт данных по порядку остается таким же, как и раньше. Таким образом, дубликат подтвержденияимеет место. Отправитель продолжает посылать пакеты, а получатель получает четвертый и пятый пакеты. Опять же, второй пакет отсутствует в последовательности, поэтому последний байт по порядку не изменился. Двойные подтверждения отправляются для обоих этих пакетов.
Когда отправитель получает три повторяющихся подтверждения, он может быть достаточно уверен, что сегмент, содержащий данные, следующие за последним байтом, указанным в подтверждении, был потерян. Отправитель с быстрой повторной передачей повторно передаст этот пакет немедленно, не дожидаясь тайм-аута. При получении повторно переданного сегмента получатель может подтвердить последний упорядоченный байт полученных данных. В приведенном выше примере это будет подтверждать конец полезной нагрузки пятого пакета. Нет необходимости подтверждать промежуточные пакеты, так как TCP по умолчанию использует кумулятивные подтверждения.
Соглашение об именах для алгоритмов управления перегрузкой (CCA), возможно, возникло в статье 1996 года Кевина Фолла и Салли Флойд. [9] [ неудачная проверка ]
Ниже приводится одна из возможных классификаций в соответствии со следующими свойствами:
Некоторые известные механизмы предотвращения перегрузок классифицируются по этой схеме следующим образом:
Вариант | Обратная связь | Необходимые изменения | Преимущества | Справедливость |
---|---|---|---|---|
(Новое) Рено | Потеря | — | — | Задерживать |
Вегас | Задерживать | Отправитель | Меньше потерь | Пропорциональный |
Высокоскоростной | Потеря | Отправитель | Высокая пропускная способность | |
БИК | Потеря | Отправитель | Высокая пропускная способность | |
КУБИЧЕСКИЙ | Потеря | Отправитель | Высокая пропускная способность | |
C2TCP [10] [11] | Потеря/задержка | Отправитель | Сверхнизкая задержка и высокая пропускная способность | |
НАТКП [12] | Многобитный сигнал | Отправитель | Почти оптимальная производительность | |
Эластичный TCP | Потеря/задержка | Отправитель | Высокая пропускная способность/короткая и междугородняя связь | |
Agile-TCP | Потеря | Отправитель | Высокая пропускная способность/короткое расстояние | |
H-TCP | Потеря | Отправитель | Высокая пропускная способность | |
БЫСТРЫЙ | Задерживать | Отправитель | Высокая пропускная способность | Пропорциональный |
Соединение TCP | Потеря/задержка | Отправитель | Высокая пропускная способность | Пропорциональный |
Вествуд | Потеря/задержка | Отправитель | л | |
Джерси | Потеря/задержка | Отправитель | л | |
ББР [13] | Задерживать | Отправитель | BLVC, буферный наполнитель | |
ЗАЖИМ | Многобитный сигнал | Приемник, Маршрутизатор | В | Макс-мин |
TFRC | Потеря | Отправитель, получатель | Нет ретрансляции | Минимальная задержка |
XCP | Многобитный сигнал | Отправитель, получатель, маршрутизатор | БЛФК | Макс-мин |
ВКП | 2-битный сигнал | Отправитель, получатель, маршрутизатор | БЛФ | Пропорциональный |
Макснет | Многобитный сигнал | Отправитель, получатель, маршрутизатор | БЛФСК | Макс-мин |
ДжетМакс | Многобитный сигнал | Отправитель, получатель, маршрутизатор | Высокая пропускная способность | Макс-мин |
КРАСНЫЙ | Потеря | Маршрутизатор | Уменьшенная задержка | |
ECN | Однобитный сигнал | Отправитель, получатель, маршрутизатор | Снижение потерь |
Алгоритмы TCP Tahoe и Reno были ретроспективно названы в честь версий или разновидностей операционной системы 4.3BSD , в которой каждый из них впервые появился (которые сами были названы в честь озера Тахо и близлежащего города Рино, штат Невада ). Алгоритм Tahoe впервые появился в 4.3BSD-Tahoe (который был создан для поддержки миникомпьютера CCI Power 6/32 «Tahoe» ), а позже стал доступен для лицензиатов, не принадлежащих AT&T, как часть 4.3BSD Networking Release 1; это обеспечило его широкое распространение и внедрение. Улучшения были внесены в 4.3BSD-Reno и впоследствии выпущены для публики как Networking Release 2, а затем 4.4BSD-Lite.
В то время как тайм-аут повторной передачи (RTO) и дублирующиеся ACK рассматриваются как события потери пакетов, поведение Tahoe и Reno отличается прежде всего тем, как они реагируют на дублирующиеся ACK:
Как в Tahoe, так и в Reno, если истекает время ожидания ACK (время ожидания RTO), используется медленный старт, и оба алгоритма сокращают окно перегрузки до 1 MSS. [ нужна ссылка ]
TCP New Reno, определенный в RFC 6582 (который отменяет предыдущие определения в RFC 3782 и RFC 2582 ), улучшает повторную передачу на этапе быстрого восстановления TCP Reno.
Во время быстрого восстановления, чтобы окно передачи оставалось заполненным, для каждого возвращаемого дубликата ACK отправляется новый неотправленный пакет из конца окна перегрузки.
Отличие от Reno заключается в том, что New Reno не уменьшает вдвое ssthresh сразу, что может привести к слишком сильному сокращению окна, если произойдет многократная потеря пакетов. Он не выходит из режима быстрого восстановления и не сбрасывает ssthresh, пока не подтвердит все данные.
После повторной передачи вновь подтвержденные данные имеют два случая:
Он использует переменную под названием «восстановить», чтобы записать, сколько данных необходимо восстановить. После тайм-аута повторной передачи запишите наивысший переданный порядковый номер в переменной восстановления и выйдите из процедуры быстрого восстановления, если этот порядковый номер подтвержден, TCP возвращается в состояние предотвращения перегрузки.
Проблема возникает с New Reno, когда нет потерь пакетов, но вместо этого пакеты переупорядочиваются более чем по трем порядковым номерам пакетов. В этом случае New Reno ошибочно входит в режим быстрого восстановления. Когда переупорядоченный пакет доставляется, сразу же отправляются дубликаты и ненужные повторные передачи.
Новый Reno работает так же, как SACK, при низкой частоте ошибок при передаче пакетов и существенно превосходит Reno при высокой частоте ошибок. [16]
До середины 1990-х все установленные TCP тайм-ауты и измеренные задержки приема-передачи основывались только на последнем переданном пакете в буфере передачи. Исследователи из Университета Аризоны Ларри Петерсон и Лоуренс Бракмо представили TCP Vegas (названный в честь Лас-Вегаса , крупнейшего города в Неваде), в котором устанавливались тайм-ауты и измерялись задержки приема-передачи для каждого пакета в буфере передачи. Кроме того, TCP Vegas использует дополнительное увеличение окна перегрузки. В сравнительном исследовании различных TCP CCA наиболее гладким оказался протокол TCP Vegas, за которым следует TCP CUBIC. [17]
TCP Vegas не получил широкого распространения за пределами лаборатории Петерсона, но был выбран в качестве метода управления перегрузкой по умолчанию для прошивки DD-WRT v24 SP2. [18]
TCP Hybla направлен на устранение штрафов за TCP-соединения, которые включают в себя наземные или спутниковые радиоканалы с высокой задержкой. Улучшения Hybla основаны на аналитической оценке динамики окна перегрузки. [19]
Двоичное увеличение управления перегрузкой (BIC) — это реализация TCP с оптимизированным CCA для высокоскоростных сетей с высокой задержкой, известных как длинные толстые сети (LFN). [20] BIC используется по умолчанию в ядрах Linux с 2.6.8 по 2.6.18. [ нужна ссылка ]
CUBIC является менее агрессивным и более систематическим производным от BIC, в котором окно представляет собой кубическую функцию времени с момента последнего события перегрузки, с точкой перегиба, установленной в окне до события. CUBIC используется по умолчанию в ядрах Linux между версиями 2.6.19 и 3.2.
Agile-SD — это CCA на базе Linux, предназначенный для реального ядра Linux. Это алгоритм на стороне получателя, который использует подход, основанный на потерях, с использованием нового механизма, называемого коэффициентом гибкости (AF). для увеличения использования полосы пропускания в высокоскоростных сетях и сетях ближнего действия (сетях с низким BDP), таких как локальные сети или оптоволоконные сети, особенно при небольшом размере применяемого буфера. [21] Это было оценено путем сравнения его производительности с Compound TCP (CCA по умолчанию в MS Windows) и CUBIC (по умолчанию в Linux) с использованием симулятора NS-2. Это повышает общую производительность до 55% по отношению к средней пропускной способности.
Westwood+ — это модификация TCP Reno, предназначенная только для отправителя, которая оптимизирует производительность управления перегрузкой TCP как в проводных, так и в беспроводных сетях . TCP Westwood+ основан на сквозной пропускной способностиоценка для установки окна перегрузки и порога медленного запуска после эпизода перегрузки, то есть после трех дублирующих подтверждений или тайм-аута. Пропускная способность оценивается путем усреднения скорости возврата пакетов подтверждения. В отличие от TCP Reno, который слепо уменьшает вдвое окно перегрузки после трех дублирующих ACK, TCP Westwood+ адаптивно устанавливает порог медленного старта и окно перегрузки, которые учитывают оценку пропускной способности, доступной в момент возникновения перегрузки. По сравнению с Reno и New Reno, Westwood+ значительно увеличивает пропускную способность по беспроводным каналам и улучшает справедливость в проводных сетях. [ нужна ссылка ]
Составной TCP — это реализация Microsoft TCP, которая одновременно поддерживает два разных окна перегрузки с целью достижения хорошей производительности на LFN без ущерба для справедливости . Он широко используется в версиях Windows, начиная с Microsoft Windows Vista и Windows Server 2008 , и был перенесен в более старые версии Microsoft Windows, а также в Linux .
TCP Proportional Rate Reduction (PRR) [22] — это алгоритм, предназначенный для повышения точности данных, отправляемых во время восстановления. Алгоритм гарантирует, что размер окна после восстановления будет как можно ближе к порогу медленного запуска. В тестах, проведенных Google , PRR привел к снижению средней задержки на 3–10 %, а время ожидания восстановления сократилось на 5 %. [23] PRR доступен в ядрах Linux , начиная с версии 3.2. [24]
Пропускная способность узкого места и время распространения туда и обратно (BBR) — это CCA, разработанный в Google в 2016 году. [25] Хотя большинство CCA основаны на потерях, поскольку они полагаются на потерю пакетов для обнаружения перегрузки и снижения скорости передачи, BBR, например TCP Vegas основан на модели. Алгоритм использует максимальную пропускную способность и время приема-передачи, при которых сеть доставила самый последний поток исходящих пакетов данных, для построения модели сети. Каждое кумулятивное или выборочное подтверждение доставки пакета создает выборку скорости, которая записывает количество данных, доставленных за интервал времени между передачей пакета данных и подтверждением этого пакета. [26]По мере того, как производительность контроллеров сетевых интерфейсов меняется с мегабит в секунду на гигабит в секунду, задержка, связанная с переполнением буфера, а не потеря пакетов, становится более надежным маркером максимальной пропускной способности, создавая CCA на основе моделей, которые обеспечивают более высокую пропускную способность и меньшую задержку, такие как BBR. , более надежная альтернатива более популярным алгоритмам, основанным на потерях, таким как TCP CUBIC .
BBR доступен для Linux TCP, начиная с Linux 4.9. [27] Он также доступен для QUIC . [28]
BBR версии 1 (BBRv1) эффективен и быстр, но его справедливость для потоков, отличных от BBR, оспаривается. При внедрении на YouTube BBRv1 повысил пропускную способность сети в среднем на 4 %, а в некоторых странах — до 14 %. [29] В то время как презентация Google показывает, что BBRv1 хорошо сосуществует с CUBIC, [25] такие исследователи, как Джефф Хьюстон и Хок, Блесс и Зиттербарт, считают его несправедливым по отношению к другим потокам и не масштабируемым. [30] Хок и др. также обнаружили «некоторые серьезные внутренние проблемы, такие как повышенные задержки в очереди, несправедливость и массовые потери пакетов» в реализации BBR в Linux 4.9. [31]
Сохейл Аббаслу и др. (авторы C2TCP) показывают, что BBRv1 плохо работает в динамических средах, таких как сотовые сети. [10] [11] Они также показали, что у BBR есть проблема несправедливости. Например, когда поток CUBIC (который является реализацией TCP по умолчанию в Linux, Android и MacOS) сосуществует в сети с потоком BBR, поток BBR может доминировать над потоком CUBIC и получать от него всю пропускную способность канала (см. рисунок 16 в [10] ).
Версия 2 пытается решить проблему несправедливости при работе вместе с управлением перегрузкой на основе потерь, такой как CUBIC. [32] В BBRv2 модель, используемая BBRv1, дополнена информацией о потере пакетов и информацией из явного уведомления о перегрузке (ECN). Хотя пропускная способность BBRv2 иногда может быть ниже, чем у BBRv1, обычно считается, что она имеет лучшую пропускную способность .
Cellular Controlled Delay TCP (C2TCP) [10] [11] был мотивирован отсутствием гибкого сквозного TCP-подхода, который мог бы удовлетворить различные требования QoS для различных приложений, не требуя каких-либо изменений в сетевых устройствах. C2TCP направлен на удовлетворение требований сверхнизкой задержки и высокой пропускной способности таких приложений, как виртуальная реальность , видеоконференции , онлайн-игры , автомобильные системы связи и т. д . в высокодинамичной среде, такой как современные сотовые сети LTE и будущие сотовые сети 5G . C2TCP работает как надстройкаповерх TCP на основе потерь (например, Reno, NewReno, CUBIC , BIC , ...), требуется только установка на стороне сервера, и средняя задержка пакетов ограничена желаемыми задержками, установленными приложениями. .
Исследователи из Нью- Йоркского университета [33] показали, что C2TCP превосходит показатели задержки и вариации задержки различных современных схем TCP. Например, они показали, что по сравнению с BBR, CUBIC и Westwood в среднем C2TCP снижает среднюю задержку пакетов примерно на 250%, 900% и 700% соответственно в различных средах сотовой сети. [10]
Elastic-TCP был предложен в феврале 2019 года для увеличения использования полосы пропускания в сетях с высоким BDP для поддержки облачных вычислений. Это CCA на основе Linux, предназначенный для ядра Linux. Это алгоритм на стороне получателя, в котором используется подход, основанный на задержке с потерями, с использованием нового механизма, называемого взвешивающей функцией с корреляцией окна (WWF). Он имеет высокий уровень эластичности, позволяющий работать с различными характеристиками сети без необходимости ручной настройки. Он был оценен путем сравнения его производительности с Compound TCP (CCA по умолчанию в MS Windows), CUBIC (по умолчанию для Linux) и TCP-BBR (по умолчанию в Linux 4.9, используемом Google) с использованием симулятора NS-2 и испытательного стенда. Elastic-TCP значительно улучшает общую производительность с точки зрения средней пропускной способности, коэффициента потерь и задержки. [34]
Сохейл Аббаслу и др. др. предложенный NATCP (Network-Assisted TCP) [12] спорный [ по мнению кого? ] Дизайн TCP, ориентированный на пограничные вычисления с множественным доступом(МЭК). Ключевая идея NATCP заключается в том, что если бы характеристики сети были известны заранее, протокол TCP был бы разработан по-другому. Таким образом, NATCP использует доступные функции и свойства современных сотовых архитектур на основе MEC, чтобы приблизить производительность TCP к оптимальной производительности. NATCP использует внеполосную обратную связь из сети на расположенные поблизости серверы. Обратная связь от сети, которая включает в себя пропускную способность канала сотового доступа и минимальное значение RTT сети, помогает серверам корректировать свои скорости отправки. Как показывают предварительные результаты, NATCP превосходит современные схемы TCP. [12] [35]
TCP New Reno был наиболее часто реализуемым алгоритмом, поддержка SACK очень распространена [ нужна цитата ] и является расширением Reno/New Reno . Большинство других являются конкурирующими предложениями, которые все еще нуждаются в оценке. Начиная с версии 2.6.8 ядро Linux переключило реализацию по умолчанию с New Reno на BIC . Реализация по умолчанию снова была изменена на CUBIC в версии 2.6.19. FreeBSD использует New Reno в качестве алгоритма по умолчанию. Тем не менее, он поддерживает ряд других вариантов. [46]
Когда произведение пропускной способности и задержки для каждого потока увеличивается, независимо от схемы организации очереди, TCP становится неэффективным и подверженным нестабильности. Это становится все более важным, поскольку Интернет развивается и включает оптические каналы с очень высокой пропускной способностью.
TCP Interactive (iTCP) [47] позволяет приложениям подписываться на события TCP и реагировать соответствующим образом, что позволяет использовать различные функциональные расширения для TCP извне уровня TCP. Большинство схем перегрузки TCP работают внутренне. Кроме того, iTCP позволяет расширенным приложениям напрямую участвовать в контроле перегрузки, например, контролировать скорость генерации источника.
Zeta-TCP обнаруживает перегрузку как по задержке, так и по уровню потерь. Чтобы максимизировать хорошую пропускную способность, Zeta-TCP применяет различные стратегии отсрочки окна перегрузки в зависимости от вероятности перегрузки. Он также имеет другие улучшения для точного обнаружения потери пакетов, избегая повторной передачи по тайм-ауту повторной передачи; ускорять и контролировать входящий (загрузочный) трафик. [48]
CCA можно классифицировать по отношению к осведомленности о сети, что означает степень, в которой эти алгоритмы осведомлены о состоянии сети. Он состоит из трех основных категорий: черный ящик, серый ящик и зеленый ящик. [49]
Алгоритмы черного ящика предлагают слепые методы контроля перегрузки. Они работают только с двоичной обратной связью, полученной при перегрузке, и не предполагают каких-либо знаний о состоянии сетей, которыми они управляют.
Алгоритмы серого ящика используют экземпляры времени [ требуется уточнение ] для получения измерений и оценок пропускной способности, конфликта потоков и других данных о состоянии сети.
Алгоритмы зеленого ящика предлагают бимодальные методы управления перегрузкой, которые измеряют справедливую долю общей пропускной способности, которая должна быть выделена для каждого потока в любой момент во время работы системы.
Следующие алгоритмы требуют добавления настраиваемых полей в структуру пакета TCP:
{{cite journal}}
: Журнал цитирования требует |journal=
( помощь ){{cite web}}
: CS1 maint: заархивированная копия как заголовок ( ссылка ){{cite journal}}
: Журнал цитирования требует |journal=
( помощь ){{cite web}}
: CS1 maint: заархивированная копия как заголовок ( ссылка )