Настройка сетей Microsoft дома и в офисе. Учебный курс
Шрифт:
Две взаимодействующие программы могут корректно завершить сеанс соединения, используя процедуру закрытия. Для этого используется модифицированный метод трехстороннего квитирования. Необходимо помнить, что ТСР-соеди-нение является дуплексным. Поэтому его можно использовать для передачи двух независимых потоков данных в противоположных направлениях. Получив от приложения сообщение о том, что все данные переданы, экземпляр протокола TCP закрывает соединение со своей стороны. Прежде чем закрыть половину соединения, экземпляр протокола
Закрыв соединение в требуемом направлении, экземпляр протокола TCP отвергает все попытки приложения передать данные в этом направлении. Тем не менее, в противоположном направлении данные могут передаваться до тех пор, пока отправитель не закроет вторую половину соединения. Естественно, даже после закрытия первой половины соединения по ней все равно будут передаваться отправителю сигналы подтверждения приема. После закрытия соединения в обоих направлениях экземпляры протокола TCP, выполняемые на компьютерах отправителя и получателя, удаляют из своих системных таблиц записи, относящиеся к данному соединению.
На самом деле процесс закрытия соединения выглядит немного сложнее, чем описано ранее. В этом случае протоколом TCP применяется модифицированный метод трехстороннего квитирования связи.
После получения первого FIN-сегмента второй FIN-сегмент посылается компьютеру-отправителю не сразу, в отличие от SYN-сегмента. Отправителю посылается сигнал подтверждения приема первого FIN-сегмента, после чего выполняемое на компьютере получателя приложение уведомляется о получении запроса на закрытие соединения. От момента уведомления приложения до получения отклика может пройти достаточно много времени. Отправка сигнала подтверждения приема первого FIN-сегмента позволяет исключить повторную передачу этого сегмента отправителем по истечении тайм-аута. Получив от приложения, выполняемого на компьютере получателя, команду на закрытие соединения, экземпляр протокола TCP отошлет отправителю второй FIN-сегмент, при этом отправитель должен прислать уведомление о получении этого сегмента (третий АСК-сегмент).
Обычно после завершения передачи данных приложение закрывает соединение с помощью специальной команды. Поэтому данную операцию следует рассматривать как неотъемлемую часть нормального функционирования системы по аналогии с операцией закрытия обычного файла. Однако иногда обстоятельства могут сложиться так, что прикладная программа или сетевое программное обеспечение вынуждены разорвать соединение досрочно. Поэтому в протоколе TCP предусмотрены средства обработки подобных ситуаций, которые реализуют сброс соединения.
Для сброса соединения одна из сторон должна инициировать процесс досрочного прекращения передачи данных при помощи отправки сегмента, у которого полю RST присвоена единица. Получив подобный запрос, другая сторона должна немедленно разорвать соединение. При этом о поступившем запросе на сброс соединения экземпляр протокола TCP также уведомляет приложение. Таким образом, операция сброса соединения приводит к немедленному прекращению передачи данных в обоих направлениях и освобождению всех занятых ресурсов, например к очистке буферов памяти.
Ранее уже упоминалось о том, что протоколе TCP разбиение потока данных на сегменты происходит без учета объема данных, переданных экземпляру протокола приложением. Разработчики руководствовались соображениями требуемой эффективности. Благодаря этому экземпляр протокола может накапливать во внутреннем буфере памяти необходимое для эффективной передачи количество данных, что позволяет снизить накладные расходы при передаче по сети сегментов данных небольшого размера.
Хотя благодаря буферизации существенно повышается пропускная способность сети, она может негативно сказаться на функционировании некоторых приложений. Можно рассмотреть процесс передачи символов с клавиатуры терминала на удаленный компьютер с применением заранее установленного ТСР-соединения. Понятно, что пользователю вряд ли понравится замедленная реакция компьютера в ответ на нажатие клавиш. Но если экземпляр протокола TCP перед отправкой символов помещает их в буфер, удаленный компьютер будет реагировать на каждое нажатие клавиши с большой задержкой. Вполне возможно, что удаленный компьютер отреагирует только после нажатия нескольких сотен клавиш, причем на все одновременно. Точно так же экземпляр протокола TCP, выполняемый на компьютере-получателе, реализует буферизацию полученных по сети данных, прежде чем передать их приложению.
Очевидно, что для своевременной доставки данных приложению нельзя просто вынудить отправителя переслать их по сети. Для обеспечения приемлемой работы интерактивных программ протокол TCP предусматривает специальную команду принудительной отсылки данных – push. Именно эта команда применяется для незамедлительной передачи байтов данных, помещенных в выходной поток данных. Во время выполнения этой команды полю PSH присваивается единица. Это гарантирует, что данные будут переданы без задержки приложению, которое выполняется на компьютере-получателе.
А теперь следует рассмотреть стандартные номера портов, используемые протоколом TCP.