![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Протоколы транспортного уровня TCP и UDP
В набор TCP/IP входит два протокола транспортного уровня: TCP (Transmission Control Protocol) и UDP (User Datagram Protocol). TCP ориентирован на соединение и обеспечивает приложениям надежный сервис с гарантированной доставкой данных, подтверждением приема пакетов, управлением потоком данных, обнаружением и коррекцией ошибок. TCP предназначен для передачи с побитовой точностью больших объемов данных, например, программных файлов. Протокол UDP на соединение не ориентирован, обеспечивает ненадежный сервис и используется в основном для обмена короткими запросами и ответами. Неудивительно, что TCP генерирует большой объем управляющего графика, тогда как накладные расходы, связанные с использованием UDP, относительно невелики. Примечание Эпитет «надежный» в отношении протокола означает его способность обеспечить гарантированную доставку данных с подтверждением их приема и не отражает степени доверия, которой заслуживает протокол. Обычно вполне можно рассчитывать, что и ненадежный протокол без ошибок доставит сообщение до целевой системы. В то время как задачей уровня межсетевого взаимодействия, к которому относится протокол IP, является передача данных между любой парой сетевых интерфейсов в составной сети, задача транспортного уровня, которую решают протоколы TCP и UDP, заключается в передаче данных между любой парой прикладных процессов, выполняющихся в сети. После того как пакет средствами протокола IP доставлен на сетевой интерфейс компьютера-получателя, данные необходимо каким-то образом переправить конкретному процессу-получателю. Каждый компьютер может выполнять несколько процессов, более того, прикладной процесс тоже может иметь несколько точек входа, выступающих в качестве адресов назначения для пакетов данных. Два протокола транспортного уровня из набора TCP/IP обеспечивают приложениям разный уровень обслуживания. Как TCP, так и UDP генерирует единицы данных PDU (protocol data unit), передаваемые внутри дейтаграмм IP. TCP выполняет функции, которых нет у IP, поэтому два этих протокола дополняют, но не дублируют друг друга. Комбинация UDP и IP обеспечивает минимальный транспортный сервис с низким уровнем накладных расходов. Протокол TCP Набор протоколов TCP/IP назван по комбинации протоколов TCP и IP, которые в паре отвечают за большую часть трафика в сети TCP/ IP. Все Интернет-приложения, например, браузеры, FTP-клиенты, программы для работы с электронной почтой, используют протокол TCP для чтения больших объемов данных с серверов. TCP описан в документе RFC 793, опубликованном рабочей группой IETF в 1981 г. Заголовок TCP Протоколы транспортного уровня инкапсулируют данные, полученные от протоколов прикладного уровня, добавляя к ним свой заголовок, как это делают и протоколы более низких уровней. Часто протоколы прикладного уровня передают TCP больше данных, чем вмещает отдельный пакет, поэтому TCP разбивает данные на несколько сегментов (segments). Совокупность сегментов, составляющих единую транзакцию, называется последовательностью (sequence). К каждому сегменту добавляется собственный заголовок TCP (рис. 1), после чего он передается на сетевой уровень для передачи в отдельной дейтаграмме. Когда все сегменты достигают целевого компьютера, он восстанавливает из них исходную последовательность. Функции полей сообщения TCP таковы. · Порт источника (source port) занимает 2 байта и идентифицирует процесс-отправитель. · Порт приемника (destination port) занимает 2 байта и идентифицирует процесс-получатель. · Последовательный номер (sequence number) занимает 4 байта и представляет собой номер байта, который определяет смещение сегмента относительно потока отправляемых данных (другими словами, номер первого байта данных в сегменте). · Подтвержденный номер (acknowledgement number) занимает 4 байта и содержит максимальный номер байта в полученном сегменте, увеличенный на единицу. Именно это значение используется в качестве квитанции. Если установлен контрольный бит АСК, то это поле содержит следующий номер очереди, который отправитель данного сегмента желает получить в обратном направлении.
Рис. 1. Формат заголовка TCP-сегмента · Длина заголовка( Data Offset ) занимает 4 бита и представляет собой длину заголовка TCP-сегмента, измеренную в 32-битовых словах. Длина заголовка не фиксирована и может изменяться в зависимости от значений, устанавливаемых в поле параметров. · Резерв (reserved) занимает 6 бит, · Кодовые биты (code bits) числом 6 содержат служебную информацию о типе данного сегмента. Положительное значение сигнализируется установкой этих битов в единицу: o URG — срочное сообщение; o АСК — квитанция на принятый сегмент; o PSH — запрос на отправку сообщения без ожидания заполнения буфера (протокол TCP может выжидать заполнения буфера перед отправкой сегмента, но если требуется срочная передача, то приложение сообщает об этом протоколу TCP с помощью данного бита); o RST — приказ принимающей системе сбросить TCP-соединение и игнорировать все сегменты, принятые к этому моменту; o SYN — сообщение, используемое для синхронизации счетчиков переданных данных при установлении соединения; o FIN — разрыв TCP-соединения (признак достижения передающей стороной последнего байта в потоке передаваемых данных). · Окно (window) занимает 2 байта и задает количество байтов данных, ожидаемых отправителем данного сегмента, начиная с байта, номер которого указан в поле подтвержденного номера. · Контрольная сумма (checksum) занимает 2 байта. Код CRC, вычисленный передающей системой. Целевая система использует его для обнаружения ошибок в заголовке TCP, данных и частях заголовка IP. · Указатель срочности (urgent pointer) занимает 2 байта и указывает на конец данных, которые необходимо срочно принять, несмотря на переполнение буфера. Указатель срочности используется совместно с кодовым битом URG. То есть если какие-то данные необходимо переслать приложению-получателю вне очереди, то приложение-отправитель должно сообщить об этом протоколу TCP путем установки в единицу бита URG. · Параметры (options) имеют переменную длину и могут вообще отсутствовать. Максимальная величина поля составляет 3 байта; оно используется для решения вспомогательных задач, например для выбора максимального размера сегмента. Поле параметров может располагаться в конце заголовка TCP, а его длина кратна 8 бит. · Заполнитель (padding) может иметь переменную длину. Это фиктивное поле, используемое для доведения размера заголовка до целого числа 32-битовых слов. Порты и сокеты Как и у протоколов сетевого и канального уровней, одна из важнейших функций протокола транспортного уровня заключается в идентификации протокола или процесса, сгенерировавшего переносимые им данные. В TCP и UDP идентификация осуществляется по номеру порта (port), который назначен данному процессу организацией IANA (Internet Assigned Numbers Authority). Когда пакет TCP/IP достигает цели, протокол транспортного уровня, принявший дейтаграмму, считывает номер порта из поля Destination Port и передает информацию из поля данных программе или протоколу, ассоциированному с этим портом. Всем основным приложениям Интернета присвоены номера портов, которые называются хорошо известными портами (well-known ports). Например, порт Web-сервера — 80, а порт сервера DNS — 53. TCP и UDP поддерживают отдельные списки номеров хорошо известных портов. Например, протокол FTP использует порты TCP 20 и 21. Так как на транспортном уровне протокол FTP пользуется только протоколом TCP, другие протоколы прикладного уровня могут использовать порты 20 и 21 с протоколом UDP. В некоторых случаях протокол прикладного уровня может пользоваться обоими протоколами транспортного уровня. DNS, например, связан как с портом TCP 53, так и с портом UDP 53. Адресуя трафик другой системе, TCP/IP-система использует комбинацию IP-адреса и номера порта, которая называется сокетом ( socket). Чтобы задать сокет в URL (Uniform Resource Locator), Вы сначала вводите IP-адрес, потом двоеточие и номер порта. Например, сокет 192.168.2.10: 21 указывает на порт 21 в системе с адресом 192.168.2.10. Поскольку 21 — это номер порта FTP, фактически, сокет указывает на FTP-сервер, работающий на этом компьютере. Обычно указывать номер порта при наборе URL не нужно, так как используемая Вами программа предполагает, что Вы подсоединяетесь к хорошо известному порту. Браузер, например, по умолчанию направляет все введенные URL на порт 80, принадлежащий протоколу HTTP (Hypertext Transfer Protocol) Web-сервера. Хорошо известные порты относятся, главным образом, к серверам. Поскольку связь с данным сервером инициирует обычно клиент (а не наоборот), клиентам постоянные номера портов не нужны. На время связи с конкретным сервером клиентская программа обычно случайным образом выбирает временный номер порта (ephemeral port number). IANA контролирует только номера портов в пределах от 1 до 1023, поэтому временные номера портов принимают значения от 1024 и выше. Сервер, получивший пакет от клиента, использует значение из поля Source Port заголовка TCP, чтобы адресовать ответ правильному временному порту клиентской системы. Логическое TCP-соединение однозначно идентифицируется парой сокетов. Каждый сокет одновременно может участвовать в нескольких соединениях. Так, если (IP1, nl), (IP2, n2), (IP3, nЗ) — сокеты трех разных приложений, где IP1, IP2, IP3 — их IP-адреса, a nl, n2, n3 — номера их TCP-портов, то возможно образование следующих соединений: - соединение 1 - {(IP2, n2), (IP1, nl)}; - соединение 2 - {(IP1, nl), (IP3, nЗ)}; - соединение 3 - {(IP2, n2), (IP3, nЗ)}. Протоколы TCP и UDP ведут для каждого номера порта две очереди: очередь пакетов, поступающих в данный порт из сети, и очередь пакетов, отправляемых данным портом в сеть. Процедура приема данных протоколом TCP (или UDP), поступающих от нескольких прикладных служб, называется мультиплексированием. Обратная процедура распределения протоколом TCP (или UDP) поступающих от сетевого уровня пакетов между набором высокоуровневых служб, идентифицированных номерами портов, называется демультиплексированием (рис. 2). Рис. 2. Мультиплексирование и демультиплексирование на транспортном уровне
|