Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Протокол TCP

01.01.2007

Протокол TCP

Радик Усманов radik@binep.ac.ru

Оригинальная версия документа RFC793 размещается на сервере ISI (Information Sciences Institute ):

URL - https://info.internet.isi.edu/in-notes/rfc/files/rfc793.txt

Vit - в ДРКБ публикуется в сильно сокращённом варианте

                            1. Введение                            

  Протокол управления передачей (TCP) предназначен для использования

в качестве надежного протокола общения между хост-компьютерами в

коммуникационных компьютерных сетях с коммутацией пакетов, а также в

системах, объединяющих такие сети.

Данный документ описывает функции, которые должны выполняться прото-

колом управления передачей, программу, которая реализует протокол, а

также ее интерфейс с программами или пользователями, нуждающимися в

ее услугах.

                           1.1 Мотивация                           

Компьютерные коммуникационные системы играют все более важную роль в

военных, правительственных и гражданских приложениях. Этот документ в

первую очередь освещает требования к компьютерным коммуникациям в во-

енной области, и особенно к устойчивости в условиях недостаточной на-

дежности коммуникаций и возможности перегрузок. Тем не менее, многие

из этих проблем имеют место также в гражданском и правительственном

секторе.

В условиях, когда стратегические и тактические сети компьютерных ком-

муникаций возникают и исчезают, важно обеспечить средства для их со-

единения, а также стандартные протоколы коммуникации между процесса-

ми, которые бы поддерживали большой диапазон прикладных программ.

Предвидя потребность в таких стандартах, Представительство Секретари-

ата Обороны по научно-исследовательским и опытно- конструкторским ра-

ботам предъявило протокол управления передачей (Transmission Control

Protocol - TCP), описанный здесь, на основе стандартизации DoD прото-

кола коммуникаций между процессами.

TCP - это протокол обеспечения надежности прямых соединений, создан-

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

приложения. Протокол TCP обеспечивает надежность коммуникаций между

парами процессов на хост-компьютерах, включенных в различные ком-

пьютерные коммуникационные сети, которые объединены в единую систему.

В отношении надежности протоколов более низкого, чем TCP, уровня

сделаны весьма скромные запросы. TCP предполагает, что он может

получить простой, потенциально ненадежный сервис для своих датаграмм

со стороны протоколов нижнего уровня. В принципе, протокол TCP должен

быть работоспособен на большом наборе коммуникационных систем,

начиная с кабельных соединений и кончая сетями с переключением

пакетов или электрических цепей.

Протокол TCP основывается на концепциях, впервые описанных авторами

Cerf и Kahn в документе [1]. TCP занимает в многоуровневой архитек-

туре протоколов нишу непосредственно над протоколом Internet, который

позволяет протоколу TCP отправлять и получать сегменты информации пе-

ременной длины, заключенные в оболочку Internet датаграмм. Internet

датаграмма предоставляет средства для адресации отправителя и получа-

теля сегментов TCP в различных сетях. Протокол Internet также осу-

ществляет любую фрагментацию и сборку сегментов TCP, необходимую для

осуществления передачи и доставки через множество сетей и промежуточ-

ных шлюзов. Протокол Internet также обработывает информацию о приори-

тете, классификации безопасности, а также осуществляет разграничение

TCP сегментов. Так что данная информация может быть передана напрямую

через множество сетей.

                         Уровни протоколов                         

                      +----------------------+                     

                      |   верхний уровень    |                     

                      +----------------------+                     

                      |         TCP          |                     

                      +----------------------+                     

                      |  протокол Internet   |                     

                      +----------------------+                     

                      |коммуникационная сеть |                     

                      +----------------------+                     

Большая часть этого документа написана всвязи с реализациями TCP про-

токола, которые вместе с протоколами более высокого уровня присут-

ствуют на хост-компьютере. Некоторые компьютерные системы будут вклю-

чаться в сети через главные компьютеры, содержащие протоколы уровней

TCP и Internet, а также специфическое сетевое программое обеспечение.

