Для чего предназначен протокол tcp для доставки между компьютерами

Обновлено: 06.07.2024

Transport Control Protocol

Реализация TCP, как правило, встроена в ядро ОС, хотя есть и реализации TCP в контексте приложения.

Содержание

Заголовок сегмента TCP

Порт источника

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

Порт назначения

Порт назначения идентифицирует порт, на который отправлен пакет.

TCP-порты

Существует набор служб (использующих для передачи данных TCP), за которыми закреплены определенные порты:

Номер последовательности

Номер последовательности выполняет две задачи:

Поскольку поток TCP в общем случае может быть длиннее, чем число различных состояний этого поля, то все операции с номером последовательности должны выполняться по модулю 2^32. Это накладывает практическое ограничение на использование TCP. Если скорость передачи коммуникационной системы такова, чтобы в течение MSL (максимального времени жизни сегмента) произошло переполнение номера последовательности, то в сети может появиться два сегмента с одинаковым номером, относящихся к разным частям потока, и приёмник получит некорректные данные.

Номер подтверждения

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

Смещение данных

Зарезервировано

Зарезервировано (6 бит) для будущего использования и должно устанавливаться в ноль. Из них два (5-й и 6-й) уже определены:

Флаги (управляющие биты)

Это поле содержит 6 битовых флагов:

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

Псевдозаголовок

TCP-псевдозаголовок IPv4

Биты 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
0-31 IP-адрес отправителя (Source address)
32-63 IP-адрес получателя (Destination address)
64-95 0 0 0 0 0 0 0 0 Протокол (Protocol) Длина TCP-сегмента (TCP length)

TCP-псевдозаголовок IPv6

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

Указатель важности

16-битовое значение положительного смещения от порядкового номера в данном сегменте. Это поле указывает порядковый номер октета, которым заканчиваются важные (urgent) данные. Поле принимается во внимание только для пакетов с установленным флагом URG.

Опции

Могут применяться в некоторых случаях для расширения протокола. Иногда используются для тестирования. На данный момент в опции практически всегда включают 2 байта NOP (в данном случае 0x01) и 10 байт, задающих timestamps. Вычислить длину поля опции можно через значение поля смещения.

Механизм действия протокола

  • Установка соединения
  • Передача данных
  • Завершение соединения

Состояния сеанса TCP


Упрощённая диаграмма состояний TCP. Более подробно в TCP EFSM diagram (на английском языке)
Состояния сеанса TCP
CLOSED Начальное состояние узла. Фактически фиктивное
LISTEN Сервер ожидает запросов установления соединения от клиента
SYN-SENT Клиент отправил запрос серверу на установление соединения и ожидает ответа
SYN-RECEIVED Сервер получил запрос на соединение, отправил ответный запрос и ожидает подтверждения
ESTABLISHED Соединение установлено, идёт передача данных
FIN-WAIT-1 Одна из сторон (назовём её узел-1) завершает соединение, отправив сегмент с флагом FIN
CLOSE-WAIT Другая сторона (узел-2) переходит в это состояние, отправив, в свою очередь сегмент ACK и продолжает одностороннюю передачу
FIN-WAIT-2 Узел-1 получает ACK, продолжает чтение и ждёт получения сегмента с флагом FIN
LAST-ACK Узел-2 заканчивает передачу и отправляет сегмент с флагом FIN
TIME-WAIT Узел-1 получил сегмент с флагом FIN, отправил сегмент с флагом ACK и ждёт 2*MSL секунд, перед окончательным закрытием соединения
CLOSING Обе стороны инициировали закрытие соединения одновременно: после отправки сегмента с флагом FIN узел-1 также получает сегмент FIN, отправляет ACK и находится в ожидании сегмента ACK (подтверждения на свой запрос о разъединении)

Установка соединения

Процесс начала сеанса TCP - обозначаемое как "рукопожатие" (handshake), состоит из 3 шагов.

