Назад | Содержание | Вперед

Идеология протокола tcp

Элементы системы объединенных сетей

Среда объединенных сетей состоит из хост-компьютеров, включенных в сети, которые в свою очередь соединятся друг с другом через шлюзы.

Здесь предполагается, что компьютерные сети могут быть либо локальными (например, ETHERNET), либо большими сетями (например ARPANET), но в любом случае они основываются на технологии коммутации пакетов. Реальными агентами, создающими и потребляющими сообщения, циркулирующие в сети, являются процессы. Протоколы различных уровней в сетях, на шлюзах и на хост-компьютерах поддерживают систему коммуникаций между процессами, которая обеспечивает двунаправленный поток данных по логическим соединениям между портами процессов.

Термин пакет используется здесь в общем случае для обозначения порции данных, участвующей в отдельном элементарном акте взаимодействия между сетью и соединенным с ней хост-компьютером. В общем случае нас не будет касаться формат блоков данных, циркулирующих в сети.

С точки зрения коммуникационных сетей, хост-компьютеры - это компьютеры, связанные с сетью и являющиеся отправителями и получателями пакетов. Процессы рассматриваются как активные элементы на хост- компьютерах (согласно наиболее общему определению процессов как исполняющихся программ). Предполагается, что даже терминалы, файлы и другие устройства ввода-вывода взаимодействуют друг с другом посредством процессов. Таким образом, любые коммуникации рассматриваются как коммуникации между процессами.

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

Модель действия

Процесс пересылает данные, вызывая программу протокола TCP и передавая ей в качестве аргументов буферы с данными. Протокол TCP пакует данные из этих буферов в сегменты, а затем вызывает модуль Internet для передачи каждого сегмента на программу протокола TCP, являющуюся адресатом. Этот адресат в свою очередь помещает данные из сегмента в буферы получателя и затем оповещает своего клиента о прибытии предназначенных ему данных. Программы протокола TCP помещают в сегменты контрольную информацию, которая затем используется ими для проверки очередности передачи данных.

Модель Internet коммуникаций состоит в том, что с каждой программой протокола TCP связан модуль протокола Internet, обеспечивающий ей интерфейс с локальной сетью. Данный модуль Internet помещает сегменты TCP в Internet датаграммы, а затем направляет их на другой Internet модуль или же промежуточный шлюз. Для передачи датаграммы по локальной сети она в свою очередь помещается в пакет соответствующего типа.

Коммутаторы пакетов могут осуществлять дальнейшую упаковку, фрагментацию или другие операции с тем, чтобы в локальной сети осуществить передачу пакетов по назначению на модуль Internet.

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

Шлюз имеет возможность разбивать Internet датаграмму на более мел кие датаграммы-фрагменты, если это необходимо для передачи по очередной локальной сети. Чтобы осуществить это, шлюз сам создает набор Internet датаграмм, помещая в каждую по одному фрагменты. В дальнейшем фрагменты могут быть снова разбиты следующими шлюзами на еще более мелкие части. Формат фрагмента Internet датаграммы спроектирован так, чтобы адресат - модуль Internet смог собрать фрагменты снова в исходные Internet датаграммы.

Internet модуль, являющийся адресатом, выделяет сегмент из датаграммы (после ее сборки в случае необходимости) и затем передает его по назначению на программу протокола TCP.

Данная простая модель действия протокола зачастую замалчивает множество деталей. Одной из важных характеристик является тип сервиса. Этот признак дает указание шлюзу (или модулю Internet) о выборе параметров сервиса, которые должны использоваться при передаче датаграммы в очередной локальной сети. Приоритет датаграммы указывается среди информации о типе сервиса. Датаграммы также могут нести информацию о безопасности с тем, чтобы позволить хост-компьютерам и шлюзам, действующим в многоуровневой системе безопасности, подвергать проверке соответствующие датаграммы.

Программное обеспечение хост-компьютера

Предполагается, что программа протокола TCP является модулем операционной системы. Клиенты обращаются к протоколу TCP в значительной степени так же, как если бы они обращались к файловой системе. Сам протокол TCP может обращаться к другим функциям операционной системы, к примеру, для управления структурами данных. Предполагается, что собственно интерфейс с локальной сетью осуществляется драйвером устройства. Протокол TCP не обращается непосредственно к драйверам сетевых устройств, а вместо этого делает вызов для модуля Internet протокола, который в свою очередь и обращается к драйверу устройства.

Механизм протокола TCP не исключает его реализации на входном процессоре. Однако, при такой реализации протокол общения между входными процессорами должен обеспечивать средства для поддержки описанного в этом документе интерфейса между пользователем и протоколом TCP.

Интерфейсы

