Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
12_Транспортный уровень TCP.doc
Скачиваний:
7
Добавлен:
06.08.2019
Размер:
327.17 Кб
Скачать

Лекция 12. 14.11.2020 11:22:40

Протоколы транспортного уровня модели TCP/IP.

Объект транспортного уровня

Задачей транспортного уровня является предоставление эффективных, надежных и экономичных услуг (сервисов) своим пользователям, которыми обычно являются процессы прикладного уровня. Для достижения этой цели транспортный уровень пользуется услугами, предоставляемыми сетевым уровнем. Объект, выполняющий работу транспортного уровня, называется транспортной сущностью или транспортным объектом. Транспортный объект может располагаться в ядре операционной системы, в отдельном пользовательском процессе или в библиотечном модуле, загруженном сетевым приложением.

Узел 1

Узел 2

Прикладной уровень

Прикладной уровень

т

Транспортный объект

ранспортный адрес

Модуль данных транспортного протокола

TPDU

транспортный адрес

Транспортный объект

сетевой адрес

Сетевой уровень

сетевой адрес

Сетевой уровень

Стек протоколов tcp/ip

После того как пакет средствами протокола IP доставлен в компьютер-получатель, данные необходимо направить конкретному процессу-получателю. Каждый компьютер может выполнять несколько процессов, более того, прикладной процесс тоже может иметь несколько точек входа, выступающих в качестве адреса назначения для пакетов данных.

Пакеты, поступающие на транспортный уровень, организуются операционной системой в виде множества очередей к точкам входа различных прикладных процессов. В терминологии TCP/IP такие системные очереди называются портами. Порт - это программное понятие, которое используется клиентом или сервером для посылки или приема сообщений; порт идентифицируется 16-битвым числом. Таким образом, адресом назначения, который используется транспортным объектом, является идентификатор (номер) порта прикладной службы. Номер порта в совокупности с номером сети и номером конечного узла однозначно определяют прикладной процесс в сети. Этот набор идентифицирующих параметров имеет название сокет (socket).

Назначение номеров портов прикладным процессам осуществляется либо централизованно, если эти процессы представляют собой популярные общедоступные службы (например, номер 21 закреплен за службой удаленного доступа к файлам FTP, a 23 - за службой удаленного управления telnet), либо локально для тех служб, которые еще не стали столь распространенными, чтобы закреплять за ними стандартные (зарезервированные) номера. Централизованное присвоение службам номеров портов выполняется организацией Internet Assigned Numbers Authority (IANA). Эти номера затем закрепляются и опубликовываются в стандартах Internet .

Локальное присвоение номера порта заключается в том, что разработчик некоторого приложения просто связывает с ним любой доступный, произвольно выбранный числовой идентификатор, обращая внимание на то, чтобы он не входил в число зарезервированных номеров портов. В дальнейшем все удаленные запросы к данному приложению от других приложений должны адресоваться с указанием назначенного ему номера порта.

Инициирующий соединение клиент, прежде чем пытаться установить соединение с удаленным сервером-приложением, запрашивает у своей ОС номер свободного порта. Порты с номерами 0 -1023 принято называть привилегированными, они практически все зарезервированы и не выделяются клиентским процессам. Это не означает, что не существует закрепленных номеров портов с большими номерами, но они используются гораздо реже и будучи свободными на данном хосте, вполне могут предоставляться в распоряжение программы-клиента.

UDP: User Datagramm Protocol

UDP простой, ориентированный на передачу датаграмм, протокол транспортного уровня: за один раз процесс выдает одну UDP датаграмму, в результате чего передается одна IP датаграмма. Это отличается от поток-ориентированных протоколов, таких как TCP, где количество данных, которое выдается приложением, практически не имеет отношения к количеству отправленных IP датаграмм.

На рисунке показана инкапсуляция UDP датаграммы в IP датаграмму:

UDP заголовок

На рисунке показаны поля, присутствующие в UDP заголовке.

Номера портов (port numbers) указывают на отправляющий и принимающий процессы. TCP и UDP используют номер порта назначения для демультиплексирования данных, поступающих от IP. Так как IP осуществляет демультиплексирование входящих IP датаграмм для TCP и UDP (с использованием значения протокола в IP заголовке), TCP просматривает номера портов TCP, а UDP - номера портов UDP. Номера портов TCP независимы от номеров портов UDP.

Поле длины UDP содержит длину в байтах UDP заголовка и UDP данных.

Контрольная сумма UDP Контpольная сумма UDP необязательна, значение 0 в поле КОНТРОЛЬНАЯ СУММА означает, что сумма не вычисляется. Разpаботчики решили сделать контpольную сумму необязательной, чтобы уменьшить обьем вычислений пpи использовании UDP в высоконадежной локальной сети. Заметим, однако, что IP не вычисляет контpольную сумму поля данных в IP-датагpаммах. Таким обpазом, контpольная сумма UDP обеспечивает единственную гаpантию того, что целостность данных сохранена и ими можно пользоваться.

