Что такое программа tcp

В одной из предыдущих статей мы выяснили, что такое как таковой протокол в ИТ и зачем он нужен. Кратко так:

  • Компьютеры могут общаться между собой.
  • Для этого им нужно договориться о языке общения — это и есть протокол.
  • Протоколы бывают физическими — какие вольты, амперы, радиочастоты и модуляции использовать оборудованию.
  • Протоколы бывают логическими — как понимать сигналы, закодированные в этих вольтах и модуляциях.
  • Существует целый стек протоколов — как многослойный пирог. В фундаменте там вольты и амперы, потом основы языка, потом сложные конструкции языка и на самой верхушке — как должны общаться приложения. Этот стек (или модель) называют OSI — Open Systems Interconnection Model.

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

Коротко: что такое и зачем нужны TCP/IP

TCP/IP: что это и зачем нужно

  1. TCP/IP — это названия протоколов, которые лежат в основе интернета. Благодаря им компьютеры обмениваются данными, не мешая друг другу.
  2. Оба протокола отвечают за передачу данных, но IP просто отправляет их в сеть, а TCP ещё следит за тем, чтобы эти данные попали по нужному адресу.
  3. В TCP встроено подтверждение получения, поэтому при хорошей связи данные точно дойдут до получателя.

Что такое TCP/IP

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

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

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

  • IP-протокол знает, ЧТО нужно сделать, чтобы доставить данные от одного компьютера к другому;
  • а TCP-протокол знает, КАК это сделать и при этом убедиться, что получатель точно получил все свои пакеты.

Что такое TCP/IP и зачем они нужны

Пакетная передача данных

Когда один компьютер хочет передать что-то другому, то он не отправляет байт за байтом по очереди. Вместо этого он отправляет данные мелкими порциями, а получатель собирает из них исходные данные. Этим как раз занимаются протоколы — разбивают всё на части и склеивает заново, потому что каждый пакет пронумерован.

Winderton / Основы программирования. TCP/IP.

Пакет может быть размером от 1 до 64 килобайт, но в нём всегда есть несколько обязательных полей — по ним протокол понимает, кому какие данные нужно передать.

Что такое TCP/IP и зачем они нужны Что такое TCP/IP и зачем они нужны

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

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

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

Что такое TCP/IP и зачем они нужны Что такое TCP/IP и зачем они нужны

Но если подтверждать получение каждого пакета, то на это будет уходить очень много времени: при скорости сети в 100 мегабит в секунду реальная скорость передачи данных будет около 50 килобит в секунду. А всё потому, что отправитель не будет передавать новые данные, пока не получит подтверждение по предыдущему пакету. В итоге почти всё время сеть будет занята не передачей данных, а подтверждениями и подтверждениями подтверждений.

Чтобы не было таких задержек, в протоколе предусмотрели кумулятивное и выборочное подтверждение:

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

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

Что такое TCP/IP и зачем они нужны

И что с того?

Связка протоколов TCP/IP делает так, чтобы мы могли отправить данные куда-то в интернет и они точно дошли. Всё это происходит быстро, незаметно для нас, где-то в глубинах наших компьютеров и телефонов.

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

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

Курс «C++ для бэкенда»

Если интересно делать быстрые высоконагруженные системы, посмотрите на программу курса «Яндекс Практикума». Понятная теория, тренажеры, поддержка ревьюеров и обучение в группе, всё как надо.

Читайте также:
Как сделать так чтобы брандмауэр не блокировал программу

Источник: thecode.media

Что такое программа tcp

Transmission Control Protocol (TCP) — протокол управления передачей.

TCP это стандарт определяющий каким образом устанавливать и поддерживать сетевой диалог, благодаря которому программы могут обмениваться данными. TCP работает с Интернет-протоколом (IP), который определяет, как компьютеры отправляют друг другу пакеты данных. Вместе TCP и IP являются основными правилами, определяющими Интернет. Инженерная группа Интернета (IETF) определяет протокол TCP в стандарте RFC под номером 793.

Как работает TCP

TCP — это протокол который устанавливает и поддерживает соединение до тех пор, пока прикладные программы на каждом конце не закончат обмен сообщениями. Он определяет, как разбить данные приложения на пакеты, отправляет пакеты и принимает пакеты с сетевого уровня, управляет управлением потоком и, обрабатывает повторную передачу отброшенных или искаженных пакетов, а так же подтверждает все приходящие пакеты. В модели взаимодействия открытых систем (OSI) TCP охватывает части уровня 4, транспортного уровня, и части уровня 5, сеансового уровня.

Пример. Когда вы открываете сайт (по сути веб-страницу) веб-сервер с помощью браузера (браузер — прикладной уровень) отправляет вам HTML страницу. Для этого используется протокол передачи гипертекста (HTTP — уровень представлений и сеансовый уровень). Пакеты передаваемые HTTP идут на 80 порт (транспортный уровень).

Веб-сервер находиться на компьютере который имеет статический IP-адрес (сетевой уровень). Пакеты передающиеся от вашего компьютера к серверу идут по сетевой карте (канальный и физический уровень).

