Глава 8

Транспортный уровень

Протоколы TCP и UDP: порты, сокеты, установка сеанса, надёжная и ускоренная передача данных

TCPUDP0 – 65535

Ананко Софья Михайловна
Качур Анна Юрьевна

Введение

Цели данной главы

  1. 1
    Протоколы, используемые на транспортном уровне;
  2. 2
    Функции и задачи данных протоколов;
  3. 3
    Установление сеанса и надежная передача данных с использованием протокола TCP;
  4. 4
    Ускоренная передача данных через протокол UDP.
Введение

Протоколы транспортного уровня

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

TCPнадёжная доставка, установление сеанса
UDPускоренная передача без подтверждений
Введение

Значение и функции транспортного уровня

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

Транспортный уровень может поддерживать несколько одновременных сеансов связи, сформированных несколькими приложениями, при этом отслеживая каждый процесс отдельно.

7Прикладной
6Представления
5Сеансовый
4Транспортный
3Сетевой
2Канальный
1Физический
Сегменты и потоки

Сегментация TCP/UDP

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

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

Файл300 КБзаг.1460байтзаг.1460байтзаг.1460байтзаг.1460байтсегменты по 1460 байт300 КБ = 206 фрагментов
Сегменты и потоки

Мультиплексирование

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

Приложение 1Приложение 2Приложение 3один канал передачиMUX
Порты и сокеты

Адресация транспортного уровня

Идентификация приложений на транспортном уровне осуществляется с использованием портов.

Порт – это идентификатор приложения (протокола), которое обрабатывает текущий сегмент на устройстве отправителя и на устройстве получателя.

Порты являются дополнительным компонентом IP-адреса и представляют собой значения в диапазоне от 0 до 65535. Они указываются в заголовке TCP/UDP и состоят из 16-битных чисел, отвечающих за порт источника и порт назначения соответственно.

Номер порта представлен вместе с IP-адресом в следующем формате:

192.168.1.19:80
IP-адрес узлапорт приложения

В таблице на следующем слайде показаны наиболее известные порты и приложения, которые они идентифицируют.

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

Наиболее известные порты

СервисПорт
HTTP80
SSH22
DNS53
POP3110
IMAP143
FTP (команды)21
FTP (передача)20
СервисПорт
TFTP69
Telnet23
HTTPS443
NTP123
DHCP (клиент)67
DHCP (сервер)68
SMTP25
Порты и сокеты

Сокеты и принцип адресации

Сокет – это сочетания IP-адреса источника с номером порта источника и IP-адреса назначения с номером порта назначения. Такая связка «IP-адрес:Порт» позволяет однозначно определить конечную точку доставки сообщения, потому что оно будет адресовано не просто какому-то устройству, а конкретному приложению на данном устройстве.

источникIP-адрес:54824назначениеIP-адрес:443сокет-пара
Порты и сокеты

Группы номеров портов

Всего существует три группы портов: общеизвестные, зарегистрированные и динамические/частные.

0 – 1023

Известные порты

Общеизвестные порты зарезервированы для определенных служб и приложений. Они используется, например, веб-службами (HTTP - порт 80) / почтовыми клиентами (POP3 - порт 110).

1024 – 49151

Зарегистрированные порты

Зарегистрированные порты регистрируется организацией IANA для каких-либо нестандартных служб, в основном, это службы, которыми пользуются не все пользователи, к примеру, RADIUS-сервер использует порт 1812 для аутентификации пользователей.

49152 – 65535

Динамические/частные порты

Динамические/частные порты присваиваются, когда пользователь производит инициализацию сеанса связи при подключении к определенному сервису.

iana.org/assignments/service-names-port-numbers

Протокол TCP

Протокол TCP

TCP - один из протоколов транспортного уровня. Его главное отличие - обеспечение надежности доставки данных.

Для осуществления гарантированной доставки протокол использует следующие функции:

  1. 1
    Отслеживание количества сегментов, отправленных на определенный узел;
  2. 2
    Подтверждение получения данных;
  3. 3
    Если получение данных не подтвердилось, инициирование повторной передачи сегментов.

Основные задачи протокола TCP:

  1. 1
    Доставка сегментов в одинаковом порядке;
  2. 2
    Установление сеанса связи;
  3. 3
    Регулирование потока передачи данных.
Протокол TCP

Заголовок TCP-сегмента

Поля заголовка по порядку, ширина строки – 32 бита. Наведите курсор на поле, чтобы увидеть его назначение.

