Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Протоколы транспортного уровня.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
77 Кб
Скачать
☆

Порты и сокеты

Как и у протоколов сетевого и канального уровней, одна из важнейших функций протокола транспортного уровня заключается в идентификации протокола или процесса, сгенерировавшего переносимые им данные. В TCP и UDP идентификация осуществляется по номеру порта (port), который назначен данному процессу организацией IANA

(Internet Assigned Numbers Authority). Номера портов опубликованы в RFC 1700. Кроме того, список часто используемых портов содержится в текстовом файле SERVICES, поставляемом с каждым клиентом TCP/IP. Когда пакет TCP/IP достигает цели, протокол транспортного уровня, принявший дейтаграмму, считывает номер порта из поля Destination Port и передает информацию из поля данных программе или протоколу, ассоциированному с этим портом.

Всем основным приложениям Интернета присвоены номера портов, которые называются хорошо известными портами (well-known ports). Их список приведен в таблице 7.1. Например, порт Web-сервера — 80, а порт сервера DNS — 53. TCP и UDP поддерживают отдельные списки номеров хорошо известных портов. Например, протокол FTP использует порты TCP 20 и 21. Так как на транспортном уровне протокол FTP пользуется только протоколом TCP, другие протоколы прикладного уровня могут использовать порты 20 и 21 с протоколом UDP. В некоторых случаях протокол прикладного уровня может пользоваться обоими протоколами транспортного уровня. DNS, например, связан как с портом TCP 53, так и с портом UDP 53.

Адресуя трафик другой системе, TCP/IP-система использует комбинацию IP-адреса и номера порта, которая называется сокетом (socket).

Хорошо известные порты, опубликованные в RFC 1060, относятся, главным образом, к серверам. Поскольку связь с данным сервером инициирует обычно клиент (а не наоборот), клиентам постоянные номера портов не нужны. На время связи с конкретным сервером клиентская программа обычно случайным образом выбирает временный номер порта (ephemeral port number). IANA контролирует только номера портов в пределах от 1 до 1023, поэтому временные номера портов принимают значения от 1024 и выше. Сервер, получивший пакет от клиента, использует значение из поля Source Port заголовка TCP, чтобы адресовать ответ правильному временному порту клиентской системы.

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

Протокол TCP ориентирован на соединение. Это означает, что до начала обмена данными прикладного уровня две системы должны установить связь между собой — это гарантирует, что оба компьютера существуют, работают без сбоев и готовы к приему данных. Соединение TCP сохраняется на протяжении всего обмена данными, а затем закрывается установленным образом.

В большинстве случаев соединение TCP устанавливается на время передачи единственного файла. Например, подключаясь к серверу в Интернете, браузер сначала устанавливает соединение с ним, затем передает HTTP-запрос с URL и наконец получает файл, указанный в URL. Как только файл передан, системы разрывают соединение. Обрабатывая полученный файл, браузер может найти в нем ссылки на изображения, звукозаписи и другие файлы, необходимые для отображения Web-страницы. Для каждого из них браузер устанавливает новое соединение с сервером, копирует файл и отображает его в составе страницы. Таким образом, обработка одной Web-страницы может обернуться десятком самостоятельных TCP-соединений.

Процесс установления TCP-соединения называется трехшаговым рукопожатием (three-way handshake) и состоит из обмена тремя сообщениями, ни одно из которых не содержит данных прикладного уровня. Помимо проверки существования другого компьютера и его готовности к приему данных, цель этих сообщений состоит в согласовании нумерации передаваемых сообщений. В начале соединения каждый компьютер выбирает для первого сообщения TCP начальный номер последовательности (initial sequence number, ISN). Затем с каждым последующим сообщением системы увеличивают этот номер на 1. Для выбора ISN компьютеры используют специальный алгоритм, который минимизирует вероятность того, что для соединения между одной и той же парой сокетов в одно и то же время будут использованы одинаковые номера последовательности.

В сообщении с номером ISN для каждой системы установлен флаг синхронизации (SYN). В начале типичной TCP-транзакции сообщение SYN с номером ISN в поле Sequence Number посылает клиентская система. Получив это сообщение, сервер генерирует ответ, который выполняет сразу две функции. Во-первых, за счет установки флага АСК ответное сообщение подтверждает получение первого клиентского сообщения SYN. Во-вторых, в отклике сервера также установлен флаг SYN, а в поле Sequence Number указан его номер ISN.

Получив это сообщение, клиентская система генерирует свой собственный отклик с установленным флагом АСК. Как только сервер получил от клиента это подтверждение, соединение считается установленным и системы готовы обмениваться сообщениями с данными приложений. Таким образом, соединение TCP на самом деле представляет собой два отдельных соединения, работающих в противоположных направлениях. TCP является полнодуплексным протоколом: оба соединения устанавливаются и разрываются независимо друг от друга.

Важно помнить, что между двумя TCP-системами устанавливается только логическое соединение. Индивидуальные сообщения TCP переносятся в IP-дейтаграммах, с использованием служб IP, не ориентированных на соединение. Они могут добираться до места назначения различными маршрутами и даже прибывать туда не в том порядке, в каком были отправлены.

В ходе трехшагового рукопожатия с помощью сообщений SYN компьютеры также информируют друг друга о максимальном размере сегмента (maximum segment size, MSS). По значению MSS для другой системы передающий компьютер определяет количество данных, которое можно включать в последующие сообщения. Значение MSS зависит от того, какой протокол канального уровня используется в сети, где находится соответствующая система. Величина MSS передается в виде 4 байтов, записанных в полях Options заголовков TCP двух пакетов SYN. Значение этих байтов таково.

• Kind (1 байт) — тип дополнительного параметра. В случае передачи MSS значение равно 2.

• Length (1 байт) — длина дополнительного параметра в байтах. В случае передачи MSS значение равно 4.

• Maximum Segment Size (2 байта) — максимальный размер сегмента для данной системы в байтах.