1. Клиент, который намеревается установить соединение, посылает серверу сегмент с номером последовательности и флагом SYN.

  • Сервер получает сегмент, запоминает номер последовательности и пытается создать сокет (буферы и управляющие структуры памяти) для обслуживания нового клиента.
    • В случае успеха сервер посылает клиенту сегмент с номером последовательности и флагами SYN и ACK, и переходит в состояние SYN-RECEIVED.
    • В случае неудачи сервер посылает клиенту сегмент с флагом RST.

    2. Если клиент получает сегмент с флагом SYN, то он запоминает номер последовательности и посылает сегмент с флагом ACK.

    • Если он одновременно получает и флаг ACK (что обычно и происходит), то он переходит в состояние ESTABLISHED.
    • Если клиент получает сегмент с флагом RST, то он прекращает попытки соединиться.
    • Если клиент не получает ответа в течение 10 секунд, то он повторяет процесс соединения заново.

    3. Если сервер в состоянии SYN-RECEIVED получает сегмент с флагом ACK, то он переходит в состояние ESTABLISHED.

    • В противном случае после тайм-аута он закрывает сокет и переходит в состояние CLOSED.

    Процесс называется "трехэтапным согласованием" ("three way handshake"), так как несмотря на то что возможен процесс установления соединения с использованием 4 сегментов (SYN в сторону сервера, ACK в сторону клиента, SYN в сторону клиента, ACK в сторону сервера), на практике для экономии времени используется 3 сегмента.

    Пример базового 3-этапного согласования:

    В строке 2 TCP A начинает передачу сегмента SYN, говорящего об использовании номеров последовательности, начиная со 100. В строке 3 TCP B передает SYN и подтверждение для принятого SYN в адрес TCP A. Надо отметить, что поле подтверждения показывает ожидание TCP B приема номера последовательности 101, подтверждающего SYN с номером 100.

    Передача данных

    При обмене данными приемник использует номер последовательности, содержащийся в получаемых сегментах, для восстановления их исходного порядка. Приемник уведомляет передающую сторону о номере последовательности байт, до которой он успешно получил данные, включая его в поле «номер подтверждения». Все получаемые данные, относящиеся к промежутку подтвержденных последовательностей, игнорируются. Если полученный сегмент содержит номер последовательности больший, чем ожидаемый, то данные из сегмента буферизируются, но номер подтвержденной последовательности не изменяется. Если впоследствии будет принят сегмент, относящийся к ожидаемому номеру последовательности, то порядок данных будет автоматически восстановлен исходя из номеров последовательностей в сегментах.

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

    В некоторых случаях передающее приложение может явно затребовать протолкнуть данные до некоторой последовательности принимающему приложению, не буферизируя их. Для этого используется флаг PSH. Если в полученном сегменте обнаруживается флаг PSH, то реализация TCP отдает все буферизированные на текущий момент данные принимающему приложению. «Проталкивание» используется, например, в интерактивных приложениях. В сетевых терминалах нет смысла ожидать ввода пользователя после того, как он закончил набирать команду. Поэтому последний сегмент, содержащий команду, обязан содержать флаг PSH, чтобы приложение на принимающей стороне смогло начать её выполнение.

    Завершение соединения

    Завершение соединения можно рассмотреть в три этапа:

    1. Посылка серверу от клиента флагов FIN и ACK на завершение соединения.
    2. Сервер посылает клиенту флаги ответа ACK , FIN, что соединение закрыто.
    3. После получения этих флагов клиент закрывает соединение и в подтверждение отправляет серверу ACK , что соединение закрыто.

    Известные проблемы

    Максимальный размер сегмента

    TCP требует явного указания максимального размера сегмента (MSS) в случае, если виртуальное соединение осуществляется через сегмент сети, где максимальный размер блока (MTU) менее, чем стандартный MTU Ethernet (1500 байт).

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

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

    Для решения этой проблемы на маршрутизаторах применяются правила Firewall-а, добавляющие параметр MSS во все пакеты, инициирующие соединения, чтобы отправитель использовал сегменты допустимого размера.

    MSS может также управляться параметрами операционной системы.

    Обнаружение ошибок при передаче данных

    Хотя протокол осуществляет проверку контрольной суммы по каждому сегменту, используемый алгоритм считается слабым [1]. Так в 2008 году не обнаруженная сетевыми средствами ошибка в передаче одного бита, привела к остановке серверов системы Amazon Web Services [2].

    В общем случае распределенным сетевым приложениям рекомендуется использовать дополнительные программные средства для гарантирования целостности передаваемой информации[3].

    Атаки на протокол

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

    Реализация

    Освобождение от расчёта контрольной суммы

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

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


    Прошлый материал был, как раз посвящен TCP IP, сегодня же мы разберем за что отвечает протокол TCP и что это вообще такое.

    TCP протокол


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

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

    Является именно надежным протоколом так как:

    Заголовок TCP протокола

    Весит 20 байт, если нет дополнительных опций, вот как он выглядит:


    Также, вам может быть интересна статья о том, что такое dns сервер. В ней очень подробно и интересно описано об этой глобальной системе.

    Как работает TCP соединение

    Соединение отправителя и получателя (два узла) происходит так:

    1. Отправитель отсылает получателю специальный пакет, именуемый SYN, т.е. пригашает к соединению
    2. Получатель отвечает уже пакетом SYN-ACK, т.е. соглашается
    3. Отправитель отсылает спец. пакет ACK, т.е. подтверждает, что согласие получено


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

    TCP порты

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

    Есть целый ряд уже зарезервированных портов, которые являются стандартом:


    Также, стоит отметить, что порты данного протокола никак не пересекаются с такими же, но у UDP. Так, например, порт: 1234 не пересечется с таким же, но у UDP.

    В заключение

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

    Протокол TCp

    На этом уровне есть два протокола, протокол UDP, который уже рассматривали и протокол TCP, который является одним из основных протоколов стека TCP/IP и интернет.

    p, blockquote 3,0,0,0,0 -->

    Протокол TCP в модели OSI

    p, blockquote 4,0,0,0,0 -->

    p, blockquote 5,0,0,0,0 -->

    Поток байт

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

    p, blockquote 6,0,0,0,0 -->

    поток байт в протоколе TCP

    p, blockquote 7,0,0,0,0 -->

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

    p, blockquote 8,0,0,0,0 -->

    Гарантия доставки: подтверждение получения

    p, blockquote 9,0,0,0,0 -->

    Гарантия доставки в TCP

    p, blockquote 10,0,0,0,0 -->

    Гарантия доставки: повторная отправка

    p, blockquote 11,0,0,0,0 -->

    Гарантия доставки, повторное отправление

    p, blockquote 12,0,0,0,0 -->

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

    p, blockquote 13,0,0,0,0 -->

    Повторная доставка прошла успешно

    p, blockquote 14,0,1,0,0 -->

    Протокол TCP: скользящее окно

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

    p, blockquote 15,0,0,0,0 -->

    • Остановка и ожидание (Wi-Fi, канальный уровень)
    • Скользящее окно (TCP, транспортный уровень)

    Варианты подтверждения доставки

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

    p, blockquote 17,0,0,0,0 -->

    Варианты подтверждения доставки: скользящее окно

    p, blockquote 18,0,0,0,0 -->

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

    p, blockquote 19,0,0,0,0 -->

    p, blockquote 20,0,0,0,0 -->

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

    p, blockquote 21,0,0,0,0 -->

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

    Рассмотрим на примере работу сети.

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

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

    p, blockquote 23,0,0,0,0 -->

    скользящее окно

    p, blockquote 24,0,0,0,0 -->

    p, blockquote 26,0,0,0,0 -->

    перемещается скользящее окно

    p, blockquote 27,0,0,0,0 -->

    Тип подтверждения

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

    • Кумулятивное подтверждение, говорит о том что получен указанный байт данных и все предыдущие. Такой подход используется в TCP по умолчанию. Сейчас из-за того что распространились высокоскоростные каналы связи большой протяженности, размер окна в TCP может быть увеличен до 1 гигабайта. Представьте, что вы передали гигабайт данных и у вас потерялся всего лишь один сегмент, который находится в середине. С помощью кумулятивного подтверждения вы можете подтвердить получение только первых 500 мегабайт, получится что вам придётся повторно передавать 500 мегабайт данных, которые уже есть у получателя.

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

    p, blockquote 29,0,0,0,0 -->

    p, blockquote 30,0,0,0,0 -->

    p, blockquote 31,0,0,0,0 -->

    Дублирование сегментов

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

    p, blockquote 32,0,0,0,0 -->

    Пример передачи данных в TCP

    p, blockquote 33,0,0,0,0 -->

    p, blockquote 34,0,0,0,0 -->

    p, blockquote 35,0,0,0,0 -->

    p, blockquote 36,0,0,0,0 -->

    В нашем примере 4 сегмента первый сегмент содержит байты от 0 до 1023, второй от 1024 до 2047 и так далее.

    p, blockquote 37,0,0,0,0 -->

    Нумерация байтов

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

    p, blockquote 38,0,0,0,0 -->

    Нумерация байтов

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

    Дублирование сегментов

    Рассмотрим как решается ситуация с дублированием сегментов.

    p, blockquote 40,0,0,0,0 -->

    Дублирование сегментов

    • Отправитель включает в сегмент номер первого передаваемого байта 1024.
    • Получатель отправляет подтверждение, где говорит что ждет байт в 2048.
    • Но так как подтверждение не дошло, то отправитель передает тот же самый сегмент 1024.
    • Однако получатель видит, что этот сегмент у него уже есть поэтому он этот сегмент игнорирует и снова отправляет подтверждение, где говорит что он ожидает байт 2048.

    Соединение TCP

    TCP для передачи данных использует соединение. Соединение нужно установить перед тем, как начать передачу данных, а после того как передача данных завершена, соединение разрывается.

    p, blockquote 42,0,0,1,0 -->

    Задачи соединения

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

    Установка соединения в TCP

    p, blockquote 43,0,0,0,0 -->

    Установка соединения в TCP

    p, blockquote 44,0,0,0,0 -->

    p, blockquote 45,0,0,0,0 -->

    p, blockquote 46,0,0,0,0 -->

    Разрыв соединения в TCP

    p, blockquote 47,0,0,0,0 -->

    p, blockquote 48,0,0,0,0 -->

    p, blockquote 49,0,0,0,0 -->

    Разрыв соединения в TCP

    p, blockquote 50,0,0,0,0 -->

    p, blockquote 51,0,0,0,0 -->

    Заключение

    p, blockquote 52,0,0,0,0 -->

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

    p, blockquote 53,0,0,0,0 -->

    p, blockquote 54,0,0,0,0 -->

    p, blockquote 55,0,0,0,0 --> p, blockquote 56,0,0,0,1 -->

    Протокол TCP

    TCP - это протокол транспортного уровня, предоставляющий транспортировку (передачу) потока данных, с необходимостью предварительного установления соединения, благодаря чему гарантирует уверенность в целостности получаемых данных, также выполняет повторный запрос данных в случае потери данных или искажения. Помимо этого протокол TCP отслеживает дублирование пакетов и в случае обнаружения - уничтожает дублирующиеся пакеты. TCP - это аббревиатура от Transmission Control Protocol (Протокол Управления Передачей) - является обязательным протоколом стандарт TCP/IP, определенный в стандарте RFC 793, "Transmission Control Protocol (TCP)".

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

    TCP обеспечивает свою надежность благодаря следующему:

    • Данные от приложения разбиваются на блоки определенного размера, которые будут отправлены.
    • Когда TCP посылает сегмент, он устанавливает таймер, ожидая, что с удаленного конца придет подтверждение на этот сегмент. Если подтверждение не получено по истечении времени, сегмент передается повторно.
    • Когда TCP принимает данные от удаленной стороны соединения, он отправляет подтверждение. Это подтверждение не отправляется немедленно, а обычно задерживается на доли секунды
    • TCP осуществляет расчет контрольной суммы для своего заголовка и данных. Это контрольная сумма, рассчитываемая на концах соединения, целью которой является выявить любое изменение данных в процессе передачи. Если сегмент прибывает с неверной контрольной суммой, TCP отбрасывает его и подтверждение не генерируется. (Ожидается, что отправитель отработает тайм-аут и осуществит повторную передачу.)
    • Так как TCP сегменты передаются в виде IP датаграмм, а IP датаграммы могут прибывать беспорядочно, также беспорядочно могут прибывать и TCP сегменты. После получения данных TCP может по необходимости изменить их последовательность, в результате приложение получает данные в правильном порядке.
    • Так как IP датаграмма может быть продублирована, принимающий TCP должен отбрасывать продублированные данные.
    • TCP осуществляет контроль потока данных. Каждая сторона TCP соединения имеет определенное пространство буфера. TCP на принимающей стороне позволяет удаленной стороне посылать данные только в том случае, если получатель может поместить их в буфер. Это предотвращает от переполнения буферов медленных хостов быстрыми хостами.

    Заголовок TCP



    • Порядковый номер выполняет две задачи:
      • Если установлен флаг SYN, то это начальное значение номера последовательности — ISN (Initial Sequence Number), и первый байт данных, которые будут переданы в следующем пакете, будет иметь номер последовательности, равный ISN + 1.
      • В противном случае, если SYN не установлен, первый байт данных, передаваемый в данном пакете, имеет этот номер последовательности.

      Рассмотрим структуру заголовка TCP с помощью сетевого анализатора Wireshark:


      TCP порты

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

      Номер порта — это условное 16-битное число от 1 до 65535, указывающее, какой программе предназначается пакет.

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

      Номера портов UDP и TCP не пересекаются.

      TCP программы используют зарезервированные или хорошо известные номера портов, как показано на следующем рисунке.


      Установление соединения TCP

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

      Перед началом передачи каких-либо данных, согласно протоколу TCP, стороны должны установить соединение. Соединение устанавливается в три этапа (процесс «трёхкратного рукопожатия» TCP).

      • Запрашивающая сторона (которая, как правило, называется клиент) отправляет SYN сегмент, указывая номер порта сервера, к которому клиент хочет подсоединиться, и исходный номер последовательности клиента (ISN).
      • Сервер отвечает своим сегментом SYN, содержащим исходный номер последовательности сервера. Сервер также подтверждает приход SYN клиента с использованием ACK (ISN + 1). На SYN используется один номер последовательности.
      • Клиент должен подтвердить приход SYN от сервера своим сегментов SYN, содержащий исходный номер последовательности клиента (ISN+1) и с использованием ACK (ISN+1). Бит SYN установлен в 0, так как соединение установлено.


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

      TCP/IP

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

      Что такое TCP/IP

      Произошло наименование протокола от сокращения двух английских понятий – Transmission Control Protocol и Internet Protocol. Набор правил, входящий в него, позволяет обрабатывать как сквозную передачу данных, так и другие детали этого механизма. Сюда входит формирование пакетов, способ их отправки, получения, маршрутизации, распаковки для передачи программному обеспечению.

      Что такое TCP/IP

      Стек протоколов TCP/IP был создан в 1972 году на базе NCP (Network Control Protocol), в январе 1983 года он стал официальным стандартом для всего интернета. Техническая спецификация уровней взаимодействия описана в документе RFC 1122.

      В составе стека есть и другие известные протоколы передачи данных – UDP, FTP, ICMP, IGMP, SMTP. Они представляют собой частные случаи применения технологии: например, у SMTP единственное предназначение заключается в отправке электронных писем.

      Уровни модели TCP/IP

      Протокол TCP/IP основан на OSI и так же, как предшественник, имеет несколько уровней, которые и составляют его архитектуру. Всего выделяют 4 уровня – канальный (интерфейсный), межсетевой, транспортный и прикладной.

      Уровни модели TCP/IP

      Канальный (сетевой интерфейс)

      Аппаратный уровень обеспечивает взаимодействие сетевого оборудования Ethernet и Wi-Fi. Он соответствует физическому из предыдущего стандарта OSI. Здесь задача состоит в кодировании информации, ее делению на пакеты и отправке по нужному каналу. Также измеряются параметры сигнала вроде задержки ответа и расстояния между хостами.

      Межсетевой (Internet Layer)

      Интернет состоит из множества локальных сетей, объединенных между собой как раз за счет протокола связи TCP/IP. Межсетевой уровень регламентирует взаимодействие между отдельными подсетями. Маршрутизация осуществляется путем обращения к определенному IP-адресу с использованием маски.

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

      Транспортный уровень (Transport Layer)

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

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

      Прикладной уровень (Application Layer)

      Здесь объединены 3 уровня модели OSI – сеансовый, представления и прикладной. На него ложатся задачи по поддержанию сеанса связи, преобразованию данных, взаимодействию с пользователем и сетью. На этом уровне применяются стандарты интерфейса API, позволяющего передавать команды на выполнение определенных задач.

      Порты и сокеты – что это и зачем они нужны

      Процессы, работающие на прикладном уровне, «общаются» с транспортным, но они видны ему как «черные ящики» с зашифрованной информацией. Зато он понимает, на какой IP-адрес адресованы данные и через какой порт надо их принимать. Этого достаточно для точного распределения пакетов по сети независимо от месторасположения хостов. Порты с 0 до 1023 зарезервированы операционными системами, остальные, в диапазоне от 1024 до 49151, условно свободны и могут использоваться сторонними приложениями.

      Комбинация IP-адреса и порта называется сокетом и используется при идентификации компьютера. Если первый критерий уникален для каждого хоста, второй обычно фиксирован для определенного типа приложений. Так, получение электронной почты проходит через 110 порт, передача данных по протоколу FTP – по 21, открытие сайтов – по 80.

      Преобразование IP-адресов в символьные адреса

      Технология активно используется для назначения буквенно-цифровых названий веб-ресурсов. При вводе домена в адресной строке браузера сначала происходит обращение к специальному серверу DNS. Он всегда прослушивает порт 53 у всех компьютеров, которые подключены к интернету, и по запросу преобразует введенное название в стандартный IP-адрес.

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

      Читайте также: