Transmission control protocol что означает
Протокол TCP простым и понятным языком — как работает
На этом уровне есть два протокола, протокол UDP, который уже рассматривали и протокол TCP, который является одним из основных протоколов стека TCP/IP и интернет.
TCP — расшифровывается как (Transmission Control Protocol) протокол управления передач. В отличии от UDP, TCP обеспечивает надежную доставку данных. Сервис предоставляемый TCP называются надежная передача потока байт или (reliable byte stream) по-английский. TCP обеспечивает как гарантию доставки данных, так и гарантию сохранения порядка следования сообщений.
Поток байт
От приложения, протокол TCP получает поток байт, который может быть очень большим. Например, вы можете скачивать из интернета файл, который составляет несколько мегабайт или несколько гигабайт. Данные файлы приходят на транспортный уровень в виде одного большого потока байт.
В протоколе TCP поток байт делится на отдельные части, которые называются сегменты. Каждый сегмент отправляется отдельно получателю. Получатель со своей стороны, принимает сегменты, собирает их в один большой поток байт и отправляет этот поток байт приложению.
Гарантия доставки: подтверждение получения
Для того чтобы обеспечить гарантию доставки данных, TCP использует подтверждение получения сообщения. Рассмотрим, как это работает. Отправитель пересылает по сети некоторый сегмент данных, получатель принимает сегмент и посылает отправителю подтверждение, сокращенно ACK от английского Acknowledgment, которая говорит о том что сегмент данных получен. Затем отправляется следующий сегмент данных, снова подтверждение и так далее.
Гарантия доставки: повторная отправка
Что происходит, если произошла ошибка при передаче данных? Сегмент данных потерян в сети, он не доходит до получателя, получатель не отправляет подтверждение сообщения. Отправитель при отправке сегмента устанавливает таймер, который задает время ожидания подтверждения, если в течении этого времени подтверждение не пришло, таймер срабатывает и тот же самый сегмент отправляются повторно.
Предположим, что в этот раз сегмент дошел, получатель отправляет подтверждение, отправитель может передавать следующий сегмент данных.
Протокол TCP: скользящее окно
Работа протокола TCP отличаются от той схемы, которую мы сейчас рассмотрели. Подтверждается не каждый сегмент, а несколько сегментов следующие друг за другом, этот механизм называется скользящее окно.
Варианты подтверждения доставки
Рассмотрим остановку и ожидание. Отправитель передает данные и останавливается ожидая подтверждение. Получатель присылает подтверждение после этого передается следующая порция данных. Снова подтверждение, снова данные и снова подтверждение.
Другой вариант скользящее окно. В этом случае отправитель передает сразу несколько порций данных не дожидаясь подтверждения. Получатель отправляет одно подтверждение которое называется кумулятивное. Это означает, что получатель получил последнюю порцию данных и все предыдущие.
Время передачи сообщения
Почему на транспортном уровне эффективно использовать скользящее окно? Дело в том, что сообщение по сети передается хотя и быстро, но не мгновенно. Поэтому в среде передачи данных может находиться некоторый объем данных, который определяется скоростью передачи данных умноженной на задержку передачи данных. Этот объем небольшой для локальных сетей, где отправитель и получатель находится рядом друг с другом, поэтому задержка небольшая.
В локальных сетях, например Wi-Fi используется метод подтверждения остановка и ожидания. В крупных современных сетях с высокоскоростными каналами связи большой протяженности, например если вы хотите скачать чего-нибудь с американского сайта, такой объем данных может быть очень большой. И в этой ситуации ожидания подтверждения приводит к существенному снижению производительности.
Пример подтверждения доставки
Рассмотрим на примере работу сети.
Скользящее окно
Почему термин называется скользящее окно? Удобно представлять себе окно, которое скользит по потоку байт получаемых от приложений. У есть поток байт, разделенный на отдельные сегменты, часть сегментов уже передана, часть еще не отправлены. Для некоторых сегментов, которые уже переданы, получено подтверждение. И отправлено некоторое количество сегментов соответствующие размеру окна, для которых подтверждение не получено.
Размер окна — это количество байтов данных, которые могут быть переданы без получения подтверждения.
В примере размер окна 8 сегментов. Что происходит, если мы получили очередное подтверждение? Мы можем передвинуть окно дальше по данным, в него попадает новая порция не отправленных данных. Можно отправить эти данные получателю, после этого отправитель останавливается и дожидаются подтверждения получения следующей порции данных. Таким образом, окно скользит вдоль нашего потока байт от приложения.
Тип подтверждения
Есть два типа подтверждения, которые могут использоваться совместно с алгоритмом скользящего окна.
Для устранения этой проблемы предложено выборочное подтверждение. В этом случае получатель подтверждает получение диапазона принятых байт. Он получил первые 500 мегабайт и вторые 500 мегабайт из гигабайта и не получил всего лишь один сегмент. Отправитель вместо вторых 500 мегабайт, повторно передает всего лишь один недостающий сегмент. Выборочное подтверждение эффективно при большом размере окна TCP, но выборочное подтверждение по умолчанию не используется для этого необходимо применение дополнительных полей заголовка TCP, которые называются параметрами.
Порядок следования сообщений
Но подтверждений и повторной отправки данных недостаточно для обеспечения надежной передачи потока байт. Это защищает только от потери сегментов, но не обеспечивает сохранение порядка следования сообщений.
Какие проблемы могут произойти? Протокол IP не сохраняет порядок следования сообщений и поэтому сегменты могут прийти к получателю не в том порядке в котором они были отправлены. Кроме того, некоторые сегменты могут прийти два и более раз. Рассмотрим одну из возможных причин дублирования сегментов.
Дублирование сегментов
Предположим, отправитель передал сегмент данных получателю, получатель этот сегмент принял и передал отправителю подтверждение, но при передаче подтверждения произошла ошибка. Отправитель не получил подтверждение, сработал таймер и тот же самый сегмент данных был отправлен второй раз.
Это один из возможных вариантов, на самом деле, таких вариантов еще очень много, поэтому в протокол TCP встроен механизм защиты от дублирования и нарушение порядка следования сообщений.
Механизм очень простой, все сообщения нумеруются. В TCP нумеруются не сегменты, так как разные сегменты могут иметь разный размер, а байты.
В нашем примере 4 сегмента первый сегмент содержит байты от 0 до 1023, второй от 1024 до 2047 и так далее.
Нумерация байтов
При передаче отправитель включают в сегмент номер первого байта данных, которые в нем содержатся.
Дублирование сегментов
Рассмотрим как решается ситуация с дублированием сегментов.
Соединение TCP
TCP для передачи данных использует соединение. Соединение нужно установить перед тем, как начать передачу данных, а после того как передача данных завершена, соединение разрывается.
Задачи соединения
Установка соединения в TCP
Получатель в ответ передаёт сообщение SYN, куда включает подтверждение получения предыдущего сообщения ACK от слова acknowledge и порядковый номер байта, который он ожидает 7538, потому что на предыдущем этапе был получен байт с номером 7537.
Также отправитель включает в сегмент номер байта в потоке байт 36829. Номера байт в первом сообщении не могут быть всегда нулевыми, они выбираются по достаточно сложным алгоритмам, но для простоты можно представлять себе что эти номера выбираются случайным образом.
На третьем этапе пересылается подтверждение получения предыдущего запроса на установку соединения ACK номер следующего ожидаемого байта 36830, а также номер байта в сообщении. После этого соединение считается установленным и можно передавать данные.
Разрыв соединения в TCP
Протокол TCP предусматривает два варианта разрыва соединения: корректное, с помощью одностороннего разрыва соединения и сообщения FIN и разрыв из-за критической ситуации с помощью сообщения RST.
Рассмотрим, как выполняется корректный разрыв соединения. Сторона, которая хочет разорвать соединение пересылает другой стороне сообщение FIN и в ответ получает сообщение ACK. Однако соединение разорвано только с одной стороны.
Когда другая сторона решила, что данные для передачи у нее закончились, она также передает сообщение FIN в ответ получает сообщение ACK подтверждение. На этом этапе соединение закрыто полностью в обе стороны.
Для разрыва соединения в критической ситуации из-за ошибок в приложении или с оборудованием используется одно сообщение RST. В этом случае соединение закрывается в обе стороны. Хотя сообщение RST предназначено для использования в критических ситуациях, некоторые протоколы используют его для быстрого закрытия соединения.
Заключение
Итак мы рассмотрели протокол TCP — протокол управления передачей данных. TCP обеспечивают надежную передачу потока байт от одного приложения к другому. При этом TCP обеспечивает, как гарантию доставки данных, так и гарантию сохранении порядка следования сообщений.
TCP использует соединение между отправителем и получателем, которое необходимо установить до того, как начнется передача данных, а после завершения передачи соединение необходимо разорвать.
Рассмотрели различные варианты подтверждения сообщений. Остановка и ожидание, которые используются на канальном уровне и скользящее окно которое используется на транспортном уровне в протоколе TCP, для того чтобы повысить производительность передачи данных по протяженным высокоскоростным каналам связи, которые сейчас широко используется в интернет.
Прежде чем передавать данные в TCP, необходимо сначала установить соединение, а после завершения передачи соединение необходимо разорвать. Для установки соединения в TCP используется схема трехкратного рукопожатия. Сначала передается сообщение SYN потом SYN + ACK и на третьем шаге ACK.
Для разрыва соединения возможны две схемы. Корректное закрытие соединения требует корректной отправки обеими сторонами сообщения FIN и получении подтверждения. Разрыв соединения в критической ситуации может быть выполнен быстро, отправкой одного сообщения RST. Таким образом накладные расходы в TCP особенно при передаче небольшого объема данных значительно выше чем в UDP, но соединение и отправка подтверждений позволяют TCP обеспечивать гарантию доставки и гарантию сохранения порядка следования сообщений.
Что такое TCP/IP и как работает этот протокол
Протокол TCP/IP – это целая сетевая модель, описывающая способ передачи данных в цифровом виде. На правилах, включенных в нее, базируется работа интернета и локальных сетей независимо от их назначения и структуры.
Что такое TCP/IP
Произошло наименование протокола от сокращения двух английских понятий – Transmission Control Protocol и Internet Protocol. Набор правил, входящий в него, позволяет обрабатывать как сквозную передачу данных, так и другие детали этого механизма. Сюда входит формирование пакетов, способ их отправки, получения, маршрутизации, распаковки для передачи программному обеспечению.
Стек протоколов TCP/IP был создан в 1972 году на базе NCP (Network Control Protocol), в январе 1983 года он стал официальным стандартом для всего интернета. Техническая спецификация уровней взаимодействия описана в документе RFC 1122.
В составе стека есть и другие известные протоколы передачи данных – UDP, FTP, ICMP, IGMP, SMTP. Они представляют собой частные случаи применения технологии: например, у SMTP единственное предназначение заключается в отправке электронных писем.
Уровни модели TCP/IP
Протокол TCP/IP основан на OSI и так же, как предшественник, имеет несколько уровней, которые и составляют его архитектуру. Всего выделяют 4 уровня – канальный (интерфейсный), межсетевой, транспортный и прикладной.
Канальный (сетевой интерфейс)
Аппаратный уровень обеспечивает взаимодействие сетевого оборудования Ethernet и Wi-Fi. Он соответствует физическому из предыдущего стандарта OSI. Здесь задача состоит в кодировании информации, ее делению на пакеты и отправке по нужному каналу. Также измеряются параметры сигнала вроде задержки ответа и расстояния между хостами.
Межсетевой (Internet Layer)
Интернет состоит из множества локальных сетей, объединенных между собой как раз за счет протокола связи TCP/IP. Межсетевой уровень регламентирует взаимодействие между отдельными подсетями. Маршрутизация осуществляется путем обращения к определенному IP-адресу с использованием маски.
Если хосты находятся в одной подсети, маркируемой одной маской, данные передаются напрямую. В противном случае информация «путешествует» по целой цепочке промежуточных звеньев, пока не достигнет нужной точки. Назначение IP-адреса проводится по стандарту IPv4 или IPv6 (они не совместимы между собой).
Транспортный уровень (Transport Layer)
Следующий уровень отвечает за контроль доставки, чтобы не возникало дублей пакетов данных. В случае обнаружения потерь или ошибок информация запрашивается повторно. Такой подход дает возможность полностью автоматизировать процессы независимо от скорости и качества связи между отдельными участками интернета или внутри конкретной подсети.
Протокол TCP отличается большей достоверностью передачи данных по сравнению с тем же UDP, который подходит только для передачи потокового видео и игровой графики. Там некритичны потери части пакетов, чего нельзя сказать о копировании программных файлов и документов. На этом уровне данные не интерпретируются.
Прикладной уровень (Application Layer)
Здесь объединены 3 уровня модели OSI – сеансовый, представления и прикладной. На него ложатся задачи по поддержанию сеанса связи, преобразованию данных, взаимодействию с пользователем и сетью. На этом уровне применяются стандарты интерфейса API, позволяющего передавать команды на выполнение определенных задач.
Возможно и использование «производных» протоколов. Например, для открытия сайтов используется HTTPS, при отправке электронной почты – SMTP, для назначения IP-адресов – DHCP. Такой подход упрощает программирование, снижает нагрузку на сеть, увеличивает скорость обработки команд и передачи данных.
Порты и сокеты – что это и зачем они нужны
Процессы, работающие на прикладном уровне, «общаются» с транспортным, но они видны ему как «черные ящики» с зашифрованной информацией. Зато он понимает, на какой IP-адрес адресованы данные и через какой порт надо их принимать. Этого достаточно для точного распределения пакетов по сети независимо от месторасположения хостов. Порты с 0 до 1023 зарезервированы операционными системами, остальные, в диапазоне от 1024 до 49151, условно свободны и могут использоваться сторонними приложениями.
Комбинация IP-адреса и порта называется сокетом и используется при идентификации компьютера. Если первый критерий уникален для каждого хоста, второй обычно фиксирован для определенного типа приложений. Так, получение электронной почты проходит через 110 порт, передача данных по протоколу FTP – по 21, открытие сайтов – по 80.
Преобразование IP-адресов в символьные адреса
Технология активно используется для назначения буквенно-цифровых названий веб-ресурсов. При вводе домена в адресной строке браузера сначала происходит обращение к специальному серверу DNS. Он всегда прослушивает порт 53 у всех компьютеров, которые подключены к интернету, и по запросу преобразует введенное название в стандартный IP-адрес.
После определения точного местонахождения файлов сайта включается обычная схема работы – от прикладного уровня с кодированием данных до обращения к физическому оборудованию на уровне сетевых интерфейсов. Процесс называется инкапсуляцией информации. На принимающей стороне происходит обратная процедура – декапсуляция.
Национальная библиотека им. Н. Э. Баумана
Bauman National Library
Персональные инструменты
TCP (Transmission Control Protocol)
В наборе протоколов TCP/IP протокол управления передачей (Transmission Control Protocol — TCP) выполняет функции транспортного протокола с установлением логического соединения, TCP включает целый ряд функциональных средств, не предусмотренных в UDP. Одним из основных функциональных средств TCP является метод управления потоком данных и исправления ошибок, называемый методом передачи с применением окон.
Метод передачи с применением окон представляет собой эффективную и удобную форму управления потоком данных. Как описано в главе 1, этот метод позволяет хосту отправлять только указанное количество байтов, после чего он должен ожидать от получателя ответа в виде так называемого подтверждения (АСК). Метод передачи с применением окон, как и все другие методы управления потоком данных, позволяет предотвратить передачу одним устройством другому чрезмерно интенсивного потока данных в процессе обмена данными по сети. В протоколе TCP используется одна из разновидностей метода передачи с применением окон, основанная на использовании прямых подтверждений (Forward Acknowledgment — FACK), а предельные объемы передаваемых данных измеряются в байтах. Применение метода на основе FACK можно проиллюстрировать на следующем примере. Предположим, что отправитель послал получателю данные объемом 50 байтов. Если получатель успешно принял все 50 байтов, он отправляет подтверждение АСК на 51 байт, которое сообщает отправителю, что все 50 байтов были получены и далее ожидается 51-й байт. Но отправитель не отправляет 51-й байт до тех пор, пока не получит подтверждение АСК на предыдущие байты. А если подтверждение АСК на какие-либо байты не будет получено, отправитель выполнит повторную передачу всех 50 байтов по истечении тайм-аута (этот период ожидания принято называть тайм-аутом повторной передачи — Retransmit Timer). Если же отправитель примет подтверждение АСК на часть байтов, но не на все, он выполнит повторную передачу только тех байтов, которые не были приняты получателем. Например, если отправителю поступает подтверждение АСК со значением 39, он передает все байты, которые следуют за байтом 38. Но этот пример несколько упрощен, поскольку следует учитывать, что в этом протоколе применяется еще одно средство — скользящие окна.
Скользящие окна получили такое название, поскольку в процессе передачи можно условно представить, что программное обеспечение TCP «перемешает» окно в потоке данных в ответ на каждое подтверждение АСК. Такое средство, по-видимому, проще всего объяснить на примере. На рис. 5.3 компьютер с сетевым именем Bart отправляет сообщение на компьютер Homer. Размер окна (т.е. количество байтов, которое разрешено передавать до получения какого-либо подтверждения) составляет 500 байтов. Компьютер Bart передает 500 байтов, устанавливает тайм-аут и ожидает, будет ли получен ответ от компьютера Homer или прежде произойдет истечение тайм-аута. Компьютер Homer получает все 500 байтов и передает компьютеру Homer байты с 501-го по 1000-й.
Метод передачи с применением окон, предусмотренный в протоколе TCP, является динамическим. Это означает, что размер окна может изменяться (и почти всегда изменяется) на протяжении одного сеанса передачи данных. Такие изменения происходят в ответ на ошибки; при этом размер окна уменьшается (или в ответ на их отсутствие; при этом окно увеличивается). В процессе первоначального установления сеанса определяется базовый размер окна. Кроме того, отправителю передается начальный порядковый номер (SEQuence number — SEQ), который указывает номер начального байта. В заголовке TCP каждого передаваемого сегмента TCP содержится поле размера окна, которое указывает размер окна, установленный другим участником соединения. Если возникает ошибка и часть данных теряется (вызывая повторную передачу данных программным обеспечением TCP), хост получателя может уменьшить размер окна. С другой стороны, если значительные объемы данных были приняты без ошибок, хост отправителя может увеличить размер окна.
Например, на рис. 5.4 показано, как компьютер Chandler передает данные компьютеру Rachael. Первоначальный размер окна для компьютера Chandler составляет 100 байтов. Он передает 100 байтов компьютеру Rachael, который получает все 100 байтов, отправляет подтверждение АСК с разрешением отправить 101-й байт и увеличивает размер окна до 200 байтов. Затем компьютер Chandler перемещает свое окно на 101-й байт и расширяет его для включения следующих 200 байтов. После этого он посылает еще 200 байтов компьютеру Rachael, который тем не менее успешно получает только байты вплоть до 250-го. Поэтому компьютер Rachael отправляет в ответ подтверждение АСК на получение байтов, начиная с 251-го, наряду с уменьшением размера окна на 100 байтов. Компьютер Chandler перемещает окно назад, к 251-му байту, и уменьшает окно, включив в него только байты с 251-го по 350-й.
Метод передачи с применением окон, предусмотренный в протоколе TCP, не только представляет собой динамический процесс, но и осуществляется в дуплексном режиме. Это означает, что на каждом хосте предусмотрена возможность и передавать, и принимать данные о размере и положении окна. Каждое окно применяется независимо от другого и может увеличиваться или уменьшаться с учетом условий передачи в соответствующем направлении.
Еше одним важным средством протокола TCP является способность мультиплексировать логические сеансы между удаленными хостами. Такая возможность предусмотрена и в TCP, и в UDP и позволяет применять одновременно сразу несколько соединений, поскольку данные, передаваемые по каждому из них, различаются с помощью транспортного протокола. Эта тема рассматривается более подробно в главе 6. Наконец, необходимо рассмотреть такое понятие, как сеанс, в рамках которого реализуются все средства TCP. При установлении сеанса TCP выполняются следующие три основные задачи:
Процесс установления сеанса TCP между клиентом и сервером (называемый также трехэтапным квитированием) происходит следующим образом. Клиент инициирует сеанс, передавая сегмент с установленным битом синхронизации (SYNchronization — SYN). Этот сегмент содержит данные о размере окна клиента и его текущем порядковом номере. Сервер отвечает на запрос SYN клиента сегментом АСК и также включает в передаваемый им сегмент бит SYN, данные о размере окна и начальном порядковом номере. Наконец, клиент отвечает на сегмент SYN сервера подтверждением АСК. Этот процесс показан на рис. 5.5.
Процесс разрыва сеанса TCP аналогичен процессу его установления. Вначале участник соединения, желающий закрыть сеанс (предположим, что в данном примере это — клиент), инициализирует процесс завершения сеанса, отправляя сегмент с установленным битом завершения (FINish — FIN). Сервер отвечает, передавая в ответ на сегмент FIN клиента подтверждение АСК. Затем сервер передает собственный сегмент с установленным битом FIN. После этого клиент передает в ответ на сегмент FIN сервера подтверждение АСК и сеанс закрывается. Этот процесс показан на рис. 5.6.
Наконец, на рис. 5.7 показан формат заголовка протокольной единицы обмена TCP (Protocol Data Unit — PDU). Так формально называются сегменты TCP.