Протокол TCP Сети и системы телекоммуникаций Созыкин А.В.
ИМКН УрФУ2 План Место TCP в моделях OSI и TCP/IP Основные понятия TCP Установка соединения Скользящее окно Формат заголовка TСP Управление потоком и перегрузкой
ИМКН УрФУ3 Место в моделях OSI и TCP/IP Физический Модель OSIМодель TCP/IP Канальный Сетевой Транспортный Сеансовый Представления Прикладной Сетевых интерфейсов Сетевой Транспортный Прикладной
ИМКН УрФУ4 Транспортные протоколы TCP/IP Сетевых интерфейсов Сетевой Транспортный Прикладной EthernetWiFiDSL IP TCPUDP HTTPSMTPDNSFTP ICMP ARPDHCP ICMP DHCPARP ICMP DHCP
ИМКН УрФУ5 Протокол TCP Transmission Control Protocol (TCP) - протокол управления передачей TCP передает поток байт от одного процесса другому Сообщение TCP называется сегментом Особенность TCP: гарантия доставки и порядка следования данных
ИМКН УрФУ6 Поток байт Транспортная подсистема получает от приложения данные в виде потока байт Поток разбивается на отдельные части – сегменты Протокол TCP нумерует байты в потоке Сегменты не нумеруются Поток байт от приложения Сегмент Байт 0Байт 1024Байт 2048Байт 3072
ИМКН УрФУ7 Гарантия доставки Возможные проблемы при доставке: Потеря сегментов Изменение порядка доставки сегментов Повторная доставка сегментов Механизмы реализации: Нумерация сообщений Подтверждение получения сообщения Повторная отправка при отсутствии подтверждения
ИМКН УрФУ8 Подтверждение получения Байты Получил байты Байты Получил байты Байты Байты
ИМКН УрФУ9 Повторная доставка Байты Получил байты Байты Получил байты Байты Байты Получил байты
ИМКН УрФУ10 Нумерация сообщений Как выбрать номер для первого сообщения? Возможные проблемы: Пришел задержавшийся сегмент Первый сегмент потерян, сразу пришел второй Первый сегмент выслан повторно Начальные номера сегментов не повторяются Начальный номер выбирается случайным образом, затем номера увеличиваются
ИМКН УрФУ11 Соединение Соединение – договоренность между отправителем и получателем Соединение задает: Начальные номера для нумерации данных отправителя и получателя Объем данных, которые готов принять получатель Соединение в TCP дуплексное Данные могут передаваться в обе стороны Подтверждение получения и данные в одном сегменте
ИМКН УрФУ12 Установка соединения Простейшая схема: Запрос на установку соединения Ответ об установке соединения (или отказ) Проблемы: Потеря или повторная доставка сегментов Применяемая схема: Трехкратное рукопожатие
ИМКН УрФУ13 Трехкратное рукопожатие Запрос на соединение Отправляю байт 1024 Запрос на соединение Получил байт 1024 Отправляю байт 3072 Отправляю байт 1024Получил байт 1024 Отправляю байт 3072 Отправляю байт 1025 Получил байт 3072 Подтверждение соединение Отправляю байт 1025 Получил байт 3072 Соединение установлено Получил байт 1025 Отправляю байт 3073
ИМКН УрФУ14 Скользящее окно Ожидание подтверждения приводит к снижению производительности Пример сети: Пропускная способность 1 Гб/с Время доставки сегмента – 100 мс Количество сегментов в секунду – 5 шт.
ИМКН УрФУ15 Скользящее окно Разны варианты подтверждений: Остановка и ожидание – передача данных после получения подтверждения каждого сообщения (Wi-Fi, канальный уровень) Скользящее окно – передача заданного количества сообщений без ожидания подтверждения (TCP, транспортный уровень) Размер окна – количество байтов данных, которые могут быть переданы без получения подтверждения Кумулятивное подтверждение – подтверждение приема указанного байта данных и всех предыдущих
ИМКН УрФУ16 Остановка и ожидание Байты Получил байты Байты Получил байты Байты
ИМКН УрФУ17 Скользящее окно Байты Байты Получил байты до 3072 Байты
ИМКН УрФУ18 Формат заголовка TCP 32 бита Порт отправителяПорт получателя Порядковый номер Номер подтверждения Размер окна FINFIN SYNSYN RSTRST PSHPSH ACKACK URGURG Длина заголо- вка Контрольная суммаУказатель на срочные данные Параметры (не обязательно) Данные (не обязательно)
ИМКН УрФУ19 Формат заголовка TCP Порядковый номер – номер пересылаемого байта в сегменте Номер подтверждения – номер следующего ожидаемого байта Кумулятивное подтверждение, что все предыдущие байты получены
ИМКН УрФУ20 Формат заголовка TCP Длина заголовка TCP – длина в 32-х разрядных словах (4 бита) Заголовок может включать параметры, поэтому длина может быть разной 4 бита не используется Флаги – 6 шт. по 1 биту
ИМКН УрФУ21 Формат заголовка TCP Размер окна – количество байт, которое может быть принято получателем Контрольная сумма – контрольная сумма заголовка и данных TCP Служит для повышения надежности Не обязательна Указатель на срочные данные – смещение от текущего порядкового номера байта до срочных данных в сегменте
ИМКН УрФУ22 Флаги TCP URG – флаг наличия в сегменте срочных данных Используется совместно с полем «Указатель на срочные данные» Позволяет передавать сигналы от отправителя к получателю (прерывания) ACK – флаг подтверждения Если флаг ACK установлен, значит поле «Номер подтверждения» содержит осмысленные данные
ИМКН УрФУ23 Флаги TCP PSH – флаг выталкивания (PUSH) Просит получателя сразу отправлять данные приложению, без буферизации Флаги RST, SYN и FIN используются для управления соединением SYN – установка соединения FIN, RST – разрыв соединения
ИМКН УрФУ24 Установка соединения TCP использует схему «Трехкратного рукопожатия» Флаг SYN – признак установки соединения SYN = 1, ACK = 0 – запрос установки соединения (CONNECTION REQUEST) SYN = 1, ACK = 1 – подтверждение установки соединения (CONNECTION ACCEPT) SYN = 0, ACK = 1 – завершение установки соединения
ИМКН УрФУ25 Установка соединения SYN = 1 ACK = 0 Порядковый номер: 1024 SYN = 1 ACK = 1 Порядковый номер: 3072 Номер подтверждения: 1025 Отправляю байт 1024Получил байт 1024 Отправляю байт 3072 Отправляю байт 1025 Получил байт 3072 SYN = 0 ACK = 1 Порядковый номер: 1025 Номер подтверждения: 3073 Соединение установлено Получил байт 1025 Отправляю байт 3073
ИМКН УрФУ26 Разрыв соединение Соединение в TCP дуплексное Данные могут передаваться в обе стороны Схема разрыва соединения Одновременное (обе стороны разорвали соединение) Одностороннее (сторона прекращает передавать данные, но может принимать) Флаг FIN – одностороннее закрытие соединение Соединение закрывается, когда обе стороны отправят сегмент с установленным флагом FIN Флаг RST – разрыв соединения из-за критической ситуации Одновременный разрыв соединения обеими сторонами
ИМКН УрФУ27 Параметры TCP Параметры в заголовке TCP являются необязательными, но некоторые используются широко Примеры параметров: Максимальный размер сегмента (Maximum Segment Size, MSS) Масштаб окна - позволяет увеличить размер окна до 1 ГБ, что эффективно для быстрых каналов Метки времени Выборочное подтверждение (Selective Acknowledgment, SACK) – подтверждение диапазонов принятых байт
ИМКН УрФУ28 Управление потоком в TCP Управление потоком позволяет регулировать скорость передачи данных Предотвращение «затопления» быстрым отправителем медленного получателя Сеть может быть свободна, но приложение не готово получить данные Транспортная подсистема работает с приложениями: Приложение не обязано забирать данные, как только они появились Транспортная подсистема не обязана передавать данные приложению или в сеть, как только она их получила
ИМКН УрФУ29 Управление потоком в TCP Для управления потоком TCP использует механизм скользящего окна Получатель записывает в поле заголовка TCP «Размер окна» объем данных, которые он готов принять Размер окна может меняться динамически Приложение читает данные из буфера быстро – окно растет Приложение читает медленно, буфер заполнен – окно уменьшается
ИМКН УрФУ30 Управление потоком в TCP Получатель может установить окно нулевого размера Передача данных прекращается не зависимо от нагрузки на сеть Продолжение передачи: Получатель повторно отправляет подтверждение с ненулевым размеров окна Отправитель направляет запрос «window probe» - просьба повторить подтверждение и размер окна
ИМКН УрФУ31 Производительность TCP Некоторые приложения читают и пишут данные маленькими порциями Эмуляторы терминала telnet или ssh При нажатии каждой клавиши данные передаются на сервер – 1 байт данных Для передачи 1 байта данных требуется передать IP-пакет длиной 41 байт (20 байт заголовок IP, 20 байт заголовок TCP, 1 байт данных) Высокие накладные расходы
ИМКН УрФУ32 Производительность TCP Отложенные подтверждения Задержка отправки подтверждения до 500 мс в надежде получить данные Терминал за 500 мс выдает эхо, данные отправляются вместе с подтверждением Алгоритм Нагля (Nagles algorithm) Получателю отправляется только первая порция маленьких данных Остальные данные буферизируются, пока не придет подтверждение Данные из буфера отправляются в одном сегменте Продолжается накопление данные в буфере, пока не придет новое подтверждение
ИМКН УрФУ33 Производительность TCP Синдром «глупого окна» Приложение читает данные из буфера по символам Буфер заполнен, размер окна 0 Приложение прочитало один байт – размер окна увеличился до 1 Отправитель передал 1 байт данных (IP-пакет 41 байт) Буфер заполнен, размер окна 0
ИМКН УрФУ34 Таймеры TCP Таймер повторной передачи Время ожидания подтверждения получения сегмента Если подтверждения нет, сегмент отправляется вновь Таймер настойчивости Время, через которое отправляется запрос «window probe» Таймер проверки активности Используется при длительном простое соединения Задает время, через которое должна выполниться проверка работоспособности соединения Таймер закрытия соединения Задает ожидание равное двойному времени жизни сегмента За это время все сегменты соединения должны уйти из сети
ИМКН УрФУ35 Контроль перегрузки в TCP Скорость передачи данных по сети определяется не только возможностями получателя, но и нагрузкой на сеть Механизмы регулирования скорости: Окно управления потоком Окно перегрузки
ИМКН УрФУ36 Окна перегрузки и управления потоком Окно управления потоком: Задается получателем (поле «Размер окна» в заголовке TCP) Размер определяется возможностями приложения читать данные из буфера Окно перегрузки: Задается отправителем Размер определяется загрузкой сети Размер скользящего окна определяется меньшим из окон перегрузки или управления потоком
ИМКН УрФУ37 Окно перегрузки Размер окна перегрузки определяется нагрузкой на сеть Сигнал о перегрузке – потеря пакетов Считается, что пакеты редко теряются из-за ошибок передачи Если ошибки в среде встречаются часто, то это решается на канальном уровне (например, Wi-Fi) Пакеты отбрасываются маршрутизаторами при перегрузках
ИМКН УрФУ38 Управление размером окна перегрузки Транспортная система отправителя не знает, какие сетевые соединения встретятся по пути к получателю Как выбрать размер окна перегрузки? Слишком маленький размер приведет к низкой скорости передачи данных из-за постоянного ожидания подтверждений Слишком большой размер окна приведет к низкой скорости передачи данных из-за перегрузки сети
ИМКН УрФУ39 Управление размером окна перегрузки TCP использует следующие механизмы определения размера окна перегрузки: Аддитивное увеличение мультипликативное уменьшение (AIMD) Медленный старт TCP начинает работу с медленного старта, затем переходит на AIMD
ИМКН УрФУ40 Медленный старт Особенности медленного старта: Первоначально размер окна перегрузки устанавливается маленьким (1 или 4 сегмента) При каждом получении подтверждения отправляется 2 сегмента Экспоненциальный рост размера окна (1 сегмент, 2, 4, 8 и т.д.) При потере сегмента медленный старт начинается заново
ИМКН УрФУ41 Метод AIMD Особенности метода AIMD При получении подтверждения размер окна перезагрузки увеличивается на 1 (аддитивное увеличение) При потере сегмента размер окна перезагрузки уменьшается в 2 раза (мультипликативное уменьшение) Отличия от медленного старта: Размер окна растет медленнее При потере сегмента не нужно начинаться все с начала
ИМКН УрФУ42 Размер окна перегрузки TCP Размер окна Время Аддитивное увеличение Порог медленного старта Медленный старт Потеря пакета Мультипликативное уменьшение
ИМКН УрФУ43 Определение размера скользящего окна Приложение просит много данных, но сеть перегружена: Окно управления потоком: 40Кбайт Окно перегрузки: 20 Кбайт Скользящее окно: 20 Кбайт Сеть свободна, но приложение ограничивает скорость : Окно управления потоком: 20Кбайт Окно перегрузки: 40 Кбайт Скользящее окно: 20 Кбайт
ИМКН УрФУ44 Итоги Место TCP в моделях OSI и TCP/IP Основные понятия TCP Установка соединения Скользящее окно Формат заголовка TСP Управление потоком и перегрузкой
ИМКН УрФУ45 Вопросы?