tanenbaum_seti_all.pages (525408), страница 162
Текст из файла (страница 162)
ТСР-сущность принимает от локальных процессов пользовательские потоки данных, разбивает их на куски, не превосходящие 64 Кбайт (на практике это число обычно равно 1460 байтам данных, что позволяет поместить их в один кадр Есцегпес с заголовками 1Р и ТСР), и посылает их в виде отдельных 1Р-дейтаграмм. Когда 1Р-дейтаграммы с ТСР-данными прибывают на машину, они передаются ТСР-сущности, которая восстанавливает исходный байтовый поток. Для простоты мы иногда будем употреблять «ТСР» для обозначения транспортной сущности ТСР (части программного обеспечения) или протокола ТСР (набора правил). Из контекста будет понятно, что имеется в виду, Например, в выражении «Пользователь передает данные ТСР» подразумевается, естественно, транспортная сущность ТСР.
Уровень 1Р не гарантирует правильной доставки дейтаграмм, поэтому именно ТСР приходится следить за истекшими интервалами ожидания и в случае необходимости заниматься повторной передачей пакетов. Бывает, что дейтаграммы прибывают в неправильном порядке. Восстанавливать сообщения из таких дейтаграмм обязан также ТСР.
Таким образом, протокол ТСР призван обеспечить надежность, о которой мечтают многие пользователи и которая не предоставляется протоколом 1Р. 608 Глава 6. Транспортный уровень Модель службы ТСР Таблица 6.4. Некоторые зарезервированные порты Порт Протокол Использование 21 23 25 69 79 80 110 119 НР Тв1пет ЯМТР ТЕТР Е~пввг НТТР РОР-3 111ЧТР Передача файлов Дистанционный вход в систему Электронная почта Простейший протокол передачи файлов Поиск информации о пользователе Мировая Паутина Удаленный доступ к электронной почте Группы новостей В основе службы ТСР лежат так называемые сокеты (гнезда или конечные точки), создаваемые как отправителем, так и получателем.
Они обсуждались в разделе «Советы Берклиь. У каждого сокета есть номер (адрес), состоящий из 1Р-адреса хоста и 16-битного номера, локального по отношению к хосту, называемого портом. Портом в ТСР называют ТБАР-адрес. Для обращения к службе ТСР между сокетом машины отправителя и сокетом машины получателя должно быть явно установлено соединение. Примитивы сокетов приведены в табл. 6.2 Один сокет может использоваться одновременно для нескольких соединений, Другими словами, два и более соединений могут оканчиваться одним сокетом.
Соединения различаются по идентификаторам сокетов на обоих концах — (зосйег1, зосле12), Номера виртуальных каналов или другие идентификаторы не используются. Номера портов со значениями ниже 1024, называемые популярными портами, зарезервированы стандартными сервисами. Например, любой процесс, желающий установить соединение с хостом для передачи файла с помощью протокола ЕТР, может связаться с портом 21 хоста-адресата и обратиться, таким образом, к его ЕТР-демону.
Список популярных портов привслеп на сайте туутууйапа.от0. Таких портов па данный момент более 300. Некоторые из них включены в табл. 6.4. Можно было бы, конечно, связать РТР-демона с портом 21 сще во время загрузки, тогда же связать демона се!пег с портом 23, и т. д. Однако если бы мы так сделали, мы бы только зря заняли память информацией о демонах, которые, на самом деле, большую часть времени простаивают. Вместо этого обычно пользуются услугами одного демона, называемого в 1))ч1Х )пеЫ, который связывается с несколькими портами и ожидает первое входящее соединение. Когда оно происходит, 1псЫ создает новый процесс, для которого вызывается подходящий демон, обрабатывающий запрос.
Таким образом, постоянно активен только 1пегй, остальные вызываются только тогда, когда для них есть работа. 1ттеЫ имеет специальный конфигурационный файл, из которого он может узнать о назначении портов. Это значит, что системный администратор может настроить систему таким образом, чтобы с самыми загруженными портами (напригиер, 80) были связаны постоянные демоны, а с остальными — 1псЫ.
Транспортные протоколы Интернета: ТСР 609 Все ТСР-соединения являются полнодуплексными и двухточечными. Полный дуплекс означает, что трафик может следовать одновременно в противоположные стороны. Двухточечное соединение подразумевает, что у него имеются ровно две конечные точки. Широковещание н многоадресная рассылка протоколом ТСР не поддерживаются. ТСР-соединение представляет собой байтовый поток, а не поток сообщений Границы между сообщениями не сохраняются.
Например, если отправляющий процесс записывает в ТСР-поток четыре 512-байтовых порции данных, эти данные могут быть доставлены получающему процессу в виде четырех 512-байтовых порций, двух 1024-байтовых порций, одной 2048-байтовой порции (см. рис. б.22) или как-нибудь еще. Нет способа, которым получатель смог бы определить, каким образом записывались данные.
(Р-заголовок ТСР-заголовок В " С ' 1) А В С С Рис. 6.22. Четыре 512-байтовых сегмента, посланные квк отдельные )Р-дейтаграммы (в); 2048 байт данных, доставленные приложению с помощью отдельного вызова процедуры ВЕАС (б) Файлы в системс 0М)х также обладают этим свойством. Программа, читающая файл, не может определить, как был записан этот файл: поблочно, нобайтно или сразу целиком. Как и в случае с файлами системы нй1М, ТСР-программы не имеют представления о назначении байтов и не интересуются этим. Байт для них— просто байт.
Получив данные от приложения, протокол ТСР может послать их сразу или поместить в буфер, чтобы послать сразу большую порцию данных, по своему усмотрению. Однако иногда приложению бывает необходимо, чтобы данные были посланы немедленно. Допустим, например, что пользователь регистрируется на удаленной машине. После того как он ввел команду и нажал клавишу Еп1ег, важно, чтобы введенная им строка была доставлена на удаленную машину сразу же, а не помещалась в буфер, пока не будет введена следующая строка.
Чтобы вынудить передачу данных без промедления, приложение может установить флаг Р(ЛН (протолкнуть). Некоторые старые приложения использовали флаг Р()БН как разделитель сообщений. Хотя этот трюк иногда срабатывает, не все реализации протокола ТСР передают флаг РПБН принимающему приложению. Кроме того, если прежде чем первый пакет с установленным флагом РПБН будет передан в линию, ТСР-сущность получит еше несколько таких пакетов (то есть выходная линия будет занята), ТСР-сущность будет иметь право послать все эти данные в виде единой дейтаграммы, не разделяя их на отдельные порции.
Последней особенностью службы ТСР, о которой следует упомянуть, являются срочные данные, Когда пользователь, взаимодействующий с программой 610 Глава 6. Транспортный уровень в интерактивном режиме, нажимает клавишу Ое!е1е или СпрС, чтобы прервать начавшийся удаленный процесс, посылающее приложение помешает в выходной поток данных управляющую информацию и передает ее ТСР-службе вместе с флагом 0К6БК7 (срочно).
Этот флаг заставляет ТСР-сушность прекратить накопление данных и без промедления передать в сеть все, что у нее есть для данного соединения, Когда срочные данные прибывают по назначению, получающее приложение прерывается (то есть «получает сигналь, в терминологии УН1Х), после чего оно может считать данные из входного потока и найти среди них срочные.
Конец срочных данных маркируется, так что приложение может распознать, где они заканчиваются. Начало срочных данных не маркируется. Приложение должно само догадаться. Такая схема представляет собой грубый сигнальный механизм, оставляя все прочее приложению. Протокол ТСР В данном разделе будет рассмотрен протокол ТСР в общих чертах, В следующем разделе мы обсудим заголовок протокола, поле за полем. Ключевым свойством ТСР, определяющим всю структуру протокола, является то, что в ТСР-соединении у каждого байта есть свой 32-разрядный порядковый номер. В первые годы существования Интернета базовая скорость передачи данных между маршрутизаторами по выделенным линиям составляла 56 Кбит/с, Хосту, постоянно выдающему данные с максимальной скоростью, потребовалось бы больше недели на то, чтобы порядковые номера совершили полный круг.
При нынешних скоростях порядковые номера могут кончиться очень быстро, об этом еще будет сказано позже. Отдельные 32-разрядные порядковые номера используются для подтверждений и для механизма скользящего окна, о чем также будет сказано позже. Отправляющая и принимающая ТСР-сущности обмениваются данными в виде сегментов. Сегмент состоит из фиксированного 20-байтового заголовка (плюс необязательная часть), за которой могут слеловать байты данных. Размср сегментов определяется программным обеспечением ТСР. Оно может объединять вадик сегмент данные, полученные в результате нескольких операций записи, или, наоборот, распределять результат одной записи между несколькими сегментами.
Размер сегментов ограничен двумя пределами. Во-первых, каждый сегмент, включая ТСР-заголовок, должен помешаться в 65 515-байтное поле полезной нагрузки 1Р-пакета. Во-вторых, в каждой сети есть максимальная единица передачи (МТ(), Махпвшп Тгапэ(ег 1)цй), и каждый сегмент лолжен помешаться в МТП. На практике размер максимальной единицы передачи составляет обычно 1500 байт (что соответствует размеру поля полезной нагрузки Егйегпег), и таким образом определяется верхний предел размера сегмента.
Основным протоколом, используемым ТСР-сущностями, является протокол скользящего окна. При передаче сегмента отправитель включает таймер. Когда сегмент прибывает в пункт назначения, принимающая ТСР-сущность посылает обратно сегмент (с данными, если есть что посылать, или без данных) с номером Транспортные протоколы Интернета: ТСР 61 1 подтверждения, равным порядковому номеру следующего ожидаемого сегмента Если время ожидания подтверждения истекает, отправитель посылает сегмент еще раз.