Спецификация TCP описывает ее интерфейс с протоколами более высокого

уровня, которые оказались осуществимы даже в случае главного компью-

тера, если реализован соответствующий протокол общения между хост-

компьютером и главным компьютером.

                              1.2 Цель                             

Протокол TCP обязан обеспечить надежный сервис для коммуникаций между

процессами в многосетевой системе. Протокол TCP должен быть общим

протоколом для коммуникаций между хост-компьютерами во множестве се-

тей.

                           1.4 Интерфейсы                          

Протокол TCP взаимодействует с одной стороны с пользователем или при-

кладной программой, а с другой - с протоколом более низкого уровня,

таким как протокол Internet.

Интерфейс между прикладным процессом и протоколом TCP мы поясняем с

приемлемой детализацией. Этот интерфейс состоит из набора вызовов,

которые похожи на вызовы операционной системы, предоставляемые при-

кладному процессу для управления файлами. Например, в этом случае

имеются вызовы для открытия и закрытия соединений, для отправки и по-

лучения данных на установленных соединениях. Предполагается также,

что протокол TCP сможет асинхронно взаимодействовать с прикладными

программами. Хотя разработчикам TCP протокола и предоставлена значи-

тельная свобода в создании интерфейсов, которые соответствуют свой-

ствам конкретной операционной системы, все же от любой приемлемой ре-

ализации требуются некие обязательные минимальные функции интерфейса

между протоколом TCP и пользователем.

Интерфейс между протоколом TCP и протоколами более низкого уровня за-

дан в значительно меньшей степени, за исключением того, что должен

существовать некий механизм, с помощью которого эти два уровня могут

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

что протокол нижнего уровня задает данный интерфейс. Протокол TCP

спроектирован так, чтобы работать с весьма разнообразной средой объ-

единенных компьютерных сетей. В данном документе предполагается, что

протокол более низкого уровня - это Internet [2].

                            1.5 Действие                           

Как указывалось ранее, главной целью протокола TCP является обеспече-

ние надежного, безопасного сервиса для логических цепей или соедине-

ний между парами процессов. Чтобы обеспечить такой сервис, основыва-

ясь на менее надежных коммуникациях Internet, система должна иметь

возможности для работы в следующих областях:

- базовая передача данных

- достоверность

- управление потоком

- разделение каналов

- работа с соединениями

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

  Основные действия протокола TCP в каждой из этих областей описаны

  в следующих параграфах.

Базовая передача данных

     Протокол TCP способен передавать непрерывные потоки октетов

  между своими клиентами в обоих направлениях, пакуя некое количес-

  тво октетов в сегменты для передачи через системы Internet. В об-

  щем случае протоколы TCP решают по своему усмотрению, когда произ-

  водить блокировку и передачу данных.

     Иногда пользователям бывает необходимо убедиться в том, что все

  данные, переданные ими протоколу TCP, уже отправлены. Для этой це-

  ли определена функция проталкивания (push). Чтобы убедиться в том,

  что данные, отправленные протоколу TCP, действительно переданы,

  отправитель указывает, что их следует протолкнуть к получателю.

  Проталкивание приводит к тому, что программы протокола TCP сразу

  осуществляют отправление и, соответственно, получение остающихся

  данных. Правильно осуществленное проталкивание может быть невидимо

  для получателя, а сама функция проталкивания может не иметь

  маркера границы записи.

Достоверность

     Протокол TCP должен иметь защиту от разрушения данных, потери,

  дублирования и нарушения очередности получения, вызываемых

  коммуникационной системой Internet. Это достигается присвоением

  очередного номера каждому передаваемому октету, а также

  требованием подтверждения (ACK) от программы TCP, принимающей

  данные. Если подтверждения не получено в течении контрольного

  интервала времени, то данные посылаются повторно. Со стороны

  получателя номера очереди используются для восстановления

  очередности сегментов, которые могут быть получены в неправильном

  порядке, а также для ограничения возможности появления дубликатов.

  Повреждения фиксируются посредством добавления к каждому

  передаваемому сегменту контрольной суммы, проверки ее при

  получении и последующей ликвидации дефектных сегментов.

     До тех пор, пока программы протокола TCP продолжают функциони-

  ровать корректно, а система Internet не развалилась полностью на

  составные части, ошибки пересылки не будут влиять на правильное

  получение данных. Протокол TCP защищает от ошибок коммуникационной

  системы Internet.

