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

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.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг:

Закрытие файла

Из книги автора

Закрытие файла Для закрытия объектов любого типа, объявления недействительными их дескрипторов и освобождения системных ресурсов почти во всех случаях используется одна и та же универсальная функция. Исключения из этого правила будут оговариваться отдельно. Закрытие


11.2.2. Закрытие файлов

Из книги автора

11.2.2. Закрытие файлов Одной из операций, которые одинаковы для файлов всех типов, является закрытие файла. Ниже показано, как закрыть файл.#include <unistd.h>int close(int fd);Очевидно, что это базовая операция. Однако есть один важный момент, касающийся закрытия файлов, о котором


Закрытие файла

Из книги автора

Закрытие файла fcloseЗакрывает файл, открытый предварительно функцией fopen().Синтаксис:int fclose(int $fp)Возвращает false, если файл закрыть не удалось (например, что-то с ним случилось или же разорвалась связь с удаленным хостом). В противном случае возвращает значение "истина".Всегда


5.12.4 Закрытие каналов

Из книги автора

5.12.4 Закрытие каналов При закрытии канала процесс выполняет ту же самую процедуру, что и при закрытии обычного файла, за исключением того, что ядро, прежде чем освободить индекс канала, выполняет специальную обработку. Оно уменьшает количество процессов чтения из канала


12. Закрытие продаж

Из книги автора

12. Закрытие продаж Как только 36 часов истекли, вешаем на сайт сообщение: «Регистрация закончена». Вот что вы пропустили. Можно сказать, вам не повезло. Рассказываем о бонусах, про которые в тексте рекламы не говорили – чтобы для людей, которые не успели, это стало уроком. Вы


Б.1.2. Закрытие файла

Из книги автора

Б.1.2. Закрытие файла По окончании работы с файлом его следует закрыть с помощью функции close(). В ряде случаев, например в программе, показанной в листинге Б.1, нет необходимости вызывать данную функцию явно, так как ОС Linux автоматически закрывает все открытые файлы по


Закрытие потоков

Из книги автора

Закрытие потоков Функции fclose и fcloseall закрывают поток или потоки. Функция fclose закрывает один заданный поток, fcloseall — все потоки, кроме потоков stdin, stdout, stderr, stdaux, stdprn.Если программа не выполняет закрытия потоков, потоки автоматически закрываются, когда программа завершается


Закрытие файлов

Из книги автора

Закрытие файлов Функция close закрывает открытые файлы. Открытые файлы также автоматически закрываются при неаварийном завершении


Закрытие процесса

Из книги автора

Закрытие процесса Чтобы закрыть процесс, используется метод Kill, код которого приведен в листинге 7.29.Листинг 7.29public void Kill() { IntPtr hProcess; hProcess = OpenProcess(PROCESS_TERMINATE, false, (int) processId); if (hProcess != (IntPtr) INVALID_HANDLE_VALUE) {  bool bRet;  bRet = TerminateProcess(hProcess, 0);  CloseHandle(hProcess); }}Данный метод также использует


Закрытие файлов

Из книги автора

Закрытие файлов После того, как вы поработали с файлом, его надо закрыть. Класс CFile имеет для этого специальный метод Close:virtual void Close() throw(CFileException);Метод закрывает файл. Если вы создали объект класса CFile и открыли файл, а затем объект удаляется, то связанный с ним файл


Закрытие PGP диска.

Из книги автора

Закрытие PGP диска. Закройте все программы и файлы, имеющиеся на диске PGP, т.к. невозможно закрыть диск, если файлы на этом диске до сих пор еще открыты. Теперь зайдите в мой компьютер выделите мышкой диск PGP, нажмите на правую кнопку мышки и выберите команду <unmount> в


Закрытие окна

Из книги автора

Закрытие окна При работе экран постепенно загромождается открытыми окнами программ. При этом становится трудно разобраться в них. Поэтому когда вы заканчиваете работу с программой, то окно с ней стоит закрыть.При нажатии на кнопку Закрытие окна окно исчезает из поля