Опубликован: 11.08.2008 | Доступ: свободный | Студентов: 8955 / 1501 | Оценка: 4.20 / 3.78 | Длительность: 25:00:00
ISBN: 978-5-94774-884-0
Лекция 10:

Транспортный уровень. Протокол управления передачей (Transmission Control Protocol — TCP)

< Лекция 9 || Лекция 10: 123456 || Лекция 11 >

Таймеры TCP

TCP использует четыре таймера, показанных на рис. 10.13.

TCP-таймеры

Рис. 10.13. TCP-таймеры

Таймер повторной передачи

Чтобы контролировать потери или удаления сегментов, TCP применяет таймер, который контролирует время повторной передачи и время ожидания подтверждения сегмента. Когда TCP посылает сегмент, он запускает таймер повторной передачи для этого конкретного сегмента. При этом могут возникнуть две ситуации:

  1. Если подтверждение получено для этого конкретного сегмента прежде, чем истечет контрольное время, то таймер стирается.
  2. Если контрольное время таймера истечет прежде, чем придет подтверждение, сегмент ретранслируется, и таймер включится повторно.

Вычисление времени повторной передачи

TCP — протокол транспортного уровня, каждое соединение связывает два протокола TCP, которые могут работать в одной физической сети или работать с другой сетью, возможно, даже размещенной на другой стороне земного шара. Другими словами, каждое соединение создает свой путь, длина которого может полностью отличаться от другого пути, созданного другим соединением. Это означает, что TCP не может использовать одно и то же время повторной передачи для всех соединений. Выбор фиксированного времени повторной передачи для всех соединений может в результате привести к серьезным последствиям. Если время повторения передачи не соответствует времени для достижения сегментом пункта назначения и подтверждение за определенное время не достигнет исходного пункта, то это может привести к повторной передаче сегмента, который еще в пути. С другой стороны, если время повторения больше, чем необходимо для короткого пути, это может привести к задержке прикладных программ.

Даже для одиночного соединения время повторения передачи не должно быть фиксированным. Соединение может послать сегменты и получать подтверждения быстрее в период отсутствия трафика, чем в периоды перегрузки. TCP применяет динамическое время повторения, которое отличается для каждого соединения и которое может изменяться в течение одного и того же соединения.

Время повторной передачи может быть выполнено динамически на базе времени передачи "туда и обратно" (round-trip time — RTT). С этой целью используется несколько формул. Наиболее общая формула для вычисления времени повторения передачи есть двойное RTT:

Время повторения передачи = 2 x RTT.

Вычисление RTT

Теперь вопрос: как вычислить само RTT? RTT тоже вычисляется динамически. Имеются два метода. Первый метод — TCP использует опцию метки времени, когда при посылке сегмента и его подтверждении указывается время отправления. При втором методе TCP посылает сегмент, запускает таймер и ждет подтверждения. Это измерение времени между посланным сегментом и полученным подтверждением дает значение RTT.

Значение RTT используется в вычислениях времени повторения передачи — в соответствии со следующей формулой:

RTT = a x предыдущее RTT + (1 – a) текущее RTT.

Значение "a" обычно 90 процентов. Это означает, что новое RTT – это 90 процентов предыдущего значения RTT плюс 10 процентов значения текущего RTT. Например, если предыдущее RTT 250 микросекунд, и TCP принимает в этот момент сегмент, подтвержденный через 70 мкс, значение нового RTT и время повторной передачи равно:

RTT = 90% x 250 + 10% x 70 = 232 мкс.
Время повторной передачи = 2 x 232 = 464 мкс.

Вычисление RTT с учетом повторной передачи

Предположим, что сегмент не подтвержден в течение времени повторения, и он все-таки передан повторно. Когда TCP передатчика получает подтверждение на этот сегмент, он не знает — подтверждение это на исходный сегмент или на повторный. Значение RTT поэтому вычисляет ся, базируясь на прибытии сегмента. Однако если исходное сообщение было потеряно и подтверждение пришло на повторную единицу, значение RTT будет вычислено от времени повтора сегмента. Это дилемма, которая решается следующим образом:

  • не определять RTT повторного сегмента в вычислении нового RTT;
  • не корректировать значения RTT, пока вам не послан сегмент и не получено подтверждение без необходимости повторной передачи.

Время настойчивости

Для того чтобы иметь дело с объявлением окна с нулевым размером, TCP необходим другой таймер. Предположим, TCP приемника получил извещение о нулевом размере окна. TCP передатчика затем останавливает передачу сегментов, пока TCP приемника не пришлет подтверждение, извещающее о ненулевом размере окна. Это подтверждение может быть потеряно. Напомним, что подтверждения не подтверждаются в TCP. Если TCP приемника думает, что он отработал, и ждет, что TCP передатчика пришлет еще сегменты, TCP передатчика, не приняв подтверждение, ждет другое сообщение TCP для того, чтобы послать извещение о размере окна. И оба TCP могут продолжать ждать друг друга бесконечно.

Чтобы скорректировать этот тупик, TCP использует время настойчивости для каждого соединения. Когда TCP передатчика получает подтверждение с размером окна нуль, он запускает таймер настойчивости. Когда время таймера настойчивости истечет, TCP передатчика посылает специальный сегмент, называемый проба. Этот сегмент содержит только 1 байт данных. Он имеет порядковый номер, но порядковый номер никогда не подтверждается; он даже игнорируется в вычислениях порядковых номеров для остальных данных.

Значение таймера настойчивости устанавливается по времени повторения передачи. Однако если отклик не получен от приемника, посылается другой пробный сегмент и значение таймера настойчивости дублируется и переустанавливается. Передатчик продолжает передавать пробные сегменты и дублировать и переустанавливать значение таймера настойчивости, пока не достигнет порогового значения (обычно 60 с.). После этого передатчик посылает один пробный сегмент каждые 60 с., пока окно не откроется снова.

Дежурный таймер

Дежурный таймер используется в некоторых реализациях для предотвращения длительных не работающих соединений двух TCP. Предположим, клиент открыл соединение TCP к серверу, потом передал некоторые данные и затих. Может быть, клиент "упал", в этом случае соединение останется открытым навсегда.

Чтобы избавиться от этой ситуации, в большинстве реализаций оборудуется сервер с дежурным таймером. Каждый раз, когда сервер "слышит" клиента, он переустанавливает таймер. Отсчет времени обычно — два часа. Если нет никакого отклика после 10 проб (см. предыдущий раздел), каждая по 75 раз, он предполагает, что клиент "не в порядке", и заканчивает соединение.

Таймер времени ожидания

Таймер времени ожидания используется после окончания соединения. Когда TCP закрывается, он реально не разъединяется. Соединение удерживается в неопределенности на период времени ожидания. Если что-либо прибудет к пункту назначения, то оно будет удалено. Значение для этого таймера равно двум временам ожидаемого времени существования сегмента.

< Лекция 9 || Лекция 10: 123456 || Лекция 11 >
Наталья Шульга
Наталья Шульга

Курс "информационная безопасность" .

Можно ли на него записаться на ПЕРЕПОДГОТОВКУ по данному курсу? Выдается ли диплом в бумажном варианте и высылается ли он по почте?

Мария Архипова
Мария Архипова