Тайм-ауты и повторные передачи TCP

         

ICMP ошибки



ICMP ошибки

Давайте посмотрим, как TCP обрабатывает ICMP ошибки, которые возвращаются по соединению. В основном TCP обрабатывает следующие ICMP ошибки: подавление источника, хост недоступен и сеть недоступна.

Текущие реализации (производные от Berkeley) обрабатывают эти ICMP ошибки следующим образом:

  • При получении подавления источника, окно переполнения, cwnd, устанавливается в один сегмент, чтобы осуществить медленный старт, однако порог медленного старта, ssthresh, не изменяется, таким образом, окно будет открыто (ограничивается размером окна и временем возврата), пока не возникнет переполнение.
  • Получение ошибки о недоступности хоста или недоступности сети игнорируется, так как эти две ошибки воспринимаются как "кратковременные". Это может произойти из-за того, что промежуточный маршрутизатор вышел из строя, и потребуется несколько минут на то, чтобы протокол маршрутизации установил альтернативный маршрут. В течение этого периода может возникнуть любая из этих двух ICMP ошибок, однако соединение не должно быть разорвано. Вместо этого TCP старается отправить данные, на которые была сгенерирована ошибка, однако, они могут быть отброшены по тайм-ауту. (Обратитесь к рисунку 21.1, на котором показано, что TCP не разрывает соединение в течение 9 минут.) Текущие реализации Berkeley фиксируют возникшие ICMP ошибки, и если соединение разорвано по тайм-ауту, ICMP ошибка транслируется в более понятный код ошибки, который выглядит как "connection timed out" (соединение закрыто по тайм-ауту).

Более ранние реализации BSD некорректно разрывали соединение, когда приходила ICMP ошибка о недоступности хоста или недоступности сети.



Содержание раздела