Для запросов со стороны пользователя к протоколу TCP интерфейс TCP/пользователь обеспечивает открытие и закрытие соединения, посылку и получение данных или же получение статуса соединения. Эти запросы похожи на другие запросы программы пользователя к операционной системе, например, на запросы открытия, чтения и закрытия файла.



Интерфейс между протоколами TCP и Internet поддерживает запросы на посылку и получение датаграмм, адресованных на модули TCP в хост- компьютерах в любом месте сети Internet. Рассматриваемые запросы имеют аргументы для указания адреса, типа сервиса, приоритета, безопасности, а также передачи другой управляющей информации.

Связь с другими протоколами

Нижеприведенная диаграмма иллюстрирует место протокола TCP в иерархии протоколов



Рис.1 Взаимосвязь протоколов


Предполагается, что протокол TCP будет в состоянии эффективно поддерживать протоколы более высокого уровня. Протокол TCP должен легко взаимодействовать с такими протоколами более высокого уровня, как ARPANET Telnet или AUDIN II THP to the TCP.

Надежные коммуникации

Поток данных, посылаемый на TCP соединение, принимается получателем надежно и в соответствующей очередности.

Передача осуществляется надежно благодаря использованию подтверждений и номеров очереди. Концептуально каждому октету данных присваивается номер очереди. Номер очереди для первого октета данных в сегменте передается вместе с этим сегментом и называется номером очереди для сегмента. Сегменты также несут номер подтверждения, который является номером для следующего ожидаемого октета данных, передаваемого в обратном направлении. Когда протокол TCP передает сегмент с данными, он помещает его копию в очередь повторной передачи и запускает таймер. Когда приходит подтверждение для этих данных, соответствующий сегмент удаляется из очереди. Если подтверждение не приходит до истечения срока, то сегмент посылается повторно.

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

Для направления потока данных между программами протоколов TCP используется механизм управления потоками. Получающая программа протокола TCP сообщает "окно" посылающей программе. Данное окно указывает количество октетов (начиная с номера подтверждения), которое принимающая программа TCP готова в настоящий момент принять.

Установка соединения и его отмена

Чтобы идентифицировать отдельные потоки данных, поддерживаемые протоколом TCP, последний определяет идентификаторы портов. Поскольку идентификаторы портов выбираются каждой программой протокола TCP независимо, то они не будут уникальны. Чтобы обеспечить уникальность адресов для каждой программы протокола TCP, мы объединяем идентифицирующий эту программу Internet адрес и идентификатор порта. В результате получаем сокет, который будет уникален во всех локальных сетях, объединенных в единое целое.

Соединение полностью определяется парой сокетов на своих концах. Локальный сокет может принимать участие во многих соединениях с различными чужими сокетами. Соединение можно использовать для передачи данных в обоих направлениях, иными словами, оно является "полностью дуплексным".

Протокол TCP волен произвольным образом связывать порты с процессами. Однако при любой реализации протокола необходимо придерживаться нескольких основополагающих концепций. Должны присутствовать общеизвестные сокеты, которые протокол TCP ассоциирует исключительно с "соответствующими им" процессами. Мы представляем себе, как будто процессы могут "владеть" портами и что процессы могут инициировать соединения только с тех портов, которыми они владеют. (С точки зрения реализации протокола "владение" ограничивается хост-компьютером, однако мы можем представить себе команду пользователя по запросу порта (Request Port) или же метод выделения группы уникальных портов данному процессу, например посредством ассоциирования старших байтов в имени порта с данным процессом).

Соединение задается командой OPEN (открыть), сделанной с локального порта и имеющей аргументом чужой сокет. В ответ на такой запрос программа протокола TCP предоставляет имя локального (короткого) со единения. По этому имени пользователь адресуется к данному соединению при последующих вызовах. О соединениях следует помнить кое-какие вещи.

Мы предполагаем, что имеется некая структура данных, называемая блоком управления передачей (Transmission Control Block -TCB), предназначенная для сохранения описанной выше информации. Можно было бы реализовать протокол таким образом, чтобы локальное имя для соединения было бы указателем на структуру TCB последнего. Запрос OPEN указывает также, осуществляется ли соединение активным образом, или же происходит пассивное ожидание соединения извне.

Запрос на пассивное открытие соединения означает, что процесс ждет получения извне запросов на соединение, вместо того, чтобы пытаться самому установить его. Часто процесс, сделавший запрос на пассивное открытие, будет принимать запросы на соединение от любого другого процесса. В этом случае чужой сокет указывается как состоящий целиком из нулей, что означает неопределенность. Неопределенные чужие сокеты могут присутствовать лишь в командах пассивного открытия.

Сервисный процесс, желающий обслужить другие, неизвестные ему процессы, мог бы осуществить запрос на пассивное открытие с указанием неопределенного сокета. В этом случае соединение может быть установлено с любым процессом, запросившим соединения с этим локальным сокетом. Такая процедура будет полезна, если известно, что выбранный локальный сокет ассоциирован с определенным сервисом.

