Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
47
Добавлен:
11.04.2015
Размер:
4.78 Mб
Скачать

9.3 Модель сервиса tcp

9.3.1 В основе TCP сервиса лежат так называемые сокеты (гнезда или конечные точки), создаваемые отправителем и получателем. У каждого сокета есть номер (адрес), состоящий из IP-адреса хоста и 16-битового номера, локального по отношению к хосту, называемого портом. Портом в TCP называют TSAP-адрес. Чтобы обратиться к службе TCP, между сокетом машины отправителя и сокетом машины получателя должно быть явно установлено соединение.

Один сокет может использоваться одновременно для нескольких соединений. Другими словами, два и более соединений могут заканчиваться в одном сокете. Соединения различаются по идентификаторам сокетов на обоих концах, то есть (socket1, socket2). Номера виртуальных каналов или другие идентификаторы не используются.

Номера портов с номерами ниже 1024, называемые популярными портами, зарезервированы за стандартными службами. Например, любой процесс, желающий установить соединение с хостом для передачи файла с помощью протокола FTP, может связаться с портом 21 хоста - адресата и обратиться, таким образом, к его FTP-домену. Аналогично, для установки сеанса удаленного терминала с помощью программы TELNET используется порт 23. Список популярных портов приведен в RFC 1700

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

9.3.2 TCP-соединение представляет собой байтовый поток, а не поток сообщений (рисунок 103). Разграничения между сообщениями не сохраняются. Например, если отправляющий процесс записывает в TCP-поток четыре 512-байтовых порции данных, эти данные могут быть доставлены получающему процессу в виде четырех 512-байтовых порций, двух 1024-байтовых порций, одной 2048-байтовой порции или как-нибудь еще. Нет способа, которым получатель смог бы определить, какими порциями записывались данные.

Рисунок 103.- Четыре 512-байтовых сегмента, посланные как отдельные IP-дейтаграммы (а); 2048 байт данных, доставленные приложению с помощью отдельного вызова процедуры READ (б)

Получив данные от приложения, протокол TCP может послать их сразу пли поместить в буфер, чтобы послать сразу большую порцию данных, по своему усмотрению. Однако иногда приложению бывает необходимо, чтобы данные были посланы немедленно. Предположим, что пользователь регистрируется на удаленной машине. После того как он ввел команду и нажал клавишу Enter, важно, чтобы введенная им строка была доставлена на удаленную машину сразу же, а не помещалась в буфер, пока не будет введена следующая строка. Чтобы вынудить передачу данных без промедления, приложение может установить флаг «PUSH» (протолкнуть).

Некоторые старые приложения использовали флаг «PUSH» как разделитель сообщений. Хотя этот трюк иногда срабатывает, не все реализации протокола TCP передают флаг «PUSH» принимающему приложению. Кроме того, прежде чем первый пакет с установленным флагом «PUSH» будет передан в линию, TCP-протокол получит еще несколько таких пакетов (то есть выходная линия будет занята), TCP-протокол имеет право послать все эти данные в виде единой дейтаграммы, не разделяя их на отдельные порции.

Ещё одной особенностью TCP-службы являются срочные данные. Когда интерактивный пользователь нажимает клавишу Delete или Ctrl-C, чтобы прервать начавшийся удаленный процесс, посылающее приложение помещает в выходной поток данных управляющую информацию и передает ее TCP-службе вместе с флагом «URGENT» (срочно). Этот флаг заставляет TCP-сущность прекратить аккумулирование данных и без промедления передать в сеть все, что у нее накопилось для данного сообщения.

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

Соседние файлы в папке Методичка по протоколам