08162431
Порт источника16 битПорт источника и порт назначения (по 16 бит) определяют порты отправителя и получателя.
Порт назначения16 битПорт источника и порт назначения (по 16 бит) определяют порты отправителя и получателя.
Порядковый номер32 битаПорядковый номер (32 бита) в сегменте используется для контроля порядка сегментов.
Номер подтверждения32 битаНомер подтверждения (32 бита) необходим для подтверждения успешного получения узлом определенного сегмента.
Длина заг.4 битаДлина заголовка (смещение данных) (4 бита) – длина заголовка сегмента TCP в «словах», то есть в группах по 4 байта (32 бита).
Резерв6 битЗарезервировано (6 бит) – это биты, которые могут быть использованы в будущем.
Флаги6 битУправляющие биты (6 бит) содержат флаги, определяющие назначение и функции сегмента TCP.
Размер окна16 битРазмер окна (16 бит) указывает количество байт данных, которые получатель может принять в данный момент.
Контрольная сумма16 битКонтрольная сумма (16 бит) используется для проверки наличия ошибок в сегменте.
Срочность16 битСрочность (16 бит) определяет данные, которые должны быть переданы сразу.
Данные
Протокол TCP

Флаги TCP: SYN, ACK, FIN

Для управления сеансом связи в заголовке протокола TCP используется поле длиной 6 бит. Данные биты называются флагами.

SYNACKFINRSTPSHURG
SYN

SYN – флаг синхронизации порядковых номеров. Когда флаг SYN установлен, в поле «порядковый номер» передается изначальный номер последовательности (Initial Sequence Number, ISN). Первый байт данных будет передан в следующем пакете с номером последовательности, равным ISN+1.

ACK

ACK – флаг подтверждения. Данный флаг указывает на то, что в поле «номер подтверждения» указан следующий порядковый номер сегмента, который ожидается для получения на приемной стороне. Также, данный флаг подтверждает приём предыдущих сегментов.

FIN

FIN – флаг завершения сеанса связи. Если такой флаг установлен, это означает, что отправитель сигнализирует о завершении передачи данных и не планирует отправлять какие-либо дополнительные данные в рамках текущего соединения.

Протокол TCP

Флаги TCP: RST, PSH, URG

SYNACKFINRSTPSHURG
RST

RST – флаг сброса соединения. Установка этого флага означает немедленный разрыв соединения и игнорирование всех последующих входящих данных из этого соединения.

PSH

PSH – флаг функции push. Когда такой флаг установлен, это означает, что необходимо передать все данные из буфера памяти в обработку, даже если он не был заполнен. Протокол TCP использует буферизированную передачу данных как на отправке, так и на приеме. То есть, данные перед отправкой поступают в буфер, и при его заполнении отправляются по адресу. Такой метод позволяет снизить количество служебного трафика (заголовков) в сети.

URG

URG – флаг указателя важности. Установка данного флага означает, что данные в пакете необходимо обработать в приоритетном порядке.

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

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

  1. 1
    Узел А, инициализирующий сессию для обмена данными «клиент-сервер», отправляет на узел Б запрос SYN;
  2. 2
    Узел Б подтверждает запрос на инициализацию сессии для обмена данными «клиент-сервер», отправляет узлу А ответ ACK и запрос SYN «сервер-клиент»;
  3. 3
    В конце узел А подтверждает запрос SYN «сервер-клиент» и отправляет ACK узлу Б.
Узел АУзел БSYNSYN + ACKACKTCP-соединение установлено
Установка соединения

Установка TCP-соединения: Seq и Ack

  1. 1
    Инициатор TCP-соединения (ПК1) отправляет первый TCP-сегмент с установленным флагом SYN. Начальный порядковый номер (a) является случайно сгенерированным числом. Номер подтверждения равен 0, потому что ранее от ПК 2 не поступали сегменты.
  2. 2
    После получения корректного TCP-сегмента с флагом SYN получатель (ПК2) отвечает TCP-сегментом с установленными флагами SYN и ACK. Начальный порядковый номер (b) является случайно сгенерированным числом. Поскольку сегмент является ответом для ПК1, номер подтверждения равен a+1.
  3. 3
    После получения сегмента с флагами SYN и ACK ПК1 отвечает сегментом с флагом ACK, порядковый номер равен a+1, а номер подтверждения – b+1. После того, как ПК2 получает сегмент, устанавливается TCP-соединение.
ПК1ПК2SYN Seq = a Ack = 0SYN, ACK Seq = b Ack = a+1ACK Seq = a+1 Ack = b+1TCP-соединение установлено
Установка соединения

Передача данных: порядковые номера

