Год документирования первой версии протокола tcp.  Транспортный протокол TCP

Авто 21.10.2019
Авто

Протоколы TCP/IP основа работы глобальной сети Интернет. Если быть более точным, то TCP/IP это список или стек протоколов, а по сути, набор правил по которым происходит обмен информации (реализуется модель коммутации пакетов).

В этой статье разберем принципы работы стека протоколов TCP/IP и попробуем понять принципы их работы.

Примечание: Зачастую, обревиатурой TCP/IP называют всю сеть, работающую на основе этих двух протоколов, TCP и IP.

В модель такой сети кроме основных протоколов TCP (транспортный уровень) и IP (протокол сетевого уровня) входят протоколы прикладного и сетевого уровней (смотри фото). Но вернемся непосредственно к протоколам TCP и IP.

Что такое протоколы TCP/IP

TCP — Transfer Control Protocol . Протокол управления передачей. Он служит для обеспечения и установление надежного соединения между двумя устройствами и надежную передачу данных. При этом протокол TCP контролирует оптимальный размер передаваемого пакета данных, осуществляя новую посылку при сбое передачи.

IP — Internet Protocol. Интернет протокол или адресный протокол — основа всей архитектуры передачи данных. Протокол IP служит для доставки сетевого пакета данных по нужному адресу. При этом информация разбивается на пакеты, которые независимо передвигаются по сети до нужного адресата.

Форматы протоколов TCP/IP

Формат IP протокола

Существуют два формата для IP адресов IP протокола.

Формат IPv4. Это 32-битовое двоичное число. Удобная форма записи IP-адреса (IPv4) это запись в виде четырёх групп десятичных чисел (от 0 до 255), разделённых точками. Например: 193.178.0.1.

Формат IPv6. Это 128-битовое двоичное число. Как правило, адреса формата IPv6 записываются в виде уже восьми групп. В каждой группе по четыре шестнадцатеричные цифры разделенные двоеточием. Пример адреса IPv6 2001:0db8:85a3:08d3:1319:8a2e:0370:7889.

Как работают протоколы TCP/IP

Если удобно представьте передаче пакетов данных в сети, как отправку письма по почте.

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

Протокол IP

Каждый компьютер в сети имеют свой уникальный адрес. В глобальной сети Интернет, компьютер имеет этот адрес, который называется IP-адрес (Internet Protocol Address).

По аналогии с почтой, IP- адрес это номер дома. Но номера дома для получения письма недостаточно.

Передаваемая по сети информация передается не компьютером, как таковым, а приложениями, установленными на него. Такими приложениями являются сервер почты, веб-сервер, FTP и т.п. Для идентификации пакета передаваемой информации, каждое приложение прикрепляется к определенному порту. Например: веб-сервер слушает порт 80, FTP слушает порт 21, почтовый SMTP сервер слушает порт 25, сервер POP3 читает почту почтовых ящиков на порте 110.

Таким образом, в адресном пакете в протоколе TCP/IP, в адресатах появляется еще одна строка: порт. Аналог с почтой — порт это номер квартиры отправителя и адресата.

Пример:

Source address (Адрес отправителя):

IP: 82.146.47.66

Destination address (Адресполучателя):

IP: 195.34.31.236

Стоит запомнить: IP адрес + номер порта — называется «сокет». В примере выше: с сокета 82.146.47.66:2049 пакет отправляется на сокет 195.34.31.236: 53.

Протокол TCP

Протокол TCP это протокол следующего после протокола IP уровня. Предназначен этот протокол для контроля передачи информации и ее целостности.

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

Транспортный протокол TCP скрывает от протоколов высшего уровня (физического, канального, сетевого IP все проблемы и детали передачи данных).

Название данного протокола - Internet Protocol - отражает его суть: он должен передавать пакеты между сетями. В каждой очередной сети, лежащей на пути перемещения пакета, протокол IP вызывает средства транспортировки, принятые в этой сети, чтобы с их помощью передать этот пакет на маршрутизатор, ведущий к следующей сети, или непосредственно на узел-получатель.

Протокол IP относится к протоколам без установления соединений. Перед IP не ставится задача надёжной доставки сообщений от отправителя к получателю, он обрабатывает каждый IP-пакет как независимую единицу, не имеющую связи ни с какими другими пакетами. В протоколе IP нет механизмов, обычно применяемых для увеличения достоверности конечных данных: отсутствует квитирование, нет процедуры упорядочивания, повторных передач или других подобных функций. Если во время продвижения пакета произошла какая-либо ошибка, то протокол IP по своей инициативе ничего не предпринимает для её исправления. Все вопросы обеспечения надёжности доставки данных по составной сети в стеке TCP/IP решает протокол ТСР, работающий непосредственно над протоколом IP.

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

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

