On-Line Библиотека www.XServer.ru - учебники, книги, статьи, документация, нормативная литература.
       Главная         В избранное         Контакты        Карта сайта   
    Навигация XServer.ru








 

Терминология

   Прежде чем мы сможем обсудить многие детали действия 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     - первоначальный номер очереди получения

   Нижеприведенные диаграммы могут помочь связать некоторые из этих 
переменных с местом в очереди

Очередь отправления
         1          2          3          4
    ----------|----------|----------|----------
           SND.UNA    SND.NXT    SND.UNA
                                +SND.WND
1. - старые номера очереди, которые получили подтверждение
2. - номера очереди для данных, не получивших подтверждения
3. - номера очереди, допущенные к новой передаче
4. - следующие номера очереди, чья передача еще не разрешена
                      Рис. 4 Очередь отправления                     
Окно отправления - это участок очереди, отмеченный меткой 3 на 
рисунке 4.

Очередь получения
         1          2          3
    ----------|----------|----------
           RCV.NXT    RCV.NXT
                     +RCV.WND
1. - старые номера очереди, которые получили подтверждение
2. - номера очереди, допущенные к очередному этапу получения
3. - следующие номера очереди, еще не получившие разрешения
                       Рис. 5 Очередь получения                      
Окно получения - это участок очереди, отмеченный меткой 2 на рисунке 
5.
   В обсуждении также часто используются некоторые переменные, 
берущие свое значение из полей очередного сегмента.
Переменные для очередного сегмента
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, а также ис- 
течение выделенного времени.
Диаграмма состояний на рисунке 6 иллюстрирует лишь смену состояний, а 
также вызвавшие это события, производимые действия, но не адреса, ус- 
ловия ошибок, не действия, не связанные прямо с изменением состояния. 
Более подробные сведения о действиях программы протокола TCP в ответ 
на события приведены в последней главе.
Замечание. Данная диаграмма является лишь сводной, но не должна 
восприниматься как полная спецификация.
.
                                           Активное открытие
                                        -------------------------
                                        создание TCB, посылка SYN
                              +--------+ -----------------
                              | CLOSED |                  \          
                              +--------+<---------------   \
                                |    ^                   \  \
             Пассивное открытие |    |     CLOSE          \  \
             ------------------ |    | --------------      \  \
               создание TCB     |    | ликвидация TCB       \  \
                                V    |                       \  \
                              +--------+          CLOSE       \  \
                              | LISTEN |      --------------  |  |
                              +--------+      ликвидация TCB  |  |
               получение SYN    |    |      SEND              |  |
             ----------------   |    |   -----------          |  V
+--------+   посылка SYN, ACK  /      \  посылка SYN    +----------+
|        |<-------------------          --------------->|          |
|  SYN   |                  получение SYN               |          |
|  RCVD  |<---------------------------------------------| SYN SENT |
|        |                   посылка ACK                |          |
|        |---------------------        -----------------|          |
+--------+                     \      /                 +----------+
  |    получение ACK для SYN    |    |  получение SYN, ACK
  |    ---------------------    |    |  ------------------
  |             x               V    V      посылка ACK
  |                           +--------+
  |    CLOSE                  | ESTAB  |
  | -----------               +--------+
  | послать FIN   CLOSE         |    |   получить FIN
  V            -----------      |    |   ------------
+--------+     послать FIN     /      \   послать ACK     +--------+
|  FIN   |<-------------------          ----------------->|  CLOSE |
| WAIT-1 |---------------------                           |  WAIT  |
+--------+                     \  получить FIN            +--------+
  | получить ACK для FIN        | -------------       CLOSE     |
  | --------------------        | отправить ACK    -----------  |
  V          x                  V                  послать FIN  V
+--------+                    +--------+                  +--------+
|  FIN   |                    | CLOSING|                  |LAST-ACK|
| WAIT-2 |                    +--------+                  +--------+
+--------+   Получить ACK для FIN |        Получить ACK для FIN |
  |          -------------------- |        -------------------- |
  |  получить FIN      x          V                  x          |
  |  ------------             +--------+                        V
   \ послать ACK              |  TIME  |                  +--------+
     ------------------------>|  WAIT  |----------------->| CLOSED |
                              +--------+   Timeout=2MSL   +--------+
                                          --------------
                                          ликвидация TCB
Назад       Содержание       Вперёд