Предположим, что ПК1 необходимо отправить сегменты данных на ПК2. Процесс передачи будет следующим:

  1. 1
    ПК1 нумерует каждый байт, отправляемый через TCP-соединение. Предположим, что номер первого байта равен a+1. Номер второго байта будет равен a+2, третьего байта – a+3 и так далее.
  2. 2
    ПК1 использует номер первого байта каждого сегмента данных в качестве порядкового номера и отправляет TCP-сегмент.
  3. 3
    После получения сегмента ПК2 необходимо подтвердить его и запросить следующий: порядковый номер (a+1) + длина полезной нагрузки = порядковый номер первого байта следующего сегмента (a+1+12).
  4. 4
    ПК1 обнаруживает, что номер подтверждения равен a+1+12, что указывает на получение сегментов от a+1 до a+12. Порядковый номер будущего сегмента должен быть a+1+12.

Чтобы повысить эффективность отправки, отправитель может отправлять несколько сегментов данных одновременно, которые затем по очереди будет подтверждать получатель.

ПК1ПК2байтa+1a+2a+3a+4a+5a+6a+7a+8a+9a+10a+11a+12ACK Ack = a+1+12Seq = a+1+12
Установка соединения

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

1Первый этапSYN
Порт источника54824
Порт назначения443
Sequence Number0
Sequence Number (raw)3638817700
Next Sequence Number1
Acknowledgment number0
ФлагиSYN
Window64240

Клиент отправляет запрос на сервер, используя в качестве порта источника частный порт 54824, а в роли порта назначения – общеизвестный порт 443 (HTTPS). Ноль в Sequence Number обозначает порядковый номер относительно начала сессии; raw – настоящий, «сырой» номер.

2Второй этапSYN, ACK
Порт источника443
Порт назначения54824
Sequence Number0
Sequence Number (raw)1565342372
Next Sequence Number1
Acknowledgment number1
Acknowledgment (raw)3638817701
Window65160

В ответе роли портов меняются местами. Ack указан 1 и 3638817701, потому что +1 к начальному номеру последовательности. Размер окна изменился – механизм «скользящего окна».

3Третий этапACK
Порт источника54824
Порт назначения443
Sequence Number1
Sequence Number (raw)3638817701
Acknowledgment number1
Acknowledgment (raw)1565342373
ФлагиACK
Window502

Вновь порты поменялись местами, потому что это данные от клиента для сервера. Последовательность сменилась на единицу. Размер окна будет изменяться в зависимости от параметров сторон и загруженности сети.

Надёжность TCP

Подтверждение и размер окна

  1. 1
    При трехстороннем квитировании в TCP-соединении обе стороны уведомляют друг друга о максимальном количестве байтов (размере буфера), которые могут быть получены локальной стороной с помощью поля Окно.
  2. 2
    После установления TCP-соединения отправитель отправляет данные указанного количества байтов на основе размера окна, заявленного получателем.
  3. 3
    После получения данных получатель хранит данные в буфере и ожидает получения буферизированных данных приложением верхнего уровня. После получения данных приложением верхнего уровня освобождается соответствующее пространство в буфере.
  4. 4
    Получатель сообщает текущий приемлемый размер данных (окна) в соответствии с его размером буфера.
  5. 5
    Отправитель отправляет определенный объем данных в зависимости от текущего размера окна получателя.
Надёжность TCP

Размер окна: пример передачи

Пример передачи данных при TCP-соединении с размером окна, равным 3000 байт, который был согласован в процессе установления TCP-соединения. После передачи получателю 3000 байт, последний уведомляет отправителя об успешном приеме сообщением с флагом ACK, и отправитель начинает передавать следующий блок данных.

Узел АУзел Бокно 3000 байт1500 байт1500 байтожидание подтвержденияACK 30011500 байт1500 байт
Надёжность TCP

Потеря данных и повторная передача

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

При получении сегментов целевым узлом подтверждаются только те данные, которые поступили в непрерывной последовательности байт. Если после истечения таймаута узел-отправитель не получил подтверждение о доставке, он повторно отправляет сегменты, начиная с последнего полученного подтверждения (ACK).

К примеру, были получены сегменты с порядковыми номерами от 1 до 3000 и от 6001 до 9000, то номер ACK будет равен 3001.

ОтправительПолучатель1–30003001–60006001–9000потерянACK = 3001повтор 3001–6000
Надёжность TCP