Вычисление UDP контрольной суммы нетривиально, поскольку она включает не только заголовок UDP и данные, поступившие от прикладного уровня, но и псевдозаголовок, содержащий часть данных IP – уровня:

12-байтовые псевдозаголовки (используемые в UDP и TCP) содержат в себе определенные поля из IP заголовка. Это сделано для проверки, что данные достигли того пункта назначения, которому предназначались. Включение в псевдозаголовок 8-битного поля «протокол» позволяет принимающей стороне убедиться, что данные предназначены именно UDP, поскольку UDP и TCP используют одинаковые номера портов прикладных процессов.

На этом рисунке специально показана датаграмма с нечетной длиной, в этом случае требуется дополнительный байт для расчета контрольной суммы, поскольку она рассчитывается для целого количества 2-х байтовых слов. Длина UDP датаграммы, при расчете контрольной суммы, используется дважды.

Псевдозаголовок не инкапсулируется в IP – пакет, и, соответственно, не передаётся получателю. Не передается и байт дополнения. Отсюда следует, что для вычисления контрольной суммы принимающая сторона должна самостоятельно восстановить их.

Если получатель определил наличие ошибки, UDP датаграмма уничтожается, сообщение об ошибке не генерируется.

Видно, что UDP на самом деле достаточно тесно взаимодействует с сетевым уровнем еще на стадии формирования собственно датаграммы. Более того, очевидно, что ip – адрес места назначения (атрибут сетевого уровня) получить от кого либо кроме как от прикладного процесса он не может. Это показывает определенную условность деления стека TCP/IP на уровни стандартной модели.

Области использования UDP-протокола:

UDP подходит для процесса, который требует простой связи "запрос – ответ", мало заинтересованной в управлении потоком и контроле ошибок. Он обычно не используется для процесса, которому необходимо посылать большое количество данных, такого как FTP.

UDP подходит для процессов с внутренним механизмом управления потоком и контролем ошибок. Например, тривиальный протокол передачи файлов (Trivial File Transfer Protocol — TFTP) включает в себя механизмы управления потоком и контроля ошибок. Он может просто использовать UDP.

UDP подходит как транспортный протокол для многоадресного и широковещательного распространения. Многоадресные и широковещательные возможности вставлены в программное обеспечение UDP, но их нет в программном обеспечении TCP

UDP используется для процессов административного управления, таких как SNMP.

UDP применяется для нескольких протоколов обновления маршрута, таких как протокол информации маршрутизации (Routing Information Protocol –RIP).

TCP: Transmission Control Protocol

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

Термин "основанный на соединении" (connection-oriented) означает, что два приложения, использующие TCP (как правило, это клиент и сервер), должны установить TCP соединение друг с другом, после чего у них появляется возможность обмениваться данными.

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

Данные, поступающие от приложения, разбиваются на блоки определенного размера, которые будут отправлены. Блок данных, который передается от TCP в IP, называется сегментом (segment).

TCP обеспечивает свою надежность благодаря следующим характерным свойствам:

Подтверждения: Когда TCP посылает сегмент, он ожидает, что с удаленного конца придет подтверждение на этот сегмент. Если подтверждение не получено по истечении определенного времени, сегмент передается повторно. Для обеспечения этой возможности каждый передаваемый сегмент получает при отправке уникальный номер.

Контрольная сумма: Объект TCP осуществляет расчет контрольной суммы для своего заголовка сегмента и данных. Это контрольная сумма используется сторонами для обнаружения изменения данных в процессе передачи. Если сегмент прибывает с неверной контрольной суммой, объект TCP отбрасывает его и подтверждение не генерируется.

Упорядочение: Так как TCP сегменты передаются в виде IP датаграмм, а IP датаграммы могут прибывать беспорядочно, также беспорядочно могут прибывать и TCP сегменты. После получения данных объект TCP может по необходимости изменить их последовательность, в результате приложение получает данные в правильном порядке.

Отбрасывание дублей: IP датаграмма может быть продублирована и не существует алгоритмов, полностью предотвращающих появление таких дублей. Принимающий объект TCP отбрасывает продублированные данные.

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

Кроме надежности, для транспортного протокола важным является оптимальное использование ресурсов сети. В TCP используются различные алгоритмы для достижения этой цели.

TCP предоставляет для прикладного уровня полнодуплексный сервис. Это означает, что данные могут передаваться в каждом направлении независимо от другого направления.

Между двумя приложениями по TCP соединению осуществляется обмен потоком байтов. TCP обеспечивает сервис потока байтов (byte stream service). Если приложение на одном конце записало сначала 10 байт, затем 20 байт и затем еще 50 байт, приложение на другом конце соединения не может сказать какого размера была каждая запись. На другом конце эти 80 байт могут быть считаны, например, за 4 раза по 20 байт за каждый раз. Один конец соединения помещает поток байт в TCP, и точно так же идентичный поток байт появляется на другом конце.

TCP не интерпретирует содержимое байтов.