Оригинальная статья была впервые опубликована в публичном аккаунте: «Code Farmer Fu Ge», посвященном обмену серверными технологиями (архитектура с высокой степенью параллелизма, промежуточное ПО, Linux, TCP/IP, HTTP, MySQL, Redis), Python и другими оригинальными сухими технологиями. товары и гиды интервью!
Протокол TCP/IP — это очень важная область знаний, и этот вопрос всегда часто задавали на собеседованиях. Когда интервьюер спрашивает вас, можете ли вы сказать мне, как протокол TCP обеспечивает надежную передачу? Можете ли вы ответить на него?
TCP — это протокол, обеспечивающий надежную доставку. То есть данные, передаваемые по TCP-соединению, не содержат ошибок, теряются, дублируются и поступают по порядку. TCP обеспечивает надежность передачи данных благодаря следующим функциям:
- Серийный номер и подтверждение
- Тайм-аут управления повторной передачей
- управление соединением
- Управление раздвижным окном
- управление потоком
- контроль перегрузки
ПредыдущийКак гарантируется надежность TCP-протокола: скользящее окно, тайм-аут повторной передачи, ответный сигнал подтверждения серийного номераМы обсудили несколько механизмов надежности протокола TCP:Серийный номер и подтверждение,Тайм-аут управления повторной передачей,управление соединением,Управление раздвижным окном
В этой статье мы продолжаем обсуждать два других механизма надежности протокола TCP:управление потоком,контроль перегрузки
Есть несколько статей о протоколе TCP, вы также можете посмотреть:
- В этой статье подробно рассказывается о трехстороннем рукопожатии TCP, четырехстороннем волновом процессе и принципе.
- Интервьюер: Расскажите о различиях и сценариях применения между UDP и TCP.
- Как гарантируется надежность TCP-протокола: скользящее окно, тайм-аут повторной передачи, ответный сигнал подтверждения серийного номера
Разница между управлением перегрузкой и управлением потоком
-
управление потокомОн воздействует на получателя, контролируя скорость отправки отправителя, чтобы получатель мог получить его вовремя, чтобы предотвратить потерю пакетов данных.
-
контроль перегрузкиКонтроль перегрузки действует в сети, он предотвращает ввод слишком большого количества данных в сеть и предотвращает перегрузку сети.
управление потоком
Так называемое управление потокомПусть отправитель не отправляет слишком быстро, чтобы получатель мог получить его вовремя
Предполагая, что управление потоком отсутствует, отправитель отправляет данные в соответствии со своей реальной ситуацией. Если скорость отправки слишком высока, приемный буфер получателя скоро заполнится. В это время, если отправитель продолжает отправлять данные, получатель не может его обработать.В то же время получатель отбрасывает данные, которые должны были быть получены, что запускает механизм повторной передачи отправителя, что приводит к неоправданной трате сетевого трафика.
Итак, TCP должен предоставить механизм:Позвольте отправителю контролировать объем отправляемых данных в соответствии с фактическими возможностями приема получателя.. Это называется управлением потоком.
Использование TCPраздвижное окноРеализован механизм управления потоком, и размер скользящего окна сообщается другой стороне через поле размера окна в заголовке TCP.
Вернемся к заголовку TCP:
В заголовочной информации протокола TCP указан размер окна 16-битного поля, а содержимое размера окна фактически представляет собой оставшийся размер буфера данных, полученного получателем.Чем больше это число, тем больше остается места в приемном буфере на принимающей стороне и тем выше пропускная способность сети.Однако, когда принимающий конец приемного буфера сталкивается с переполнением данных, значение размера окна будет установлено на меньшее значение, сообщив заканчивая отправку, чтобы контролировать количество отправленных данных. Когда окна изменение индикации передающего конце получает приемный конец, сумма передачи данных регулируется для формирования полного управления потоком.
Конкретная операция управления потоком заключается в следующем: получатель заполняет свой собственный непосредственный размер окна rwnd (окно получателя) при отправке сообщения ACK и отправляет его вместе с сообщением ACK. Отправитель изменяет скорость отправки в соответствии со значением размера окна в сообщении ACK.
Взгляните на следующую диаграмму, которая показывает общий процесс управления потоком TCP:
Как показано на рисунке выше, после получения пакета данных с порядковым номером от 1 до 1000 узел B возвращает отправителю ACK и сообщает отправителю, что размер его окна равен 3000, что означает, что отправитель все еще может отправить 3000. байт данных. После того, как хост A получает инструкцию, он продолжает отправлять данные до тех пор, пока хост B не получит сегмент данных 3001-4000 и его приемный буфер не будет заполнен, а размер окна возврата хоста B равен 0, так что хост A хочет приостановить передачу данных. .
Это такой процесс, который может помешать отправителю отправить слишком большие данные за один раз, а получатель не сможет их обработать.
Тогда возникает другой вопрос:После того как отправитель прекратит отправку данных, когда он сможет продолжить отправку данных?Продолжим смотреть на картинку выше, ответ - дождаться, пока принимающая сторона обработает данные в буфере и отправитобновление окнаОтправитель может продолжать отправлять данные в соответствии с размером окна. Однако, если отправитель не получает уведомление об обновлении окна в течение времени ожидания повторной передачи или пакет обновления окна потерян, он не может нормально обмениваться данными.Что мне делать?
TCP имеетНепрерывный таймер.Пока TCP-соединение другой стороны получает уведомление об нулевом окне, таймер продолжает работать. Если продолжительность времени, установленная таймером, истекает, отправляет нулевой сегмент данных контроля окна (сегмент данных, который содержит только один байт), тогда один из полученных сегментов будет продолжать сбрасывать таймер.
Поэтому отправитель будет периодически отправлять сообщение получателю.обнаружение окнаЦелью этого является получение последней информации о размере окна.
Таким образом, весь процесс управления потоком TCP завершен.
контроль перегрузки
что такое затор
Все мы знаем, что ресурсы в компьютерной сети ограничены. Перегрузка возникает, когда спрос на ресурсы в сети превышает доступную часть сети в течение определенного периода времени, и производительность сети ухудшается. С точки зрения непрофессионала, устройства в сети отправляют слишком много пакетов данных, которые невозможно обработать, что приводит к снижению производительности сети.
Почему TCP выполняет управление перегрузкой?
Маршрутизаторы в сети будут иметь очередь обработки пакетов.Когда маршрутизатор получает слишком много пакетов и не может обработать их все сразу, очередь обработки пакетов будет слишком длинной. В этот момент маршрутизатор безоговорочно отбрасывает вновь полученные пакеты данных. Это заставит TCP-протокол верхнего уровня думать, что пакеты данных потеряны в сети, и затем повторно передавать эти пакеты данных, а маршрутизатор отбрасывает эти повторно переданные пакеты данных.В прошлом производительность сети резко падала, а сеть будет парализована. Следовательно, TCP должен контролировать количество отправляемых пакетов, чтобы избежать снижения производительности сети.
Принцип управления перегрузкой
При управлении скользящим окном TCP отправляющий и принимающий хосты больше не используют «сегмент» как единое целое, а отправляют сигнал подтверждения в «окне» как единое целое, поэтому отправляющий хост может непрерывно отправлять большое количество данных. пакеты. Тем не мение,Если в начале связи отправляется большое количество пакетов данных, это также может привести к параличу сети.
При управлении перегрузкой отправитель поддерживает имя, называемоеокно перегрузки cwnd(окно перегрузки) переменные состояния.Размер окна перегрузки зависит от того, насколько перегружена сеть, и изменяется динамически.. Окно отправки принимает минимальное значение окна перегрузки и окна приема, чтобы избежать отправки данных с большим окном приема.
Управление перегрузкой использует два важных алгоритма:Алгоритм медленного старта,Алгоритм предотвращения перегрузок.
(1) Алгоритм медленного запуска: Идея алгоритма медленного старта состоит не в том, чтобы отправлять большое количество данных в начале, а сначала протестировать степень перегруженности сети, то есть постепенно увеличивать размер окна перегрузки от малого к большому. . В медленных алгоритмахУдваивайте cwnd после каждого трансферного раунда. Например: вначале отправитель устанавливает cwnd=1 (для простоты понимания количество сегментов используется как единица размера окна), а затем после каждого раунда передачи cwnd удваивается, например 1, 2 , 4, 8...Экспоненциальный рост Поэтому медленный старт здесь не означает, что окно перегрузки растет медленно, но оно медленнее, чем данные, которые приходят для передачи большого окна в начале.
Конечно, размер cwnd определенно не может продолжать расти в геометрической прогрессии таким образом, иначе он скоро вырастет до такой степени, что вызовет сбой сети. Итак, по истечении определенного времени или условия мы должны заменить его наАлгоритм предотвращения перегрузокдля отправки данных.
(2) Алгоритм предотвращения перегрузок: Алгоритм предотвращения перегрузки также постепенно увеличивает размер cwnd, но используетЛинейный роствместо экспоненциального роста, как алгоритмы медленного старта. В частности, после каждого раунда передачи размер cwnd увеличивается на единицу (дополнительное увеличение), а при обнаружении перегрузки сети размер ssthresh сбрасывается по описанной выше методике (уменьшение умножения, исходное 1/2). -выполнить алгоритм медленного старта с cwnd=1.
Комбинация алгоритма медленного старта и алгоритма предотвращения перегрузки:
Вопрос: Как алгоритм медленного старта и алгоритм предотвращения перегрузки работают вместе в управлении перегрузкой?
Как упоминалось выше, размер cwnd при алгоритме медленного старта растет экспоненциально, поэтому cwnd нельзя допускать произвольного роста, поэтому мы вводим порог медленного старта (ssthresh) для управления ростом cwnd.
Роль ssthresh:
- Когда cwnd
- Если cwnd > ssthresh, вместо этого используйте алгоритм предотвращения перегрузки.
- Когда cwnd = ssthresh, медленный запуск и алгоритм предотвращения перегрузки случайным образом
Другой вопрос как устроен этот ssthresh?В TCP/IP предусмотрено, что на этапе медленного запуска или на этапе предотвращения перегрузки, пока в сети существует перегрузка (подтверждение не получено вовремя), ssthresh должен быть установлен равным половине размера отправляемого окно в это время.(не может быть меньше 2).
Как показано на рисунке выше, общий алгоритм управления перегрузкой выглядит следующим образом:
- Вначале установите начальное значение ssthresh на 16, запустите медленный запуск и увеличьте окно перегрузки cwnd, пока cwnd=16, остановите медленный запуск и запустите алгоритм предотвращения перегрузки.
- Используйте алгоритм предотвращения перегрузки для линейного увеличения cwnd до cwnd = 24. В это время сеть перегружена (сигнал подтверждения ACK не приходит вовремя). Установите ssthresh на половину от исходного, то есть ssthresh = 12, и установить cwnd на 1.
- Снова запустите медленный запуск, пока cwnd не достигнет ssthresh=12, а затем выполните алгоритм предотвращения перегрузки, чтобы добавить и увеличить, пока не встретится перегрузка сети, и отрегулируйте ssthresh до половины исходного значения.
- Таким образом, cwnd повторно вычисляется динамически для достижения цели управления перегрузкой.
Быстрая повторная передача против повторной передачи с тайм-аутом
Принцип надежной передачи TCP заключается в механизме повторной передачи по тайм-ауту, и существует два механизма повторной передачи:Машина ретрансляции тайм-аута и быстрая ретрансляция
-
Механизм повторной передачи тайм-аута TCP, в сочетании с вышеизложенныммедленный стартипредотвращение перегрузкиИспользуется для запуска обратного отсчета после отправки данных, еслив течение тайм-аута повторной передачиЕсли ACK, отправленный получателю, не получен, выполните вышеуказанноеПроцесс уменьшения умножения (установите sstresh равным половине оригинала)И перезапустите алгоритм медленного старта, повторно отправьте данные.
-
Быстрая повторная передача TCP, это позволяет отправителю постоянно получать3 дубликата подтвержденияПосле этого процесс сокращения умножения можно запустить, не дожидаясь периода тайм-аута повторной передачи. Это требует, чтобы каждый раз, когда получатель получаетвышел из строяОтправляемый сегмент сообщения немедленно отправляет дубликат подтверждения, чтобы отправитель знал заранее, что сегмент потерян, вместо того, чтобы ждать дополнительного подтверждения при отправке данных.
Схема быстрой повторной передачи TCP выглядит следующим образом:
Как показано на рисунке, поскольку отправителю не нужно ждать подтверждения каждого сегмента данных для продолжения отправки, данные передаются блоками одного окна, так что даже если хост А потерян, хост А остается левым. , Чем меньше размер окна данных, и в это время хост B обнаруживает потерю данных 1001-2000, он будет каждый раз возвращать серийный номер 2000 пакета данных, он возвращает ACK с серийным номером 2000, чтобы четко уведомить хост A , когда хост А получаеттри разаACK 2000 до тех пор, пока пакеты 1001-2000 не будут потеряны, пакеты 1001-2000 необходимо передать повторно. Таким образом, цель быстрой повторной передачи может быть достигнута, даже если время ожидания повторной передачи не достигнуто.
быстрое восстановление
Алгоритм быстрого восстановления — это алгоритм, используемый в сочетании с алгоритмом быстрой повторной передачи.
Быстрое восстановление в основном означает, что при быстрой повторной передаче отправитель быстро получает3 дубликата подтвержденияСледовательно, он будет считать, что сеть не находится в состоянии перегрузки, поэтомуПроцесс уменьшения умножения (установите sstresh равным половине оригинала), начнет"Предотвращение перегрузки", вместо перезапуска механизма повторной передачи по таймауту TCPмедленный старт
Суммировать
В этой статье обобщаются два важных механизма протокола TCP для обеспечения надежности транспорта:
- пройти черезуправление потокомУправляйте скоростью отправки отправителя, чтобы получатель мог получить вовремя, чтобы предотвратить потерю пакетов.
- пройти черезконтроль перегрузкиЭто делается для предотвращения ввода слишком большого количества данных в сеть и предотвращения перегрузки маршрутизаторов или каналов в сети, что приводит к потере данных. Тем самым обеспечивая надежность передачи TCP. плюс еще одна статьяКак гарантируется надежность TCP-протокола: скользящее окно, тайм-аут повторной передачи, ответный сигнал подтверждения серийного номера, то обобщается механизм надежности TCP.
Есть урожай?
Если все выиграют
- Ее можно переслать + лайкнуть, чтобы больше людей увидело эту статью, что также является для меня большим стимулом!
- Подпишитесь на мой оригинальный публичный аккаунт:Код Фермер Фу Гэ, сосредоточьтесь на совместном использовании внутренних технологийоригинальныйсухая статья
Ответить после подписки1024ПолучатьРекомендуемые электронные книги по бэкэнд-технологиям и архитектуре