TCP
TCP (Transmission Control Protocol) — наверное, самый известный и популярный протокол из применяющихся в интернете. TCP гарантирует доставку данных в правильном порядке, без потерь и дубликатов, а также управляет потоком и перегрузкой сети. Вместе с протоколом IP он является основанием стека TCP/IP, на котором построена вся есть.
Описание[править]
Разработка TCP началась в рамках проекта ARPANET.
Изначально функции надёжной передачи и маршрутизации были объединены в одном протоколе TCP. Но затем протокол разделили на два уровня: TCP (транспортный) и IP (сетевой), так и повелось. TCP был формально стандартизирован в RFC 793, после чего особенно существенно не менялся.
Работает он весьма продуманно, хитросрако и потужно. Перед передачей данных устанавливается логическое соединение между отправителем и получателем, затем гарантируется доставка всех данных в правильном порядке, без потерь и дубликатов. Также данные могут передаваться одновременно в обоих направлениях. TCP-сегмент состоит из заголовка, который весьма большой и толстый и включает минимум 20 байт, и полезной нагрузки (данных приложения). Заголовок содержит поля, необходимые для управления соединением.
Он использует трёхэтапное рукопожатие для установления соединения. Сначала пожилой клиент отправляет сегмент с флагом SYN и начальным номером последовательности (ISN_A). Сервер отвечает сегментом с флагами SYN и ACK, своим ISN_B и подтверждением ISN_A + 1. Клиент отправляет сегмент с флагом ACK, подтверждая ISN_B + 1. После этого соединение считается установленным.
Данные делятся на сегменты, каждый из которых получает свой номер последовательности. Получатель отправляет подтверждения, указывая номер следующего ожидаемого байта. При этом получатель может ждать до 500 мс перед отправкой ACK, чтобы объединить несколько подтверждений. При отсутствии подтверждения в течение таймаута отправитель повторно передаёт сегмент.