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


Хостел77. Обратите внимание на наше общежитие со всеми удобствами дзержинский. Бронь онлайн.





 

Закрытие соединения

   Состояние CLOSED означает "я не имею данных для передачи". Конеч- 
но, закрытие полнодуплексного соединения является предметом множества 
интерпретаций, поскольку не очевидно, как интерпретировать в соедине- 
нии сторону, получающую информацию. Мы решили интерпретировать CLOSE 
в упрощенной манере. Клиент, находящийся в состоянии CLOSE, может все 
еще получать информацию (RECEIVE) до тех пор, пока партнер тоже не 
сообщит, что переходит в состояние CLOSE. Таким образом, клиент может 
изящно завершить работу на своем конце соединения. Программа протоко- 
ла TCP гарантированно получит все буферы с информацией, отправленные 
до того, как соединение было закрыто. Поэтому клиенту, не ждущему 
информации с соединения, следует лишь ждать сообщения об успешном 
закрытии этого соединения, что означает, что все данные получены про- 
граммой TCP, принимающей информацию. Клиенты должны сохранять уже 
закрытые ими для чтения информации соединения до тех пор, пока про- 
грамма протокола TCP не сообщит им, что такой информации больше нет.
   Особое значение имеют три случая:
1) клиент инициирует закрытие соединения, дав команду своей программе 
   протокола TCP.
2) закрытие соединения начинается с того, что напарник посылает сюда 
   управляющий сигнал FIN.
3) оба клиента дают команду на закрытие одновременно.
Случай 1  Местный клиент инициирует закрытие
      В этом случае создается сегмент с сигналом FIN и помещается в 
   очередь сегментов, ждущих отправления. После этого программа TCP 
   уже не будет принимать от этого клиента каких-либо команд на от- 
   правление данных по закрытому соединению, а сама переходит в со- 
   стояние FIN-WAIT-1. Тем не менее, в этом состоянии еще возможно 
   получение клиентом данных с этого соединения. Все сегменты, стоя- 
   щие в очереди, и сам сегмент с сигналом FIN будут в случае необхо- 
   димости посылаться напарнику вновь и вновь, пока не получат своего 
   подтверждения. Когда программа TCP партнера подтвердит получение 
   сигнала FIN, и сама отправит сюда свой сигнал FIN,  местная про- 
   грамма может подтвердить получение последнего. Заметим, что про- 
   грамма TCP, получающая сигнал FIN, будет подтверждать его, но не 
   будет посылать своего собственного сигнала FIN до тех пор, пока ее 
   клиент тоже не закроет соединения.
Случай 2  Программа TCP получает из сети сигнал FIN.
      Если из сети приходит невостребованный сигнал FIN, то принимаю- 
   щая его программа TCP может подтвердить получение такого сигнала и 
   оповестить своего клиента о том, что соединение закрыто. Клиент 
   ответит командой CLOSE, по которой программа TCP может после пере- 
   сылки оставшихся данных послать партнеру сигнал FIN. После этого 
   программа TCP ждет, пока не прийдет подтверждение на отправленный 
   ею сигнал FIN, после чего она ликвидирует соединение. Если под- 
   тверждения не было по истечении отведенного времени, то соединение 
   ликвидируется в принудительном порядке, о чем дается сообщение 
   клиенту.
Случай 3  Оба клиента закрывают соединение одновременно.
      Одновременное закрытие соединения клиентами на обоих концах 
   приводит к обмену сегментами с сигналом FIN. Когда все сегменты, 
   стоящие в очереди перед сегментом с FIN, будут переданы и получат 
   подтверждение, каждая программа TCP может послать подтверждение на 
   полученный ею сигнал FIN. Обе программы по получении этих под- 
   тверждений будут ликвидировать соединение. 
   TCP A                                                      TCP B
1.ESTABLISHED                                            ESTABLISHED
2.(Close)
  FIN-WAIT-1  --> <SEQ=100><ACK=300><CTL=FIN,ACK>  -->  CLOSE-WAIT
3.FIN-WAIT-2  <-- <SEQ=300><ACK=101><CTL=ACK>      <--  CLOSE-WAIT
4.                                                        (Close)
  TIME-WAIT   <-- <SEQ=300><ACK=101><CTL=FIN,ACK>  <--  LAST-ACK
5.TIME-WAIT   --> <SEQ=101><ACK=301><CTL=ACK>      -->  CLOSED
6. (2 MSL)
  CLOSED
                    Нормальная процедура закрытия                    
                              Рисунок 13                             

   TCP A                                                      TCP B
1.ESTABLISHED                                            ESTABLISHED
2.(Close)                                                    (Close)
  FIN-WAIT-1  --> <SEQ=100><ACK=300><CTL=FIN,ACK>  ...   FIN-WAIT-1
              <-- <SEQ=300><ACK=100><CTL=FIN,ACK>    <-- 
              ... <SEQ=100><ACK=300><CTL=FIN,ACK>    --> 
3.CLOSING     --> <SEQ=101><ACK=301><CTL=ACK>        ... CLOSING
              <-- <SEQ=301><ACK=101><CTL=ACK>        <--
              ... <SEQ=101><ACK=301><CTL=ACK>        -->
4.TIME-WAIT                                              TIME-WAIT
  (2 MSL)                                                  (2 MSL)
  CLOSED                                                    CLOSED
     Процедура одновременного закрытия соединения с обоих концов     
                              Рисунок 14                             
Назад       Содержание       Вперёд