«Эта статья участвовала в мероприятии Haowen Convocation Order, щелкните, чтобы просмотреть:Двойные заявки на внутреннюю и внешнюю стороны, призовой фонд в 20 000 юаней ждет вас, чтобы бросить вызов!"
ПТС как старый водитель.Помимо покупки билета и посадки в автобус(трехстороннее рукопожатие),есть еще и грузоподъемность(раздвижное окно).Этот автомобиль многократно перевозится в мире интернета.Когда есть слишком много пассажиров, машина точно не выдержит.И сообщите пассажирам, что вы подойдете в следующий раз, когда у меня будет место. То же самое верно и для TCP в Интернете. Когда сетевой трафик передачи слишком велик, получатель может не справиться с ним, и легко вызвать отставание запросов. Так как же TCP решает эту проблему? Сегодня мы обсудим методы управления потоком TCPраздвижное окно.
Вот пример для иллюстрации, чтобы было легче понять.
Предположим, что A отправляет данные B. Когда соединение установлено, B сообщает A: «Мое окно приема rwnd = 400» (здесь rwnd означает окно получателя). это означаетОкно отправки отправителя A не может превышать значение окна приема, заданное получателем B., что составляет 400 байт. Обратите внимание,Окно TCP в байтах, а не сегмент. Пусть каждый сегмент имеет длину 100 байт, а начальное значение порядкового номера сегмента данных установлено равным 1 (см. порядковый номер seq = 1 над первой стрелкой на рисунке). В этой статье A представляет отправителя, а B представляет получателя сообщения.
Хост B на приемнике выполняет управление потоком три раза. В первый раз окно уменьшается до rwnd = 300, во второй раз до rwnd = 100 и, наконец, до rwnd = 0, то есть отправителю больше не разрешено отправлять данные. Следует отметить, что все три сегмента, отправленные B к A, установлены с ACK = 1, а поле номера подтверждения (ack) имеет смысл только при ACK = 1.
в заключении, то есть отправитель может отправить только размер сообщения, указанный получателем, и если он превышает размер, сообщение будет приостановлено.
Процесс скользящего окна завершен, но проблема еще не решена.
1. Если отправитель отправляет потерянное сообщение, например seq=201 на приведенном выше рисунке, как решить эту проблему?
2. Если B отправляет окно 0 (rwnd=0) в A, буфер приема B имеет некоторое пространство для хранения, поэтому B отправляет его в A, поэтому B отправляет сегмент rwnd = 400 в A, но на этот раз запрос потерян. , значит, A все еще не думает, что B — это 0-е окно, а затем ждет?
Разберемся с вопросами
Когда A отправляет сообщение B, сообщение A теряется, но это не влияет на последующую отправку сообщения, пока A повторно подключается и отправляет его снова. Обратите внимание, однако, что повторные запросы не могут отправлять новые данные.
Когда значение окна, отправленное B стороне A, теряется, TCPнепрерывный счетчикЭто сыграло свою роль.Когда сторона А получает уведомление об окне 0,непрерывный счетчикначнется, если время ожидания, установленное непрерывным счетчиком, истекло, A отправит окно 0 на BПробный пакет, то B может подтвердить значение окна.Если окно по-прежнему равно нулю, сторона, получающая этот сегмент, сбрасывает непрерывный таймер. Если окно не равно нулю, то можно выйти из тупиковой ситуации.
второе резюме, скользящее окно использует значение окна для управления размером трафика передачи; механизм повторной передачи используется для решения проблемы потери сообщения отправителя; непрерывный счетчик и сообщение обнаружения используются для решения ситуации бесконечного ожидания, вызванной потерей значения окна, отправленного получателем.
Используйте общий случай для углубления моего понимания: загрузка моей машины всего 200 (значение окна в ПТС), и пассажирам запрещается садиться в машину после каждой полной загрузки (отправитель заблокирован), а когда некоторые люди получают выключить машину (получается ПТС. В тайнике еще есть место) можно продолжать пропускать пассажиров в автобус.
После прочтения этого, есть ли еще один маленький момент, которым можно похвастаться перед интервьюером? Храбрый Ниуниу мчится вперед! !