Лекция 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 не нумерует сегменты, и в узле приемнике передает их приложению в том порядке, в каком он их получил из сети (а не в том, в котором они были отправлены).