Структура IP-пакета

IP-пакет состоит из заголовка и поля данных. Заголовок, как правило, имеющий длину 20 байт, имеет следующую структуру рис.

Рис. 1. Структура заголовка IP-пакета.

Поле Номер версии (Version)указывает версию протокола IP, сейчас используется версия IPv4 и готовится переход на версию IРv6.

Поле Длина заголовка (IHL) указывает значение длины заголовка, измеренное в 32-битовых словах. Обычно заголовок имеет длину в 20 байт (пять 32-битовых слов), но при увеличении объёма служебной информации эта длина может быть увеличена за счёт использования дополнительных байт в поле Опции. Наибольший заголовок занимает 60 октетов.

Поле Тип сервиса (Type of Service) занимает один байт и задает приоритетность пакета и вид критерия выбора маршрута. Первые три бита этого поля образуют подполе приоритета пакета (Precedence). Приоритет может иметь значения от самого низкого - 0 (нормальный пакет) до самого высокого - 7 (пакет управляющей информации). Маршрутизаторы и компьютеры принимают во внимание приоритет пакета и обрабатывают более важные пакеты в первую очередь. Поле Тип сервиса содержит также три бита, определяющие критерий выбора маршрута. Реально выбор осуществляется между тремя альтернативами: малой задержкой, высокой достоверностью и высокой пропускной способностью. Установленный бит D (delay) говорит о том, что маршрут должен выбираться для минимизации задержки доставки данного пакета, бит Т - для максимизации пропускной способности, а бит R - для максимизации надёжности доставки. Во многих сетях улучшение одного из этих параметров связано с ухудшением другого, кроме того, обработка каждого из них требует дополнительных вычислительных затрат. Поэтому редко, когда имеет смысл устанавливать одновременно хотя бы два из этих трёх критериев выбора маршрута. Зарезервированные биты имеют нулевое значение.

Поле Общая длина (Total Lenth) означает общую длину пакета с учетом заголовка и поля данных. Максимальная длина пакета ограничена разрядностью поля, определяющего эту величину, и составляет 65 535 байт, однако в большинстве хост-компьютеров и сетей столь большие пакеты не используются. При передаче по сетям различного типа длина пакета выбирается с учетом максимальной длины пакета протокола нижнего уровня, несущего IP-пакеты. Если это кадры Ethernet, то выбираются пакеты с максимальной длиной 1500 байт, умещающиеся в поле данных кадра Ethernet. В стандарте предусматривается, что все хосты должны быть готовы принимать пакеты вплоть до 576 байт длиной (приходят ли они целиком или по фрагментам). Хостам рекомендуется пакеты размером более чем 576 байт, только если они уверены, что принимающий хост или промежуточная сеть готовы обслужить пакет такой длины.

Поле Идентификатор пакета (Identification) используется для распознавания пакетов, образовавшихся путём фрагментации исходного пакета. Все фрагменты должны иметь одинаковое значение этого поля.

Поле Флаги (Flags) содержит признаки, связанные с фрагментацией. Установленный бит D (Do not Fragment) запрещает маршрутизатору фрагментировать данный пакет, а установленный бит М (More Fragments) говорит о том, что данный пакет является промежуточным (не конечным) фрагментом. Оставший ся бит зарезервирован.

Поле Смещение фрагмента (Fragment Offset) задаёт смещение в байтах поля данных этого пакета от начала общего поля данных исходного пакета, подвергнутого фрагментации. Используется при сборке и разборке фрагментов пакетов при передачах их между сетями с различными свойствами. Смещение должно быть кратно 8 байт.

Поле Время жизни (Time to Live) означает предельный срок, в течение которого пакет может перемещаться по сети. Время жизни каждого пакета задаётся источником передачи и измеряется в секундах. На маршрутизаторах и в других узлах сети по истечении каждой секунды из текущего времени жизни вычитается единица; единица вычитается и в том случае, когда время задержки меньше секунды. Поскольку современные маршрутизаторы редко обрабатывают пакет дольше, чем за одну секунду, то время жизни можно считать равным максимальному числу узлов, которые разрешено пройти данному пакету до того, как он достигнет места назначения. Если параметр времени жизни станет нулевым до того, как пакет достигнет получателя, этот пакет будет уничтожен. Время жизни можно рассматривать как часовой механизм самоуничтожения. Значение этого поля изменяется при обработке заголовка IP-пакета.

Идентификатор Протокол верхнего уровня (Protocol) занимает один байт и указывает, какому протоколу верхнего принадлежит информация, размещения в поле данных пакета, например, это могут быть сегменты протокола ТСР, дейтаграммы или иные пакеты.