Общеизвестные сокеты представляют собой удобный механизм априорного привязывания адреса сокета с каким-либо стандартным сервисом. Например, процесс "сервер для программы Telnet" жестко связан с конкретным сокетом. Другие сокеты могут быть зарезервированы за передатчиком файлов, Remote Job Entry, текстовым генератором, эхо-сервером, а также Sink-процессами (последние три пункта связаны с обработкой текстов). Адрес сокета может быть зарезервирован для доступа к процедуре "просмотра", которая могла бы указывать сокет, через который можно было бы получить новообразованные услуги. Концепция общеизвестного сокета является частью TCP спецификации, однако собственно асоциирование сокетов с услугами выходит за рамки данного описания протокола.

Процессы могут осуществлять пассивные открытия соединений и ждать, пока от других процессов придут соответствующие запросы на активное открытие, а протокол TCP проинформирует их об установлении соединения. Два процесса, сделавшие друг другу одновременно запросы на активное открытие, получат корректное соединение. Гибкость такого подхода становится критичной при поддержке распределенных вычислений, когда компоненты системы взаимодействуют друг с другом асинхронным образом.

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

Если на один и тот же местный сокет осуществлено несколько ждущих пассивных запросов на открытие (записанных в блоки TCB), и осуществляется извне активный запрос на открытие, то чужой активный сокет будет связываться с тем блоком TCB, где было указание именно на этот запросивший соединения сокет. И только если такого блока TCB не существует, выбор партнера осуществляется среди блоков TCB с неопределенным чужим сокетом.

Процедура установки соединения использует флаг управления синхронизацией (SYN) и трижды обменивается сообщениями. Такой обмен называется трехвариантным подтверждением.

Соединение инициируется при встрече пришедшего сегмента, несущего флаг синхронизации (SYN), и ждущей его записи в блоке TCB. И сегмент и запись создаются пришедшими от пользователей запросами на открытие. Соответствие местного и чужого сокетов устанавливается при инициализации соединения. Соединение признается установленным, когда номера очередей синхронизированы в обоих направлениях между сокетами.

Отмена соединения также включает обмен сегментами, несущими на этот раз управляющий флаг FIN.

Коммуникация данных

Набор данных, передаваемых по соединению, можно рассматривать как поток октетов. Пользователь, отправляющий данные, указывает при запросе по посылку, следует ли данные, отправляемые при этом запросе, немедленно проталкивать через сеть к получателю. Указание осуществляется установкой флага PUSH (проталкивание).

Программа протокола TCP может собирать данные, принимаемые от пользователя, а затем передавать их в сеть по своему усмотрению в виде сегментов. Если же выставлен запрос на проталкивание, то протокол должен передать все не отправленные ранее данные. Когда программа протокола TCP, принимающая данные, сталкивается с флагом проталкивания, ей не следует ожидать получения новых данных по сети до тех пор, пока уже имеющиеся данные не будут переданы ждущему их местному процессу.

Нет нужды привязывать функции проталкивания к границам сегмента. Данные, содержащиеся в каком-либо сегменте, могут быть результатом одного или нескольких запросов на посылку. Или же один запрос может породить несколько сегментов.

Целью функции проталкивания и флага PUSH является проталкивание данных через сеть от отправителя к получателю. Функция не осуществляет обработки самих данных.

Существует связь между функцией проталкивания и использованием буферов данных в интерфейсе между пользователем и протоколом TCP. Каждый раз, когда в буфер получателя приходят данные с флагом PUSH, содержимое этого буфера передается пользователю на обработку, даже если буфер и не был заполнен. Если приходящие данные заполняют буфер пользователя до того, как получена команда проталкивания, пользователю отправляется блок данных, соответствующий размеру буфера. Протокол TCP имеет также средства для сообщения получателю, что с некоторого момента он имеет дело со срочными данными. Протокол TCP не пытается определить, что именно пользователь делает со ждущими обработки срочными данными. Однако обычно предполагается, что получающий данные процесс будет предпринимать усилия для быстрой обработки срочных данных.

Приоритет и безопасность

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

Модули TCP, действующие в многоуровневой системе безопасности, должны адекватным образом выставлять в отсылаемых сегментах флаги безопасности и приоритета. Такие модули TCP должны также позволять своим клиентам или вышестоящим протоколам, таким как Telnet и THP, указывать требуемый уровень безопасности, закрытости и приоритета для устанавливаемых соединений.

Принцип устойчивости

Все реализации протокола TCP будут следовать общему принципу устойчивости: быть консервативным в своих действиях и предоставлять свободу для других.

Назад | Содержание | Вперед
Hosted by uCoz