Завершение TCP-сеанса

  1. 1
    После завершения отправки данных, узел А отправляет сегмент с установленным в заголовке флагом FIN для прекращения сессии «клиент-сервер»;
  2. 2
    Узел Б принимает запрос на завершение соединения и отправляет подтверждение ACK узлу А;
  3. 3
    Узел Б отправляет сегмент с установленным в заголовке флагом FIN для прекращения сессии «сервер-клиент»;
  4. 4
    Узел А, в свою очередь, отправляет ответ ACK для подтверждения получения FIN от узла Б.
Узел АУзел БFINACKFINACK
Надёжность TCP

Завершение TCP-сеанса: ПК1 и ПК2

  1. 1
    ПК1 отправляет TCP-сегмент с установленным флагом FIN. Сегмент не содержит данных.
  2. 2
    После получения ПК1 сегмента TCP ПК2 отвечает сегментом TCP с установленным флагом ACK.
  3. 3
    ПК2 проверяет необходимость отправки данных. Если необходимо, ПК2 отправляет данные, а затем TCP-сегмент с флагом FIN для закрытия соединения. Если нет, ПК2 напрямую отправляет TCP-сегмент с установленным флагом FIN.
  4. 4
    После получения TCP-сегмента с установленным флагом FIN ПК1 отвечает сегментом с флагом ACK. Затем TCP-соединение разрывается в обоих направлениях.
Надёжность TCP

Установление TCP-соединения и управление потоком

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

При установлении сеанса связи задается начальный порядковый номер сеанса (ISN), представляющий собой случайное начальное значения счетчика байт, которые были переданы целевому узлу. При дальнейшей передаче сегментов указанное число увеличивается на определенное число байт, что позволяет контролировать передачу данных.

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

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

узел назначениясегмент 2№ 2сегмент 3№ 3сегмент 1№ 1ISN
Протокол UDP

Функции протокола UDP

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

Узел АУзел Бпотерянная датаграмма повторно не отправляется
Протокол UDP

Основные характеристики протокола UDP

Основными характеристиками протокола UDP являются:

  • Отсутствие установления сеанса связи;
  • Отсутствие повторной отправки потерянных сегментов;
  • Наличие высокоскоростного потока.

Датаграмма – блок информации, передающийся с помощью протокола UDP, без гарантированной доставки на узел назначения.

Части сообщения в UDP, передающиеся без предварительного установления канала и последующей гарантии передачи, называются датаграммами. У датаграммы есть заголовок, состоящий из 8 байт:

Порт источника16 бит
Порт назначения16 бит
Длина16 бит
Контрольная сумма16 бит
Данные
Протокол UDP

Сравнение функций протоколов TCP и UDP

ПараметрыTCPUDP
Гарантия доставкиЯвляется надежным протоколом транспортного уровня, гарантирует доставку сообщения до узла назначенияНе обеспечивает надежную доставку сообщений
Упорядоченная доставкаЕсть. Для того чтобы воссоздать исходный порядок сегментов, протокол TCP использует порядковые номера в заголовках каждого сегментаНет. Протокол UDP не использует порядковые номера датаграмм, поэтому не восстанавливает их исходный порядок, а просто пересылает приложению
Установка соединенияУстанавливает соединение перед отправкой данныхНе устанавливает соединение
Повторная передача данныхПовторная передача сегментов в случае потериНет повторной передачи
Скорость передачиИз-за дополнительных функций гарантии доставки имеет увеличенное время передачи данныхИмеет высокую скорость передачи данных
Сферы примененияПередача сообщений электронной почты, HTML-страниц, FTP, SMTP, DNSTFTP, DHCP, VoIP, DNS
Протокол UDP

Основные типы приложений, которые используют UDP

TFTP

Приложения, которые могут самостоятельно гарантировать полную передачу данных. В таком случае, контроль правильности передачи данных осуществляется приложением 7-го уровня модели OSI, а не самим протоколом;

DHCP

Приложения, осуществляющие только отправку запросов и получение ответов;

VoIP

Приложения для передачи мультимедийного контента в режиме реального времени.

Тренажёры

Тренажёр: номера портов

Какой порт использует сервис HTTP?
0 / 0
К какой группе относится порт 443?
Тренажёры

Тренажёр: порядковые номера

0 / 0

Правило из лекции

Порядковый номер + длина полезной нагрузки = порядковый номер первого байта следующего сегмента.

В рукопожатии: ответ на SYN с номером a содержит номер подтверждения a+1; третий сегмент – порядковый номер a+1 и номер подтверждения b+1.

Подтверждаются только данные, поступившие в непрерывной последовательности байт.

Итог

Проверь себя

1 / 8верно: 0