Уровни TCP/IP

Набор протоколов TSP/IP основан на собственной модели, которая базируется на модели OSI.

  • Прикладной, представления, сеансовый OSI = Прикладной TCP.
  • Транспортный OSI = Транспортный TCP.
  • Сетевой OSI = Интернет TCP.
  • Канальный, физический OSI = Сетевой интерфейс TCP.

Соответствие TCP/IP - OSI

Для чего используется TCP

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

  • Secure Shell (SSH), протокол передачи файлов (FTP), Telnet: для однорангового обмена файлами и, в случае Telnet, входа на компьютер другого пользователя для доступа к файлу.
  • Простой протокол передачи почты (SMTP), протокол почтового отделения (POP), протокол доступа к сообщениям в Интернете (IMAP): для отправки и получения электронной почты.
  • HTTP: для доступа в Интернет.

Все эти примеры существуют на прикладном уровне стека TCP/IP и отправляют данные «вниз» в TCP на транспортном уровне.

Почему TCP важен

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

Расположение в стеке TCP/IP

Стек TCP/IP — это модель, которая представляет, как данные организованы и обмениваются по сети с использованием протокола TCP/IP. Он представляет собой серию уровней, которые представляют способ обработки и упаковки данных с помощью ряда протоколов, когда они проходят от клиента к серверу и наоборот.

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

Разница между двумя моделями заключается в уровне специфичности. Модель OSI — это более абстрактное представление способа обмена данными, не зависящее от какого-либо протокола. Это структура для общих сетевых систем. Стек TCP/IP более специфичен

Анатолий Бузов

Анатолий Бузов / об авторе

Обучаю HTML, CSS, PHP. Создаю и продвигаю сайты, скрипты и программы. Занимаюсь информационной безопасностью. Рассмотрю различные виды сотрудничества.

Источник: abuzov.com

Протокол TCP простым и понятным языком — как работает

Протокол TCp

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

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

TCP — расшифровывается как (Transmission Control Protocol) протокол управления передач. В отличии от UDP, TCP обеспечивает надежную доставку данных. Сервис предоставляемый TCP называются надежная передача потока байт или (reliable byte stream) по-английский. TCP обеспечивает как гарантию доставки данных, так и гарантию сохранения порядка следования сообщений.

Поток байт

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

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

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

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

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

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

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

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

Читайте также:
Какие комнатные растения должны быть по программе в средней группе

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

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

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

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

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

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

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

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

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

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

Время передачи сообщения

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

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

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

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

  • Например, канал Екатеринбург-Пермь, его протяженность 465 километров, скорость 10 Гб/с, так как протяженность достаточно большая, задержка при передаче данных составляет 10 миллисекунд.
  • Объем данных в сети: умножаем задержку на скорость передачи данных это составляет 12,5 МБайт. Это означает, что отправитель начал передавать данные и до того как первая порция данных дойдет до получателя он может отправить в сеть 12,5 МБайт. Еще столько же он может отправить в сеть пока до него дойдёт подтверждение получения. Если не останавливать передачу до получения подтверждения, можно передать в сеть 25 МБайт и только после этого получить подтверждение первой порции данных. Если же мы будем останавливаться и ждать получение каждого сегмента, то за секунду мы можем передать всего лишь 50 сегментов, скорость передачи данных в таком режиме будет всего лишь 75 килобайт в секунду, что существенно меньше 10 ГБит в секунду пропускной способности канала. Поэтому важно использовать скользящее окно и передавать несколько сегментов сразу не дожидаясь подтверждения каждого.

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

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

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

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

p, blockquote 25,0,0,0,0 —>

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

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

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

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

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

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

Порядок следования сообщений

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

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

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

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

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

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

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

Читайте также:
Лучшие программы для рисования карт

Порядок следования сообщений в tcp

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

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

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

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

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

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

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

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

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

Соединение TCP

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

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

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

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

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

Получатель в ответ передаёт сообщение SYN, куда включает подтверждение получения предыдущего сообщения ACK от слова acknowledge и порядковый номер байта, который он ожидает 7538, потому что на предыдущем этапе был получен байт с номером 7537.

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

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

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

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

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

Протокол TCP предусматривает два варианта разрыва соединения: корректное, с помощью одностороннего разрыва соединения и сообщения FIN и разрыв из-за критической ситуации с помощью сообщения RST.

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

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

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

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

Заключение

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

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

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

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

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

Для разрыва соединения возможны две схемы. Корректное закрытие соединения требует корректной отправки обеими сторонами сообщения FIN и получении подтверждения. Разрыв соединения в критической ситуации может быть выполнен быстро, отправкой одного сообщения RST. Таким образом накладные расходы в TCP особенно при передаче небольшого объема данных значительно выше чем в UDP, но соединение и отправка подтверждений позволяют TCP обеспечивать гарантию доставки и гарантию сохранения порядка следования сообщений.

Источник: zvondozvon.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru