Тср соединение
ТСР соединение проходит через ряд промежуточных состояний, переходя из одного в другое, в ответ на определенные события. Например – получение пакетов с различными выставленными флагами, действия пользователя и так далее.
Можно выделить 3 основных состояния у ТСР соединения:
Установление
Рабочее состояние или обмен данными
Закрытие соединения
А В.
Для установления канала, в ответ на желание передать данные, узел А передает узлу Б пакет следующего содержания: устанавливается флаг SYN и в поле номер очереди записывает начальное значения номера очереди – ISSa. Узел В, получив такой пакет, понимает, что нужно установить соединение (если на это соединение нет запрета). Узел В отправляет такой пакет:
SYN, ACK, в номер очереди заносит свое начальное значение очереди, а в поле подтверждения отправляет полученное значение, увеличенное на единицу (ISSa+1)
На 3 шаге узел А отправляет В такой пакет: ACB, в номер очереди свой номер, увеличенный на 1, а в номер подтверждения – полученный, увеличенный на 1. (ISSa +1, ISSb+1)
На этом этапе соединение установлено – 3-х этапное рукопожатие.
Затем наступает момент передачи данных.
От узла А к узлу В идут пакеты такого содержания:
ACK, ISSa+1, ACK (ISSb+1), DATA
Закрытие соединения:
Закрытие полнодуплексного соединения является предметом множества интерпретаций, так как, неочевидно, как интерпретировать в соединении сторону, получающую информацию. Клиент, находящийся в состоянии закрытия соединения может получать информацию до тех пор, пока партнер (передающая сторона), не сообщит, что переходит в состояние закрытия соединения. В этом случае модуль ТСР гарантированно получит все буферы с информацией до того, как соединение было закрыто. Поэтому клиенту, не ждущему информацию с соединения, следует ожидать сообщения об успешном закрытии этого соединения.
Это означает, что все данные, получены модулем ТСР, принимающим информацию.
Особое значение имеют 3 случая:
Клиент инициирует закрытие соединения, дав команду своему модулю ТСР.
В этом случае создается пакет с флагом FIN, и помещается в очередь пакетов, ожидающих отправления. После этого модуль ТСР уже не будет принимать данных от своего клиента, но может передавать полученные из сети данные. Все пакеты, стоящие в очереди на отправку, будут в случае необходимости отправляться повторно до тех пор, пока не получат своего подтверждения. Когда модуль ТСР другой стороны подтвердит получение пакета с флагом FIN, и сама отправит аналогичный пакет, местная программа может подтвердить его получение.
Заметим, что модуль ТСР, получающий пакет с флагом FIN, будет подтверждать его, но не отправит свой пакет с аналогичным флагом до тех пор, пока его клиент не закроет соединение.
Закрытие соединения начинается с того, что получен пакет с флагом FIN.
Если из сети приходит невостребованный пакет с флагом FIN, то принимающий его модуль может подтвердить получение такого пакета и оповестить своего клиента об этом. После этого клиент может ответить командой на закрытие соединения.
Оба клиента одновременно дают команду на закрытие соединения.
Приводит к обменами пакетами с флагом FIN. Как только их получение будет подтверждено, их соединение ликвидируется.