Контрольная сумма (Header Checksum) рассчитывается только по заголовку. Поскольку некоторые поля заголовка изменяют своё значение в процессе передачи пакета по сети, контрольная сумма проверяется и повторно рассчитывается при каждой обработке IP-заголовка. Контрольная сумма - 16 бит - подсчитывается как дополнение к сумме всех 16-битовых слов заголовка. При её вычислении значение самого поля устанавливается в ноль. Если контрольная сумма не верна, то пакет будет отброшен, как только ошибка будет обнаружена.

Поле Опции (IP Options) является необязательным и используется обычно только при отладке сети. Механизм опций предоставляет функции управления, которые необходимы или просто полезны при определённых ситуациях, однако он не нужен при обычных коммуникациях. Это поле состоит из нескольких подполей, каждое из которых может быть одного из восьми типов. В этих подполях можно учитывать точный маршрут прохождения маршрутизаторов, регистрировать проходимые пакетом маршрутизаторы, помещать данные системы безопасности, а также временные отметки. Так как число подполей может быть произвольным, то в конце поля Опции должно быть добавлено несколько байт для выравнивания заголовка пакета по 32-битной границе.

Поле Выравнивание (Padding) используется для того, чтобы убедиться в том, что IP-заголовок заканчивается на 32-битной границе. Выравнивание осуществляется нулями.

Протокол TCP/IP (Transmission Control Protocol/Internet Protocol) в Windows NT 4.0 обеспечивает сетевое взаимодействие компьютеров под управлением Windows NT, и возможность подключения к ним сетевых устройств под управлением других ОС.

Протокол TCP/IP считается наиболее совершенным и распространенным протоколом из всех доступных на сегодняшний день. Все современные ОС поддерживают протокол TCP/IP и все сети используют его для обеспечения передачи большей части своих данных. Этот протокол представляет надежную, ориентированную на соединение службу доставки.

Протокол TCP

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

Если отправитель не получил подтверждения, то данные передаются повторно. Если сегмент поврежден, то узел-получатель отвергает его. Поскольку подтверждение в этом случае не посылается, отправитель передает сегмент еще раз.

Приложения идентифицируют себя на компьютере посредством номера порта протокола. Например, FTP-сервер использует определенный TCP-порт, поэтому другие приложения могут связаться с ним.

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

Порты протокола TCP

Порт протокола TCP указывает место доставки сообщения. Номера портов, меньшие 256, определены как широко используемые. В таблице перечислены некоторые из таких портов.

Номер порта

Описание

Доменная система имен (DNS)

Сервис NetBIOS

Установка связи по протоколу TCP.

Инициализация TCP-соединения происходит в три этапа. Ниже перечислены операции, из которых состоит этот процесс.

Узел-отправитель запрашивает соединение, посылая с установленным флагом синхронизации.

Узел-адресат подтверждает получение запроса, отправляя обратно сегмент с:

установленным флагом синхронизации;

порядковым номером начального байта сегмента, который он может послать, или номером последовательности;

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

3. Запрашивающий узел посылает обратно сегмент с подтверждением номера последовательности и номером своего подтверждения (рис.2).

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

Структура TCP-пакета

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

Протокол IP

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

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

Маршрутизация (routing) - процесс выбора пути для передачи пакетов. Маршрутизация осуществляется на узле TCP/IP в момент отправки IP-пакетов, а затем - на IP-маршрутизаторе.

Маршрутизатор (router) - это устройство, которое перенаправляет пакеты из одной физической сети в другую. Маршрутизаторы также называют шлюзами (gateways).

Поля IP-пакета приведены в таблице.

Описание

Source IP-address (IP-адрес отправителя)

Идентифицирует отправителя пакета при помощи IP-адреса

Destination IP-address (IP-адрес получателя)

Идентифицирует получателя пакета при помощи IP-адреса

Protocol (Протокол)

Информирует протокол IP узла-получателя о том, какому протоколу - TCP или UDP его передать.

Checksum (Контрольная сумма)

Используется для проверки целостности пришедшего пакета.

Time to live, или TTL (Время существования)

Определяет, сколько времени пакет находится в сети, перед тем как он будет отвергнут. Предотвращает бесконечное блуждание пакетов по сети. Маршрутизаторы должны уменьшать TTL на количество секунд, проведенных пакетом в маршрутизаторе. TTL уменьшается по меньшей мере на одну секунду каждый раз, когда пакет проходит через маршрутизаторе. По умолчанию в Windows NT 4.0 TTL равно 128 секундам.

Реализация IP на маршрутизаторе.