Управление потоком

     Протокол TCP дает средства получателю управлять количеством

  данных, посылаемых ему отправителем. Это достигается возвратом так

  называемого "окна" (window) вместе с каждым подтверждением, кото-

  рое указывает диапазон приемлемых номеров, следующих за номером

  последнего успешно принятого сегмента. Окно определяет количество

  октетов, которое отправитель может послать до получения дальнейших

  указаний.

Разделение каналов

     Чтобы позволить на отдельно взятом компьютере многим процессам

  одновременно использовать коммуникационные возможности уровня TCP,

  протокол TCP предоставляет на каждом хост-компьютере набор адресов

  или портов. Вместе с адресами сетей и хост-компьютеров на коммни-

  кационном уровне Internet они образуют сокет (socket - разъем).

  Каждое соединение уникальным образом идентифицируется парой соке-

  тов. Таким образом, любой сокет может одновременно использоваться

  во многих соединениях.

     Соотнесение портов и процесов осуществляется каждым хост-

  компьютером самостоятельно. Однако оказывается полезным связывать

  часто используемые процессы (такие как "logger" или сервис с раз-

  делением времени) с фиксированными документированными сокетами.

  Этот сервис можно впоследствии использовать через известные адре-

  са. Установка и настройка адресов портов для других процессов мо-

  жет включать более динамичные механизмы.

Работа с соединениями

     Механизмы управления потоком и обеспечения достоверности, опи-

  санные выше, требуют, чтобы программы протокола TCP инициализиро-

  вали и поддерживали определенную информацию о состоянии каждого

  потока данных. Набор такой информации, включающий сокеты, номера

  очереди, размеры окон, называется соединением. Каждое соединение

  уникальным образом идентифицируется парой сокетов на двух концах.

     Если два процесса желают обмениваться информацией, соответству-

  ющие программы протокола TCP должны сперва установить соединение

  (на каждой стороне инициализировать информаицию о статусе). По за-

  вершении обмена информацией соединение должно быть расторгнуто или

  закрыто, чтобы освободить ресурсы для предоставления другим поль-

  зователям.

     Поскольку соединения должны устанавливаться между ненадежными

  хост-компьютерами и через ненадежную коммуникационную систему

  Internet, то во избежание ошибочной инициализации соединений ис-

  пользуется механизм подтверждения связи с хронометрированными но-

  мерами очереди.

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

     Пользователи протокола TCP могут затребовать для своего соеди-

  нения приоритет и безопасность. Предусмотрены принимаемые по умол-

  чанию характеристики соединений, когда такие параметры не требуют-

  ся.

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

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

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

сети, которые в свою очередь соединятся друг с другом через шлюзы.

Здесь предполагается, что компьютерные сети могут быть либо локальны-

ми (например, ETHERNET), либо большими сетями (например ARPANET), но

в любом случае они основываются на технологии коммутации пакетов. Ре-

альными агентами, создающими и потребляющими сообщения, циркулирующие

в сети, являются процессы. Протоколы различных уровней в сетях, на

шлюзах и на хост-компьютерах поддерживают систему коммуникаций между

процессами, которая обеспечивает двунаправленный поток данных по ло-

гическим соединениям между портами процессов.

  Термин пакет используется здесь в общем случае для обозначения

порции данных, участвующей в отдельном элементарном акте взаимодей-

ствия между сетью и соединенным с ней хост-компьютером. В общем слу-

чае нас не будет касаться формат блоков данных, циркулирующих в сети.

  С точки зрения коммуникационных сетей, хост-компьютеры - это ком-

пьютеры, связанные с сетью и являющиеся отправителями и получателями

пакетов. Процессы рассматриваются как активные элементы на хост-

компьютерах (согласно наболее общему определению процессов как испол-

няющихся программ). Предполагается, что даже терминалы, файлы и дру-

гие устройства ввода-вывода взаимодействуют друг с другом посредством

процессов. Таким образом, любые коммуникации рассматриваются как ком-

муникации между процессами.

  Поскольку процесс может контролировать несколько коммуникационных

потоков, ведущих от него к другому процессу (или другим процессам),

то мы постулируем, что каждый процесс может иметь набор портов, через

которые он общается с портами других процессов.

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

  Процесс пересылает данные, вызывая программу протокола TCP и пере-

давая ей в качестве аргументов буферы с данными. Протокол TCP пакует

данные из этих буферов в сегменты, а затем вызывает модуль Internet

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

адресатом. Этот адресат в свою очередь помещает данные из сегмента в

буферы получателя и затем оповещает свего клиента о прибытии предназ-

наченных ему данных. Программы протокола TCP помещают в сегменты кон-

трольную информацию, которая затем используется ими для проверки оче-

редности передачи данных.

  Модель Internet коммуникаций состоит в том, что с каждой програм-

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

интерфейс с локальной сетью. Данный модуль Internet помещает сегменты

TCP в Internet датаграммы, а затем направляет их на другой Internet

модуль или же промежуточный шлюз. Для передачи датаграммы по локаль-

ной сети она в свою очередь помещается в пакет соответствующего типа.

  Коммутаторы пакетов могут осуществлять дальнейшую упаковку, фраг-

ментацию или другие операции с тем, чтобы в локальной сети осущест-

вить передачу пакетов по назначению на модуль Internet.

  На шлюзах между локальными сетями датаграмма Internet освобождает-

ся от пакета локальной сети и исследуется с тем, чтобы определить, по

какой сети она должна в дальнейшем идти. Затем Internet датаграмма

упаковывается в пакет, соответствующий выбранной локальной сети, и

посылается на следующий шлюз или же прямо к конечному получателю.

  Шлюз имеет возможность разбивать Internet датаграмму на более мел-

кие датаграммы-фрагменты, если это необходимо для передачи по очеред-

ной локальной сети. Чтобы осуществить это, шлюз сам создает набор

Internet датаграмм, помещая в каждую по одному фрагменты. В дальней-

шем фрагменты могут быть снова разбиты следующими шлюзами на еще бо-

лее мелкие части. Формат фрагмента Internet датаграммы спроектирован

так, чтобы адресат - модуль Internet смог собрать фрагменты снова в

исходные Internet датаграммы.

  Internet модуль, являющийся адресатом, выделяет сегмент из дата-

граммы (после ее сборки в случае необходимости) и затем передает его

по назначению на программу протокола TCP.

  Данная простая модель действия протокола зачастую замалчивает мно-

жество деталей. Одной из важных характеристик является тип сервиса.

Этот признак дает указание шлюзу (или модулю Internet) о выборе пара-

метров сервиса, которые должны использоваться при передаче датаграммы

в очередной локальной сети. Приоритет датаграммы указывается среди

информации о типе сервиса. Датаграммы также могут нести информацию о

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

ствующим в многоуровневой системе безопасности, подвергать проверке

соотвествующие датаграммы.

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

  Предполагается, что программа протокола TCP является модулем опе-

рационной системы. Клиенты обращаются к протоколу TCP в значительной

степени так же, как если бы они обращались к файловой системе. Сам

протокол TCP может обращаться к другим функциям операционной системы,

к примеру, для управления структурами данных. Предполагается, что

собственно интерфейс с локальной сетью осуществляется драйвером

устройства. Протокол TCP не обращается непосредственно к драйверам

сетевых устройств, а вместо этого делает вызов для модуля Internet

