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

We use cookies. Read the Privacy and Cookie Policy

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

Нормальное завершение соединения выполняется с помощью той же процедуры тройного рукопожатия, что и при открытии соединения. Каждая из сторон может начать закрытие соединения по следующему сценарию:

A: "Я закончил работу. Данных для пересылки больше нет".

B: "Хорошо".

В: "Я тоже завершил работу".

A: "Хорошо".

Допустим и такой сценарий (хотя он используется крайне редко):

A: "Я закончил работу. Данных для пересылки больше нет".

В: "Хорошо. Однако есть какие-то данные…"

В: "Я тоже завершил работу".

A: "Хорошо".

В рассмотренном ниже примере соединение закрывает сервер, как это часто происходит для связей клиент/сервер. В данном случае после ввода пользователем в сеансе telnet команды logout (выйти из системы) сервер инициирует запрос на закрытие соединения. В ситуации, показанной на рис. 10.11, выполняются следующие действия:

1. Приложение на сервере указывает TCP на закрытие соединения.

2. TCP сервера посылает заключительный сегмент (Final Segment — FIN), информируя своего партнера о том, что данных для отправки больше нет.

3. TCP клиента посылает ACK в сегменте FIN.

4. TCP клиента сообщает своему приложению, что сервер хочет закрыть соединение.

5. Клиентское приложение сообщает своему TCP о закрытии соединения.

6. TCP клиента посылает сообщение FIN.

7. TCP сервера получает FIN от клиента и отвечает на него сообщением ACK.

8. TCP сервера указывает своему приложению на закрытие соединения.

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

Обе стороны могут одновременно начать закрытие. В этом случае обычное закрытие соединения завершается после отправки каждым из партнеров сообщения ACK.