Маршрутизатор обрабатывает полученные им IP-пакеты следующим образом:

Уменьшает значение TTL на 1 секунду или больше, если пакет надолго задерживается на маршрутизаторе.

Если значение TTL достигает нуля, пакет отвергается.

2. Пакет может быть фрагментирован, если его размер слишком велик для сети дальнейшего следования

Если может быть фрагментирован, то IP создает для каждого нового пакета (фрагмента) отдельный заголовок, устанавливая:

Flag(флаг), указывающий, что существуют и другие фрагменты, которые будут отправлены в след;

Fragment ID(Идентификатор фрагмента), идентифицирующий все фрагменты, составляющие один пакет;

Fragment Offset(Смещение фрагмента), обеспечивающий правильную сборку пакета на узле-получателе.

Вычисляет новую контрольную сумму.

Определяет адрес сетевого адаптера следующего маршрутизатора.

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

Протокол управления передачей (Transmission Control Protocol - TCP) обеспечивает надежную передачу данных в среде IP. TCP относится к транспортному уровню эталонной модели OSI (4-й уровень). TCP предоставляет такие службы, как потоковая передача данных, надежность, эффективное управление потоком, дуплексный режим и мультиплексирование.

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

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

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

В дуплексным режиме TCP-процесс может одновременно пересылать и принимать пакеты.

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

Установка ТСР-соединения

Для использования надежных транспортных служб TCP-узлы должны устанавливать друг с другом сеансы, ориентированные на соединение. Установка соединения выполняется по механизму, называемому трехэтапной синхронизацией (three-way handshake).

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

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

Первый узел (Узел А) инициирует соединение, отправляя пакет с начальным порядковым номером и битом синхронизации SYN для индикации запроса соединения. Второй узел (Узел В) получает SYN, записывает порядковый номер X и отвечает подтверждением SYN (вместе с АСК = X + 1). Узел В указывает собственный порядковый номер (SEQ = Y). Тогда, если АСК равен 20, то это означает, что узел принял байты с 0 по 19 и ожидает следующий байт 20. Эта технология называется подтверждением передачи. Затем Узел А подтверждает прием всех байтов, посланных Узлом В с подтверждением передачи, указывая следующий байт, который Узел А ожидает получить (АСК = Y + 1). После этого может начинаться передача данных.

Подтверждение приема и повторная передача

Простой транспортный протокол может обеспечивать надежность и такую технологию управления потоком, при которой исходный узел посылает пакет, запускает таймер и ждет подтверждения приема перед отправкой нового пакета. Если подтверждение не получено по истечении времени, узел передает пакет еще раз. Эта технология называется подтверждением приема и повторной передачей (Positive Acknowledgment and Retransmission - PAR).

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

Однако PAR неэффективно использует пропускную способность, потому что перед отправкой нового пакета узел должен ждать подтверждения и, следовательно, пакет можно передавать только один за другим.

Скользящее окно TCP

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

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

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

Получатель отвечает с АСК, равным 6, показывая, что получил байты с 1 по 5 и ждет байта 6. В том же пакете получатель показывает, что размер его окна равен 5. Отправитель сдвигает скользящее окно на 5 байт вправо и передает байты с 6 по 10. Получатель отвечает АСК, равным 11, показывая, что он ожидает байта 11. В этом пакете получатель может указать, что его размер окна равен 0 (поскольку, например, его внутренние буферы заполнены). Тогда отправитель больше не сможет посылать байты, пока получатель не пошлет другой пакет с ненулевым размером окна.

Формат ТСР-пакета

Поля и полный формат TCP-пакета показаны на рис. 35.10.

Рис. 35.10. Формат ТСР-пакета

Описание полей ТСР-пакета

Ниже описаны поля TCP-пакета, показанные на рис. 35.10.

Порт источника и порт получателя. Точки, в которых процессы верхнего уровня источника и получателя принимают услуги TCP.

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

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

Сдвиг данных. Число 32-разрядных слов в заголовке TCP.

Резервные. Область, зарезервированная для использования в будущем.

Флаги. Различная управляющая информация, в том числе биты SYN и АСК, используемые для установки соединения, и бит FIN для разрыва соединения.

Окно. Размер приемного окна получателя (объем буфера для входящих данных).

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

Указатель срочности. Указывает на первый байт срочных данных в пакете.

Параметры. Различные дополнительные параметры TCP.

Данные. Информация верхнего уровня.

Литература:

Руководство по технологиям объединенных сетей, 4-е издание. : Пер. с англ. - М.: Издательский дом «Вильяме», 2005. - 1040 с.: ил. – Парал. тит. англ.



Рекомендуем почитать

Наверх