протокола, который в свою очередь и обращается к драйверу устройства.

  Механизм протокола TCP не исключает его реализации на входном про-

цессоре. Однако, при такой реализации протокол общения между входными

процессорами должен обеспечивать средства для поддержки описанного в

этом документе интерфейса между пользователем и протоколом TCP.

                           2.4 Интерфейсы                          

  Для запросов со стороны пользователя к протоколу TCP интерфейс

TCP/пользователь обеспечивает открытие и закрытие соединения, посылку

и получение данных или же получение статуса соединения. Эти запросы

похожи на другие запросы программы пользователя к операционной систе-

ме, например, на запросы открытия, чтения и закрытия файла.

  Интерфейс между протоколами TCP и Internet поддерживает запросы на

посылку и получение датаграмм, адресованных на модули TCP в хост-

компьютерах в любом месте сети Internet. Рассматриваемые запросы име-

ют аргументы для указания адреса, типа сервиса, приоритета, безопас-

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

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

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

иерархии протоколов

+------+ +-----+ +-----+        +-----+

|Telnet| | FTP | |Voice|  ...   |     |    Уровень приложений

+------+ +-----+ +-----+        +-----+

     |   |         |              |

    +-----+     +-----+        +-----+

    | TCP |     | RTP |  ...   |     |    Уровень хостов

    +-----+     +-----+        +-----+

       |           |              |

     +------------------------------+

     |   Internet протокол и ICMP   |     Уровень шлюзов

     +------------------------------+

                    |

     +------------------------------+

     |   протокол локальной сети    |     Сетевой уровень

     +------------------------------+

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

Предполагается, что протокол TCP будет в состоянии эффективно поддер-

живать протоколы более высокого уровня. Протокол TCP должен легко

взаимодействовать с такими протоколами более высокого уровня, как

ARPANET Telnet или AUDIN II THP to the TCP.

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

  Поток данных, посылаемый на TCP соединение, принимается получате-

лем надежно и в соответствующей очередности.

  Передача осуществляется надежно благодаря использованию подтвер-

ждений и номеров очереди. Концептуально каждому октету данных присва-

ивается номер очереди. Номер очереди для первого октета данных в сег-

менте передается вместе с этим сегментом и называется номером очереди

для сегмента. Сегменты также несут номер подтверждения, который явля-

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

обратном направлении. Когда протокол TCP передает сегмент с данными,

он помещает его копию в очередь повторной передачи и запускает тай-

мер. Когда приходит подтверждение для этих данных, соответствующий

сегмент удаляется из очереди. Если подтверждение не приходит до исте-

чения срока, то сегмент посылается повторно.

  Подтверждение протокола TCP не гарантирует, что данные достигли

конечного получателя, а только то, что программа протокола TCP на

компьютере у получателя берет на себя ответственность за это.

  Для направления потока данных между программами протоколов TCP

используется механизм управления потоками. Получающая программа прото-

кола TCP сообщает "окно" посылающей программе. Данное окно указывает

количество октетов (начиная с номера подтверждения), которое принима-

ющая программа TCP готова в настоящий момент принять.

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

  Чтобы идентифицировать отдельные потоки данных, поддерживаемые

протоколом TCP, последний определяет идентификаторы портов. Поскольку

идентификаторы портов выбираются каждой программой протокола TCP не-

зависимо, то они не будут уникальны. Чтобы обеспечить уникальность

адресов для каждой программы протокола TCP, мы объединяем идентифици-

рующий эту программу Internet адрес и идентификатор порта. В резуль-

тате получаем сокет, который будет уникален во всех локальных сетях,

объединенных в единое целое.

  Соединение полностью определяется парой сокетов на своих концах.

Локальный сокет может принимать участие во многих соединениях с раз-

личными чужими сокетами. Соединение можно использовать для передачи

данных в обоих направлениях, иными словами, оно является "полностью

дуплексным".

  Протокол TCP волен произвольным образом связывать порты с процес-

сами. Однако при любой реализации протокола необходимо придерживаться

