Лекция 4. Транспортный уровень.

4.1 Роли транспортного уровня

- Отслеживание индивидуальных сеансов, и мультиплексирование сеансов

- Сегментирование данных

- Сборка сегментов в исходный блок данных

- Идентификация приложений по номерам портов

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

Протоколы транспортного уровня могут предоставлять:

- Сеансы ориентированные на соединение (Connection-oriented conversations)

- Надежность доставки (Reliable delivery)

- Реконструкцию данных по номерам сегментов (Ordered data reconstruction)

- Контроль потока (Flow control)

Для обеспечения надежности доставки протоколы транспортного уровня применяют:

- учет передаваемых данных

- подтверждения о приеме сегментов

- повторную пересылку утерянных сегментов

Это вносит дополнительную нагрузку на сеть (overhead) за счет служебных сообщений протокола.

Два основных протокола транспортного уровня:

- TCP используется протоколами требующими надежность доставки

- UDP используется протоколами не требующими надежность доставки

Для того чтобы отличать сеансы разных приложений друг от друга используются номера портов. Сокет - позволяет уникально идентифицировать сеанс связи <IP адрес:Номер порта>.

За назначение портов протоколу отвечает организация IANA.

- Хорошо известные (well known), 0 - 1023, закреплены за самыми популярными протоколами

- Зарегистрированные (registered), 1024 - 49151, могут быть выданы протоколу самим разработчиком без обращения в IANA

- Динамические или приватные (Dynamic or Private), 49152 - 65535, используются временно в момент установления сеанса связи

Команда netstat выдает список сеансов TCP открытых в ОС. Так же показывает прослушиваемые службами порты.

4.2 Протокол TCP

Заголовок TCP имеет размер в 20 байт, размер заголовка не фиксирован и может изменяться. используется протоколами требующими надежность доставки данных, электронная почта, http, telnet, ssh, ftp и т.д.

Сервер не может иметь несколько служб слушающий один и тот же порт.

В качестве порта источника клиент выбирает любой порт из динамического и зарегистрированного диапазона.

Трехстороннее рукопожатие (three-way handshake) - процесс установления сеанса TCP.

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

Закрытие сенса происходи в 4 этапи с использованием сегментов с флагами FIN и ACK, т.к. сеанс TCP является дуплексным.

Так же, флаг URG указывает на срочность сегмента, PSH - проталкивает накопленные в буфере приемника сегменты дальше, RST - сбрасывает процесс установления сеанса связи.

4.3 Управление сеансами TCP

При установлении сеанса TCP задается номер последовательности(sequence number), он используется для учета сколько байт передается в сегменте и для выявления потерь. Для подтверждения полученных данных используется Номер потдвеждения (Acknowledgment Number).

Количество байт передаваемых без подтверждения называется размером окна (window size). Первоначальный размер окна определяется источником и приемником при трехстороннем рукопожатии.

Узел хранит копии отправленных сегментов  пока не получит подтверждение об их успешном получении. Если один из сегментов теряется, пересылаются все сегменты окна к которому он принадлежал.

Выборочное подтверждение (Selective Acknowledgements) позволяет узлам в случае потери сегмента, переслать повторно только один сегмент.

TCP имеет механизмы управления потоко передаваемых данных (flow control). Одним из таких механизмов является - метод скользящего окна. Он позволяет динамически изменять размер окна в процессе передачи данных, подстраиваясь под состояние сети.

4.4 Протокол UDP

Размер заголовка 8 байт. Протокол не устанавливает предварительного соединения и обеспечивает не гарантированную доставку данных. Используется для потокового видео, голоса и онлайн игр.

UDP не нумерует сегменты, и в узле приемнике передает их приложению в том порядке, в каком он их получил из сети (а не в том, в котором они были отправлены).