Протоколы TCP/IP берут свое начало от одной из первых
территориальных сетей ARPANET. Их развитие контролируется организацией
IETF (Internet Engineering Task Force), выпускающей руководящие документы
RFC (Requests For Comments).
TCP —
дуплексный транспортный протокол с
установлением соединения. Его функции: упаковка и распаковка
пакетов на концах транспортного соединения; установление
виртуального канала путем обмена запросом и согласием на соединение; контроль правильности передачи пакетов — получатель подтверждает правильность полученных данных; управление потоком — получатель сообщает размер окна, т.е. диапазон номеров пакетов, которые получатель готов принять; помещение срочных данных между специальными указателями, т.е. возможность управлять скоростью передачи.
В TCP имеется специальное
программное обеспечение для обслуживания соединений. В частности, это может быть программа-демон, которая постоянно готова к работе и при приходе запроса генерирует свою копию для обслуживания создаваемого соединения, а сама программа-родитель ждет новых вызовов.
Схема установления соединения при дуплексной передаче такова: инициатор соединения обращается к своей ОС, которая в ответ выдает номер протокольного порта и посылает
сегмент получателю. Тот должен подтвердить получение запроса и послать свой сегмент-запрос на создание обратного соединения (так как соединение дуплексное). Инициатор должен подтвердить создание обратного соединения. Получается трехшаговая процедура (handshake) установления соединения. Во время этих обменов партнеры сообщают номера байтов Б
пр и Б
обр в потоках данных, с которых начинаются сообщения. На противоположной стороне счетчики устанавливаются в состояние на единицу больше, чем и обеспечивается механизм синхронизации в
дейтаграммной передаче, реализуемой на
сетевом уровне. Поскольку используется оконный режим передачи, узлы обмениваются также допустимыми для них размерами окон О
пр и О
обр. После установления соединения начинается обмен. При этом номера протокольных портов включаются в заголовок пакета. Разъединение происходит в обратном порядке.
Рис. 1. Трехшаговая процедура установления соединения
Структура TCP-пакета (в скобках указано число битов) показана рис. 1 и представлена следующим списком:
- порт отправителя (16);
- порт получателя (16);
- код позиции в сообщении, т.е. порядковый номер первого байта в поле данных сегмента (32);
- подтверждение в виде номера первого байта (32) из числа еще не подтвержденных байтов;
- управление (16);
- размер окна (16), т.е. число байт, которое можно послать до получения подтверждения (размер окна указывает получатель в сегментах подтверждения приема);
- контрольная сумма (16);
- дополнительные признаки, например срочность передачи (16);
- опции (24);
- заполнитель (8);
- данные.
Рис. 2. Структура TCP-сегмента
Протокол TCP является байтовым, т.е каждый байт в передаваемых сегментах конкретного сообщения имеет уникальный порядковый номер.
Если передача ведется только в одном направлении, то поле "код позиции" в заголовке используется станцией-отправителем для указания номера первого байта в данном сегменте, а поле "подтверждение" используется станцией-получателем в виде указания в положительных квитанциях номера

, что означает, что правильно приняты все байты вплоть до номера

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

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

. Так, для каналов со спутниками на геостационарных орбитах

составляет около 0,5 с и ограничение скорости будет около 1 Мбит/с. Заметно увеличить этот предел можно, если в качестве информационной единицы использовать

байт,

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

(тайм-аута) не пришло положительное подтверждение. Следовательно, не нужно посылать отрицательные квитанции. Обычно

немного больше

, где

— некоторая оценка времени прохождения пакета туда и обратно. Это время периодически корректируется по результату измерения

, а именно

Попытки повторных передач пакета не могут продолжаться бесконечно, и при превышении интервала времени, устанавливаемого в пределах 0,5...2,0 мин., соединение разрывается.
Задержки в передаче данных определяются прежде всего задержками в
маршрутизаторах и затратами времени на повторные передачи. Причинами повторных передач могут быть не только потери или искажения пакетов в промежуточных узлах, но и недостаточная емкость буферной памяти в узлах-получателях. Размер буфера для принимаемых сообщений должен быть оптимизирован: слишком малый размер может привести к отбрасыванию непомещающихся сегментов, т.е. к частым повторным передачам (всплескам трафика), а слишком большой размер может привести к длинным очередям, т.е. к росту

и увеличению задержек.
Размер окна регулируется следующим образом. Если сразу же после установления соединения выбрать завышенный размер окна, что означает разрешение посылки сегментов с высокой интенсивностью, то велика вероятность появления перегрузки определенных участков сети. Поэтому используется алгоритм так называемого
медленного старта. Сначала посылается один пакет и после подтверждения его приема окно увеличивается на единицу (на размер одного пакета, обычно это 512 байт), т.е. посылаются два пакета. Если вновь положительное подтверждение (потерь пакетов нет), то посылаются уже четыре пакета, т.е. окно увеличивается на единицу при каждом подтверждении, и т.д. Скорость растет, пока пакеты проходят успешно. При потере пакета или при приходе от протокола управления сигнала о перегрузке размер окна уменьшается и далее опять возобновляется процедура роста (но уже линейного) размера окна. Линейный рост реализуется при увеличении окна на единицу с периодичностью

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