Завершение соединения TCP
Завершение соединения TCP
В то время как для установления соединения необходимо три сегмента, для его завершения требуется четыре сегмента.
1. Одно из приложений первым вызывает функцию close, и мы в этом случае говорим, что конечная точка TCP выполняет активное закрытие (active close). TCP этого узла отправляет сегмент FIN, обозначающий прекращение передачи данных.
2. Другой узел, получающий сегмент FIN, выполняет пассивное закрытие (passive close). Полученный сегмент FIN подтверждается TCP. Получение сегмента FIN также передается приложению как признак конца файла (после любых данных, которые уже стоят в очереди, ожидая приема приложением), поскольку получение приложением сегмента FIN означает, что оно уже не получит никаких дополнительных данных по этому соединению.
3. Через некоторое время после того как приложение получило признак конца файла, оно вызывает функцию close для закрытия своего сокета. При этом его TCP отправляет сегмент FIN.
4. TCP системы, получающей окончательный сегмент FIN (то есть того узла, на котором произошло активное закрытие), подтверждает получение сегмента FIN.
Поскольку сегменты FIN и ACK передаются в обоих направлениях, обычно требуется четыре сегмента. Мы используем слово «обычно», поскольку в ряде сценариев сегмент FIN на первом шаге отправляется вместе с данными. Кроме того, сегменты, отправляемые на шаге 2 и 3, исходят с узла, выполняющего пассивное закрытие, и могут быть объединены. Соответствующие пакеты изображены на рис. 2.3.
Рис. 2.3. Обмен пакетами при завершении соединения TCP
Сегмент FIN занимает 1 байт пространства порядковых номеров аналогично SYN. Следовательно, сегмент ACK каждого сегмента FIN — это порядковый номер FIN плюс один.
Возможно, что между шагами 2 и 3 какие-то данные будут переданы от узла, выполняющего пассивное закрытие, к узлу, выполняющему активное закрытие. Это состояние называется частичным закрытием (half-close), и мы рассмотрим его во всех подробностях вместе с функцией shutdown в разделе 6.6.
Отправка каждого сегмента FIN происходит при закрытии сокета. Мы говорили, что для этого приложение вызывает функцию close, но нужно понимать, что когда процесс Unix прерывается либо произвольно (при вызове функции exit или при возврате из функции main), либо непроизвольно (при получении сигнала, прерывающего процесс), все его открытые дескрипторы закрываются, что также вызывает отправку сегмента FIN любому соединению TCP, которое все еще открыто.
Хотя на рис. 2.3 мы продемонстрировали, что активное закрытие выполняет клиент, на практике активное закрытие может выполнять любой узел: и клиент, и сервер. Часто активное закрытие выполняет клиент, но с некоторыми протоколами (особенно HTTP) активное закрытие выполняет сервер.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
Завершение сеанса
Завершение сеанса В нижней части правого столбца меню Пуск располагаются кнопки, отвечающие за завершение сеанса работы Windows и выключение компьютера. В Windows Vista кнопка Питание в меню Пуск выполняет совершенно иную функцию, нежели в Windows XP: она не выключает компьютер, а
2.6. Установление и завершение соединения TCP
2.6. Установление и завершение соединения TCP Чтобы облегчить понимание функций connect, accept и close и чтобы нам было легче отлаживать приложения TCP с помощью программы netstat, мы должны понимать, как устанавливаются и завершаются соединения TCP. Мы также должны понимать диаграмму
Завершение ассоциации
Завершение ассоциации В отличие от TCP, SCRIPT не имеет состояния, соответствующего частично закрытой ассоциации. Когда один узел закрывает ассоциацию, второй узел должен перестать отправлять новые данные. Получатель запроса на закрытие ассоциации отправляет те данные,
5.7. Нормальное завершение
5.7. Нормальное завершение На этом этапе соединение установлено, и все, что бы мы ни вводили на стороне клиента, отражается обратно.linux % tcpcli01 127.0.0.1 эту строку мы показывали раньшеhello, world наш вводhello, world отраженная сервером строкаgood byegood bye^D Ctrl+D - наш завершающий символ для
2.5. Завершение установки
2.5. Завершение установки После завершения копирования файлов на диск нужно разобраться еще с несколькими настройками. Во-первых, система должна знать, как вы ее будете загружать. Если Windows без разговоров прописывает загрузку в MBR (Master Boot Record, основная загрузочная запись),
10.6.1 Внезапное завершение
10.6.1 Внезапное завершение Каждая из сторон может запросить внезапное завершение (abrupt close) соединения. Это допустимо, когда приложение желает завершить соединение или когда TCP обнаруживает серьезную коммуникационную проблему, которую не может разрешить собственными
10.11 Завершение сеанса
10.11 Завершение сеанса 10.11.1 Тайм-аут Работа партнера по соединению может завершиться крахом либо полностью прерваться вследствие неисправности шлюза или связи. Чтобы предотвратить повторную пересылку данных в TCP, существует несколько механизмов.Достигнув первого
Завершение работы
Завершение работы Выключить компьютер можно двумя способами• Используя команду Завершение работы меню кнопки Пуск• Открывая окно Завершение работы программы нажатием кнопок ctrl+alt+del и нажимая кнопку Завершить работуWindows позволяет запретить выключение этими способами
Завершение
Завершение Наконец-то, в этой главе мы узнали как работать с переменными (и литералами) различных типов. Как вы можете видеть, это не было слишком сложно. Фактически, в каком-то отношении большая часть кода выглядит даже еще проще, чем это было в более ранних программах.
2.5. Завершение сеанса
2.5. Завершение сеанса Наверное, для первого раза – более чем достаточно. Компьютер пора выключать.Для этого в меню Пуск предусмотрено две кнопки: Питание и Блокировка.Первая — – не выключает компьютер, а переводит его в специальный «ждущий» режим. Попросту говоря,
В завершение
В завершение Тестированию, которое мы знаем и любим, приходит конец. Кого-то эта новость огорчит. Тем, чья карьера зависит от текущей схемы работы, придется намного сложнее. Так или иначе, разработка программного обеспечения фундаментально изменилась с приходом гибких
Завершение цикла while
Завершение цикла while Мы подошли к самому существенному моменту рассмотрения циклов while. При построении цикла while вы должны включить в него какие-то конструкции, изменяющие величину проверяемого выражения так, чтобы в конце концов оно стало ложным. В противном случае
3.4. Завершение процесса
3.4. Завершение процесса Обычно процесс завершается одним из двух способов: либо выполняющаяся программа вызывает функцию exit(), либо функция main() заканчивается. У каждого процесса есть код завершения — число, возвращаемое родительскому процессу. Этот код передается в
Завершение транзакций
Завершение транзакций Транзакция завершается, когда клиентское приложение подтверждает ее или отменяет. Если оператор COMMIT или вызов эквивалентной функции API isc_commit_ transaction не будут успешными, то транзакция не будет подтверждена. Если транзакция, которая не может быть
Завершение
Завершение Если все списки САС проанализированы, а переменная состояния маски причины не показывает, что все причины аннулирования проверены, то переменная состояния статуса сертификата принимает значение "не определен". Большинство приложений будет реагировать на