TCP (Transmission Control Protocol) — объяснение протокола передачи данных

Когда вы подключаетесь к Интернету, вы устанавливаете соединение между маршрутизатором и компьютером или мобильным устройством в несколько простых шагов, независимо от того, используете ли вы проводную или беспроводную технологию. Больше ничего не требуется, поскольку система автоматически входит в сеть и получает уникальный интернет-адрес, необходимый для получения и отправки данных. Это возможно благодаря набору протоколов, известных как набор протоколов Интернета. Одним из старейших и наиболее важных протоколов в этом наборе является протокол управления передачей (TCP). Он определяет, как сетевые устройства обмениваются данными.

Что такое TCP (протокол управления передачей)?

Протокол управления передачей, или сокращенно протокол TCP, — это стандарт обмена данными между различными устройствами в компьютерной сети. Этот протокол появился в 1973 году, когда компьютерные ученые Роберт Е. Кан и Винтон Г. Серф опубликовали первую версию стандарта в рамках исследовательской работы. Однако прошло еще восемь лет, прежде чем TCP был стандартизирован в RFC 793. С тех пор был внесен ряд усовершенствований и расширений, хотя суть протокола осталась неизменной. Текущая версия, определенная в RFC 7323, датируется 2014 годом.

Текущая версия протокола TCP позволяет двум конечным точкам в общей компьютерной сети установить соединение, которое обеспечивает двустороннюю передачу данных. Любая потеря данных обнаруживается и автоматически исправляется, поэтому TCP также называют надежным протоколом. Вместе с UDP и SCTP TCP образует группу протоколов передачи данных, входящих в набор протоколов Интернета и расположенных на транспортном уровне в сетевой архитектуре в соответствии с моделью OSI. Термин TCIP/IP protocol stack также обычно используется для обозначения набора протоколов Интернета, поскольку протокол TCP почти всегда основан на протоколе Интернета (IP), и это соединение является основой для большинства общественных и локальных сетей и сетевых служб.

Как именно работают соединения TCP?

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

Программное обеспечение TCP управляется различными сетевыми приложениями, такими как веб-браузеры или серверы, через специальные интерфейсы. Каждое соединение всегда должно идентифицироваться двумя четко определенными конечными точками (клиент и сервер). Не имеет значения, какая сторона принимает роль клиента, а какая — роль сервера. Важно лишь то, что программное обеспечение TCP получает уникальную упорядоченную пару, состоящую из IP-адреса и порта (также называемую «2-кортеж» или «сокет») для каждой конечной точки.

Трехстороннее рукопожатие: Как устанавливается TCP-соединение в деталях

Необходимые условия для установления действительного TCP-соединения: Обе конечные точки уже должны иметь уникальный IP-адрес (IPv4 или IPv6) и назначить и включить желаемый порт для передачи данных. IP-адрес служит в качестве идентификатора, в то время как порт позволяет операционной системе назначать соединения для конкретных клиентских и серверных приложений.

Совет

Подробное объяснение того, как взаимодействуют TCP и IP, можно найти в нашей подробной статье о TCP/IP.

Фактический процесс установления соединения по протоколу TCP выглядит следующим образом:

  1. Сначала запрашивающий клиент посылает серверу пакет или сегмент SYN (SYN означает «синхронизировать») с уникальным случайным номером. Этот номер обеспечивает полную передачу в правильном порядке (без дубликатов).
  2. Если сервер получил сегмент, он соглашается на соединение, возвращая пакет SYN-ACK (ACK означает подтверждение), содержащий порядковый номер клиента плюс 1. Он также передает клиенту свой собственный порядковый номер.
  3. Наконец, клиент подтверждает получение сегмента SYN-ACK, отправляя свой собственный пакет ACK, который в данном случае содержит порядковый номер сервера плюс 1. В это же время клиент уже может начать передачу данных серверу.

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

Примечание

Если порт сервера закрыт или доступ заблокирован, клиент вместо пакета подтверждения получает пакет TCP RST (сброс).

Разрыв TCP: Как происходит контролируемое завершение TCP-соединения

Обе стороны соединения могут разорвать TCP-соединение, возможно даже одностороннее расторжение. Это также известно как полуоткрытое соединение, при котором другой стороне все еще разрешается передавать данные, даже если одна сторона уже разъединилась.

Отдельные этапы двустороннего завершения (инициированного клиентом для простоты в данном примере) могут быть обобщены следующим образом:

  1. Клиент посылает сегмент FIN, чтобы уведомить сервер, что он больше не хочет посылать данные. Он посылает свой собственный порядковый номер, как и при установлении соединения.
  2. Сервер подтверждает получение пакета сегментом ACK, который содержит порядковый номер плюс 1.
  3. Когда сервер завершает передачу данных, он также отправляет пакет FIN, к которому добавляет свой порядковый номер.
  4. Теперь наступает очередь клиента отправить пакет ACK, содержащий порядковый номер плюс 1, который официально завершает TCP-соединение для сервера.

Однако для стороны, отправившей последний сегмент ACK (в нашем случае клиента), соединение не будет немедленно разорвано. Поскольку нет гарантии, что последний отправленный пакет действительно прибыл, клиент или сервер изначально будет находиться в состоянии ожидания до тех пор, пока не истечет максимальное время жизни сегмента ACK и любых новых сегментов FIN (согласно RFC 793, две минуты для каждого сегмента).

Какова структура заголовка TCP?