нескольких основополагающих концепций. Должны присутствовать общеиз-

вестные сокеты, которые протокол TCP ассоциирует исключительно с

"соответствующими им" процессами. Мы представляем себе, как будто

процессы могут "владеть"портами и что процессы могут инициировать со-

единения только с тех портов, которыми они владеют. (С точки зрения

реализации протокола "владение" ограничивается хост-компьютером, од-

нако мы можем представить себе команду пользователя по запросу порта

(Request Port) или же метод выделения группы уникальных портов данно-

му процессу, например посредством ассоциирования старших байтов в

имени порта с данным процессом).

  Соединение задается командой OPEN (открыть), сделанной с локально-

го порта и имеющей аргументом чужой сокет. В ответ на такой запрос

программа протокола TCP предоставляет имя локального (короткого) со-

единения. По этому имени пользователь адресуется к данному соединению

при последующих вызовах. О соединениях следует помнить кое-какие вещи.

Мы предполагаем, что имеется некая структура данных, называемая бло-

ком управления передачей (Transmission Control Block -TCB), предназ-

наченная для сохранения описанной выше информации. Можно было бы ре-

ализовать протокол таким образом, чтобы локальное имя для соединения

было бы указателем на структуру TCB последнего. Запрос OPEN указывает

также, осуществляется ли соединение активным образом, или же происхо-

дит пассивное ожидание соединения извне.

  Запрос на пассивное открытие соединения означает, что процесс ждет

получения извне запросов на соединение, вместо того, чтобы пытаться

самому установить его. Часто процесс, сделавший запрос на пассивное

открытие, будет принимать запросы на соединение от любого другого

процесса. В этом случае чужой сокет указывается как состоящий целиком

из нулей, что означает неопределенность. Неопределенные чужие сокеты

могут присутствовать лишь в командах пассивного открытия.

  Сервисный процесс, желающий обслужить другие, неизвестные ему про-

цессы, мог бы осуществить запрос на пассивное открытие с указанием

неопределенного сокета. В этом случае соединение может быть установ-

лено с любым процессом, запросившим соединения с этим локальным соке-

том. Такая процедура будет полезна, если известно, что выбранный ло-

кальный сокет ассоциирован с определенным сервисом.

  Общеизвестные сокеты представляют собой удобный механизм априорно-

го привязывания адреса сокета с каким-либо стандартным сервисом. На-

пример, процесс "сервер для программы Telnet" жестко связан с кон-

кретным сокетом. Другие сокеты могут быть зарезервированы за передат-

чиком файлов, Remote Job Entry, текстовым генератором, эхо-сервером,

а также Sink-процессами (последние три пункта связаны с обработкой

текстов). Адрес сокета может быть зарезервирован для доступа к проце-

дуре "просмотра", которая могла бы указывать сокет, через который

можно было бы получить новообразованные услуги. Концепция общеизвест-

ного сокета является частью TCP спецификации, однако собственно асо-

циирование сокетов с услугами выходит за рамки данного описания про-

токола (см. документ [4]).

  Процессы могут осуществлять пассивные открытия соединений и ждать,

пока от других процессов придут соответсвующие завпросы на активное

открытие, а протокол TCP проинформирует их об установлении соедине-

ния. Два процесса, сделавшие друг другу одновременно запросы на ак-

тивное открытие, получат корректное соединение. Гибкость такого под-

хода становится критичной при поддержке распределенных вычислений,

когда компоненты системы взаимодействуют друг с другом асинхронным

образом.

  Когда осуществляется подбор сокетов для локального запроса пассив-

ного открытия и чужого запроса на активное открытие, то принципиаль-

ное значение имеют два случая. В первом сслучае местное пассивное от-

крытие полностью определяет чужой сокет. При этом подбор должен осу-

ществляться очень аккуратно. Во втором случае во время местного пас-

сивного открытия чужой сокет не указывается. Тогда в принципе может

быть установлено соединение с любых чужих сокетов. Во всех остальных

