![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Закрытие соединения
Нормальное завершение соединения выполняется с помощью той же процедуры тройного рукопожатия, что и при открытии соединения. Каждая из сторон может начать закрытие соединения по следующему сценарию: 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.
|