Обычно заголовок TCP-пакета содержит данные, необходимые для соединения и передачи данных с помощью протокола управления передачей. Эти данные заголовка (содержащие управляющую информацию) предшествуют передаваемой полезной нагрузке и обычно имеют размер 20 байт (160 бит). За ним следует до 40 байт (320 бит) дополнительной информации, которая является необязательной и используется не во всех пакетах.

Примечание

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

Подробная структура заголовка TCP выглядит следующим образом:

Отдельные компоненты или поля заголовка протокола TCP имеют следующее значение:

Порт источника (16 бит): Определяет номер порта отправителя.

Порт получателя (16 бит): Определяет номер порта получателя.

Номер последовательности (32 бита): Порядковый номер определяет первый байт прикрепленных данных полезной нагрузки или отправляется при установлении или разрыве соединения. Он также используется для проверки и сортировки сегментов после передачи.

Номер подтверждения (32 бита): Это поле содержит следующий номер последовательности, который ожидает отправитель. Флаг ACK (в поле «Флаги») является предварительным условием валидности.

Смещение (4 бита): Поле «Смещение» определяет длину заголовка TCP в 32-битных словах, чтобы выделить начальную точку данных полезной нагрузки. Эта начальная точка варьируется от сегмента к сегменту благодаря переменному полю «Options».

Зарезервировано (6 бит): Зарезервировано для будущего использования в соответствии с RFC 793 и пока не используется. Это поле всегда должно быть установлено в 0.

Флаги (6 бит): Шесть возможных единичных битов в поле «Флаги» разрешают различные действия TCP для организации связи и обработки данных. Следующие флаги либо установлены, либо не установлены для этих действий:

  • URG: Флаг «Urgent» сигнализирует TCP-приложению, что данные полезной нагрузки должны быть обработаны немедленно до установленного указателя Urgent (см. выше).
  • ACK: В сочетании с номером подтверждения флаг ACK подтверждает получение TCP-пакетов. Если флаг не установлен, номер подтверждения также недействителен.
  • PSH: Флаг «Push» обеспечивает немедленную проталкивание сегмента TCP без предварительной отправки в буфер отправителя и получателя.
  • RST: Если во время передачи произошла ошибка, TCP-пакет с установленным флагом RST может быть использован для сброса соединения.
  • SYN: Сообщения с установленным флагом SYN представляют собой первый шаг трехстороннего рукопожатия, то есть они инициируют соединение.
  • FIN: Флаг «Finish» сигнализирует другой стороне о том, что отправитель завершает передачу.

Размер окна (16 бит): Это поле определяет количество байт, которые отправитель готов принять.

Контрольная сумма (16 бит): Протокол управления передачей позволяет надежно обнаруживать ошибки передачи. Для этого используется контрольная сумма, вычисленная из заголовка, данных полезной нагрузки и псевдозаголовка.

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

Опции (0 — 320 бит): Используйте поле Options, если вы хотите включить функции TCP, которые не принадлежат общему заголовку, например, если вы хотите определить максимальный размер сегмента. Длина опций всегда должна быть кратна 32, иначе потребуется нулевой бит.

Как работает передача данных по протоколу TCP в деталях

Еще до передачи первых данных отправитель и получатель обычно договариваются о максимальном размере отправляемых сегментов TCP (MSS). По умолчанию на один сегмент может приходиться до 1 500 байт, из которых как минимум 20 байт отводится на заголовок TCP, еще 20 байт — на заголовок IP, а на данные полезной нагрузки остается 1 460 байт. Если вам нужен нестандартный размер, вы должны указать его в поле Options, как описано выше, но при этом вам придется соответственно уменьшить данные полезной нагрузки.

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

При максимальном размере сегмента за вычетом заголовков пакет TCP может передать только 1,46 килобайта или 0,00146 мегабайта данных. Сегментация используется для обмена веб-контентом, например изображениями, размер которых иногда составляет несколько сотен килобайт, по протоколу TCP. В этом случае данные приложения перед транспортировкой разделяются на несколько блоков данных, нумеруются и затем отправляются в случайной последовательности. Поскольку получатель должен подтвердить получение каждого сегмента и может восстановить фактическую последовательность на основе номеров последовательности, он может легко полностью пересобрать полученные данные полезной нагрузки после передачи по протоколу TCP.

Примечание

Если отправитель не получает подтверждения для переданного сегмента, используется техника таймера повторной передачи (RTO). Если этот таймер истекает после отправки пакета до передачи ответа, пакет автоматически передается повторно. Продолжительность таймера динамически регулируется алгоритмом и зависит от индивидуальной скорости передачи.

Краткое изложение основных фактов о протоколе управления передачей

Протокол TCP определял историю и развитие компьютерных сетей на протяжении почти полувека. TCP можно легко объединить с интернет-протоколом (IP), который также имеет долгую историю, и он обладает многими преимуществами по сравнению с другими альтернативами, такими как UDP и SCTP. Наиболее важные особенности можно суммировать следующим образом:

  • TCP ориентирован на соединение и обеспечивает двустороннюю связь между двумя конечными точками после трехстороннего рукопожатия.
  • TCP надежен, поскольку протокол гарантирует, что все данные передаются полностью и могут быть собраны получателем в правильном порядке.
  • TCP позволяет передавать данные отдельными сегментами размером до 1 500 байт (включая заголовки).
  • TCP располагается на транспортном уровне (уровень 4) модели OSI.
  • TCP обычно используется в сочетании с интернет-протоколом (IP) и обычно известен как стек протоколов TCP/IP.
  • Размер заголовка TCP по умолчанию составляет 20 байт. Можно добавить до 40 байт дополнительных параметров.

Оцените статью
cdelat.ru
Добавить комментарий