Логические соединения
Логические соединения – это основа надёжности TCP. Основным отличием TCP от UDP является то, что на протокол TCP возложена задача обеспечения надёжной доставки сообщения, используя в качестве основы ненадёжный дейтаграммный протокол IP. Для решения этой задачи протокол TCP использует метод продвижения данных с установлением логического соединения, которое даёт возможность участникам соединения (или участникам обмена) следить за тем, чтобы данные не были потеряны, искажены, продублированы, а также чтобы они пришли к получателю в том порядке, в котором были отправлены.
Протокол TCP устанавливает логические соединения между прикладными процессами, причём в каждом соединении участвуют только 2 процесса. TCP соединение является дуплексным, т.е. каждый из участников соединения может одновременно получать и отправлять данные.
При установлении логического соединения модули TCP договариваются между собой о параметрах процедуры обмена данными.
В протоколе TCP каждая сторона соединения посылает противоположной следующие параметры:
1) Максимальный размер сегмента, который она готова принимать
2) Максимальный объём данных (возможно несколько сегментов), которые она разрешает другой стороне передавать в свою сторону, даже если там ещё не получила квитанцию на предыдущую порцию данных (размер окна)
3) Начальный порядковый номер байта, с которого она начинает отсчёт потока данных в рамках данного соединения.
В результате переговорного процесса модулей TCP с двух сторон соединения определяются параметры соединения, одни из них остаются постоянными в течение всего сеанса связи, а другие адаптивно изменяются, например, в зависимости от загрузки буфера принимающей стороной, а также от надёжности работы сети динамически изменяется размер окна отправителя.
Соединение устанавливается по инициативе клиентской части приложения. При необходимости выполнить обмен данными с серверной частью приложение-клиент обращается к нижележащему протоколу TCP, который в ответ на это обращение посылает сегмент-запрос на установление соединения протокола TCP, работающему на стороне серверов. Флаг SYN установлен в 1. Получив запрос модуль TCP на стороне сервера пытается создать инфраструктуру для обслуживания нового клиента, он обращается к операционной системе с просьбой о выделении определённых системных ресурсов для организации буферов, таймеров, счётчиков. Эти ресурсы закрепляются за соединением с момента создания и до момента разрыва. Если на стороне сервера все необходимые ресурсы были получены и все необходимые действия выполнены, то модуль TCP посылает клиенту сегмент с флагами ACK и SYN. В ответ клиент посылает сегмент с флагом ACK и переходит в состояние установленного логического соединения. Когда сервер получает флаг ACK, то он переходит в то же состояние. На этом процедура установления соединения заканчивается, и стороны переходят к обмену данными. Соединение может быть разорвано в любой момент по инициативе любой стороны (для этого клиент и сервер обмениваются сегментами ACK и FIN). Соединение считается завершённым тогда, когда сторона – инициатор получает подтверждение, что завершающий сигнал ACK дошёл нормально и не вызвал никаких аварийных сообщений со стороны сервера. Логическое TCP соединение однозначно идентифицируется парой сокетов, определённых для этого соединения двумя взаимодействующими процессами.
Сокет одновременно может участвовать в нескольких соединениях. Пусть некоторый поставщик услуг оказывает услугу по веб-хостингу, т.е. на его сервере клиенты могут разворачивать свои веб-серверы. Веб-сервер основан на протоколе прикладного уровня HTTP, который передаёт свои сообщения в TCP сегментах. Модуль TCP ожидает запросы от веб-клиентов, которые поступают на порт 80. Пользователь браузером обращается одновременно к 2-м серверам. Наличие отдельных соединений для работы с каждым из этих серверов обеспечивает надёжную доставку и разделение информационных потоков, т.е. когда к этим серверам обратится ещё 1 клиент – их логические соединения будут изолированы (потому что в адресе запроса будет стоять не только номер порта, но и другой IP адрес).
Количество буферов на сервере (имеется в виду сервер поставщика услуг) определяется не числом веб-серверов и не числом клиентов, а числом логических соединений. Сообщения в буферы направляются в зависимости от значений сокетов как отправителя, так и получателя, т.е. протокол TCP осуществляет демультиплексирование информации, поступающей на прикладной уровень, на основе соединений процессов, т.е. на основе идентифицирующих эти процессы пар сокетов.
Дата добавления: 2015-11-28; просмотров: 2249;