Прежде чем мы сможем обсудить многие детали действия TCP протокола, нам необходимо ввести подробную терминологию. Для поддержания TCP соединения необходимо иметь несколько переменных. Мы решили, что эти переменные будут помещены в соответствующую запись - блок управления передачей (Transmission Control Block - TCB). Среди переменных блока TCB имеются номера местного и чужого сокетов, флаги безопасности и приоритета для данного соединения, указатели буферов посылки и получения, указатели текущего сегмента и очереди повторной посылки. Кроме всего этого в TCB имеются несколько переменных, имеющих отношение к номерам очередей отправителя и получателя.
SND.UNA | посылка неподтверждена |
---|---|
SND.NXT | послать следующий сегмент |
SND.WND | отправить окно |
SND.UP | отправить срочный указатель |
SND.WL1 | номер очереди сегмента, использованный для обновления последнего окна |
SND.WL2 | номер подтверждения в сегменте, используемый для обновления последнего окна |
ISS | первоначальный номер очереди отправления |
RCV.NXT | - получить следующий сегмент |
---|---|
RCV.WND | - получить окно |
RCV.UP | - получить срочный указатель |
IRS | - первоначальный номер очереди получения |
Нижеприведенные диаграммы могут помочь связать некоторые из этих переменных с местом в очереди
Очередь отправления
Окно отправления - это участок очереди, отмеченный меткой 3 на рисунке 2.
Очередь получения
Окно получения - это участок очереди, отмеченный меткой 2 на рисунке 3.
В обсуждении также часто используются некоторые переменные, берущие свое значение из полей очередного сегмента.
Переменные для очередного сегмента
SEG.SEQ | номер очереди для сегмента |
---|---|
SEG.ACK | номер подтверждения для сегмента |
SEG.LEN | длина сегмента |
SEG.WND | окно для сегмента |
SEG.UP | срочный указатель для сегмента |
SEG.PRC | приоритет для сегмента |
Соединение во время функционирования проходит через серии промежуточных состояний. Это состояния LISTEN, SYN-SENT, SYN-RECEIVED, ESTABLISHED, FIN-WAIT-1, FIN-WAIT-2, CLOSE-WAIT, CLOSING, LAST-ACK, TIME-WAIT, а также фиктивное состояние CLOSED. Состояние CLOSED является фиктивным, поскольку оно представляет состояние, когда не существует блока TCP, а потому и нет соединения. Краткое описание состояний:
LISTEN | Ожидание запроса на соединение со стороны чужих портов и программ TCP |
---|---|
SYN-SENT | Ожидание парного запроса на установление соединения. С нашей стороны запрос уже сделан. |
SYN-RECEIVED | Ожидание подтверждения после того, как запрос соединения уже принят и отправлен. |
ESTABLISHED | Состояние открытого соединения, принимаемые данные можно представить пользователю. Это нормальное состояние соединения в фазе передачи данных. |
FIN-WAIT-1 | Ожидание запроса от чужой программы TCP, или подтверждения ранее отправленного запроса на закрытие соединения. |
FIN-WAIT-2 | Ожидание запроса на закрытие соединения со стороны чужой программы TCP. |
CLOSE-WAIT | Ожидание запроса на закрытие соединения со стороны своего клиента. |
CLOSING | Ожидание подтверждения со стороны чужой программы TCP запроса о закрытии соединения. |
LAST-ACK | Ожидание запроса на закрытие соединения, ранее отправленного чужой программе TCP (запрос включал также подтверждение получения чужого запроса на закрытие соединения). |
TIME-WAIT | Ожидание когда истечет достаточное количество времени и можно быть уверенным, что чужая программа TCP получила подтверждение своего запроса на закрытие соединения. |
CLOSED | Состояние полного отсутствия соединения. |
Соединение TCP переходит с одного состояния на другое в ответ на события. Событие - это запросы клиента (открытие, посылка, получение, закрытие, отказ, получение состояния соединения), приход сегментов, и особенно тех, которые содержат флаги SYN, ACK, RST и FIN, а также истечение выделенного времени.
Диаграмма состояний на рисунке иллюстрирует лишь смену состояний, а также вызвавшие это события, производимые действия, но не адреса, условия ошибок, не действия, не связанные прямо с изменением состояния.
Замечание. Данная диаграмма является лишь сводной, но не должна восприниматься как полная спецификация.