Автор: Пользователь скрыл имя, 27 Мая 2012 в 04:03, курс лекций
Работа содержит курс лекций по дисциплине "Сетевые технологии"
Протоколы транспортного уровня 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. Мультиплексирование и демультиплексирование на транспортном уровне
Установка соединения
Протокол TCP ориентирован на соединение. Это означает, что до начала обмена данными прикладного уровня две системы должны установить связь между собой — это гарантирует, что оба компьютера существуют, работают без сбоев и готовы к приему данных. Соединение TCP сохраняется на протяжении всего обмена данными, а затем закрывается установленным образом.
В большинстве случаев соединение TCP устанавливается на время передачи единственного файла. Например, подключаясь к серверу в Интернете, браузер сначала устанавливает соединение с ним, затем передает HTTP-запрос с URL и наконец получает файл, указанный в URL. Как только файл передан, системы разрывают соединение. Обрабатывая полученный файл, браузер может найти в нем ссылки на изображения, звукозаписи и другие файлы, необходимые для отображения Web-страницы. Для каждого из них браузер устанавливает новое соединение с сервером, копирует файл и отображает его в составе страницы. Таким образом, обработка одной Web-страниц может обернуться десятком самостоятельных TCP-соединений.
Процесс установления TCP-соединения называется трехшаговым рукопожатием (three-way handshake) и состоит из обмена тремя сообщениями (рис. 3), ни одно из которых не содержит данных прикладного уровня. Помимо проверки существования другого компьютере и его готовности к приему данных, цель этих сообщений состоит в согласовании нумерации передаваемых сообщений. В начале соединения каждый компьютер выбирает для первого сообщения TCP начальный номер последовательности (initial sequence number, ISN). Затем с каждым последующим сообщением системы увеличивают этот номер на 1. Для выбора ISN компьютеры используют специальный алгоритм, который минимизирует вероятность того, что для соединения между одной и той же парой сокетов в одно и то же время будут использованы одинаковые номера последовательности.
SYN
SYN/ACK
АСК
Рис. 3. Для установки TCP-соединения используется трехшаговое рукопожатие
В сообщении с номером ISN для каждой системы установлен флаг синхронизации (SYN). В начале типичной TCP-транзакции сообщение SYN с номером ISN в поле Sequence Number посылает клиентская система. Получив это сообщение, сервер генерирует ответ, который выполняет сразу две функции. Во-первых, за счет установки флага АСК ответное сообщение подтверждает получение первого клиентского сообщения SYN. Во-вторых, в отклике сервера также установлен флаг SYN, а в поле Sequence Number указан его номер ISN. Получив это сообщение, клиентская система генерирует свой собственный отклик с установленным флагом АСК. Как только сервер получил от клиента это подтверждение, соединение считается установленным и системы готовы обмениваться сообщениями с данными приложений. Таким образом, соединение TCP на самом деле представляет собой два отдельных соединения, работающих в противоположных направлениях. TCP является полнодуплексным протоколом: оба соединения устанавливаются и разрываются независимо друг от друга.
В ходе трехшагового рукопожатия с помощью сообщений SYN компьютеры также информируют друг друга о максимальном размере сегмента (maximum segment size, MSS). По значению MSS для другой системы передающий компьютер определяет количество данных, которое можно включать в последующие сообщения. Значение MSS зависит от того, какой протокол канального уровня используется в сети, где находится соответствующая система. Величина MSS передается в виде 4 байтов, записанных в полях Options заголовков TCP двух пакетов SYN.
Передача данных
После установки соединения у каждого компьютера есть вся необходимая для передачи прикладных данных информация. Вот из чего она складывается.
• Номер порта. Клиенту уже известен номер порта сервера, который относится к хорошо известным портам и необходим для инициализации соединения. В поле Source Port сообщений клиента, адресованных серверу, передается временный номер порта, который будет подставляться в ответы сервера.
• Номер в последовательности. В поле Acknowledgment Number своих сообщений каждая система подставляет номера в последовательности, предоставленные другой системой.
• Максимальный размер сегмента (MSS). По значению дополнительного параметра MSS системы знают, насколько большими могут быть сегменты каждой последовательности.