случаях подбор сокетов имеет частичные ограничения.

  Если на один и тот же местный сокет осуществлено несколько ждущих

пассивных запросов на открытие (записанных в блоки TCB), и осущест-

вляется извне активный запрос на открытие, то чужой активный сокет

будет связываться с тем блоком TCB, где было указание именно на этот

запросивший соединения сокет. И только если такого блока TCB не су-

ществует, выбор партнера осуществляется среди блоков TCB с неопреде-

ленным чужим сокетом.

  Процедура установки соединения использует флаг управления синхро-

низацией (SYN) и трижды обменивается сообщениями. Такой обмен называ-

ется трехвариантным подтверждением [3].

  Соединение инициируется при встрече пришедшего сегмента, несущего

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

и запись создаются пришедшими от пользователей запросами на открытие.

Соответствие местного и чужого сокетов устанавливается при инициали-

зации соединения. Соединение признается установленным, когда номера

очередей синхронизированы в обоих направлениях между сокетами.

  Отмена соединения также включает обмен сегментами, несущими на

этот раз управляющий флаг FIN.

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

  Набор данных, передаваемых по соединению, можно рассматривать как

поток октетов. Пользователь, отправляющий данные, указывает при за-

просе по посылку, следует ли данные, отправляемые при этом запросе,

немедленно проталкивать через сеть к получателю. Указание осуществля-

ется установкой флага PUSH (проталкивание).

  Программа протокола TCP может собирать данные, принимаемые от

пользователя, а затем передавать их в сеть по своему усмотрению в ви-

де сегментов. Если же выставлен запрос на проталкивание, то протокол

должен передать все неотправленные ранее данные. Когда программа про-

токола TCP, принимающая данные, сталкивается с флагом проталкивания,

ей не следует ожидать получения новых данных по сети до тех пор, пока

уже имеющиеся данные не будут переданы ждущему их местному процессу.

  Нет нужды привязывать функции проталкивания к границам сегмента.

Данные, содержащиеся в каком-либо сегменте, могут быть результатом

одного или нескольких запросов на посылку. Или же один запрос может

породить несколько сегментов.

  Целью функции проталкивания и флага PUSH является проталкивание

данных через сеть от отправителя к получателю. Функция не

осуществляет обработки самих данных.

  Существует связь между функцией проталкивания и использованием

буферов данных в интерфейсе между пользователем и протоколом TCP.

Каждый раз, когда в буфер получателя приходят данные с флагом PUSH,

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

если буфер и не был заполнен. Если приходящие данные заполняют буфер

пользователя до того, как получена команда проталкивания,

пользователю отправляется блок данных, соответствующий размеру

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

что с некоторого момента он имеет дело со срочными данными. Протокол

TCP не пытается определить, что именно пользователь делает со ждущими

обработки срочными данными. Однако обычно предполагается, что

получающий данные процесс будет предпринимать усилия для быстрой

обработки срочных данных.

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

  Протокол TCP использует тип сервиса и опцию безопасности протокола

Internet с тем, чтобы пользователям протокола TCP обеспечить приори-

тет и безопасность на каждом соединении. Не все модули протокола TCP

обязательно будут действовать в многоуровневой системе обеспечения

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

цифическими соединениями, другие ограничиваются лишь первым уровнем

безопасности и закрытости. Следовательно, некоторые реализации прото-

кола TCP и услуг для пользователей могут использовать лишь часть мно-

гоуровневой системы безопасности.

  Модули TCP, действующие в многоуровневой системе безопасности,

должны адекватным образом выставлять в отсылаемых сегментах флаги

безопасности и приоритета. Такие модули TCP должны также позволять

своим клиентам или вышестоящим протоколам, таким как Telnet и THP,

указывать требуемый уровень безопасности, закрытости и приоритета для

устанавливаемых соединений.

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

  Все реализации протокола TCP будут следовать общему принципу

устойчивости: быть консервативным в своих действиях и предоставлять

свободу для других.