Перед фактической передачей данных необходимо установление связи, т.е. запрос на начало сеанса передачи данных источником и подтверждение получателем. После обмена данными сеанс передачи должен быть явно завершен.
Доставка информации является надежной, не допускающей дублирования или нарушения очередности получения данных.
Возможность управления потоком данных для избежания переполнения и затора.
Доставка экстренных данных.
Эти возможности протокола позволяют протоколам верхнего уровня и, соответственно, приложениям, их реализующим, не заботиться о надежности, последовательности доставки и т.д. Таким образом, протоколы приложений, использующие TCP, могут быть значительно упрощены. С другой стороны, это ведет к сложности самого транспортного протокола и, как следствие, к значительным накладным расходам при передаче данных.
TCP-канал представляет собой двунаправленный поток данных между соответствующими объектами обмена — источником и получателем. Данные могут передаваться в виде пакетов различной длины, называемых
Рис. 6.11
. Формат TCP-сегментаПоложение каждого сегмента в потоке фиксируется порядковым номером (Sequence Number
Acknowledgement Number
), сообщающий отправителю количество полученных от него последовательных данных. Номер подтверждения определяется как номер первого неподтвержденного октета в потоке.И порядковый номер, и номер подтверждения занимают по 32 бита в заголовке TCP-сегмента, таким образом, их максимальное значение составляет (2^3^2 - 1), за которым следует 0. При установлении связи стороны договариваются о начальных значениях порядковых номеров (Initial Sequence Number, ISN) в каждом из направлений. Впоследствии первый октет переданных данных будет иметь номер (ISN+1).
Управление потоком данных осуществляется с помощью
Window
, которое указывает на количество данных, которое адресат готов принять, начиная с октета, указанного в поле Acknowledgement Number
.Заголовок TCP-сегмента занимает как минимум 20 октетов. Помимо рассмотренных нами порядковых номеров и анонсируемого окна, он содержит ряд других важных полей. Заголовок начинается с двух номеров портов, адресующих логические процессы на обоих концах виртуального канала. Далее следуют порядковый номер и номер подтверждения.
Поле смещения (Offset
Значение этого поля измеряется в 32-битных словах. Таким образом, при минимальном размере заголовка поле Offset
Далее заголовок содержит шесть управляющих флагов Flags
URG | Указывает, что сегмент содержит экстренные данные, и поле Urgent pointer заголовка определяет их положение в сегменте. |
ACK | Указывает, что заголовок содержит подтверждение полученных данных В поле Acknowledgement Number. |
PSH | Указывает, что данные должны быть переданы немедленно, не ожидая заполнения сегмента максимального размера. |
RST | Указывает на необходимость уничтожения канала. |
SYN | Указывает, что сегмент представляет собой управляющее сообщение, являющееся частью "тройного рукопожатия" для синхронизации порядковых номеров при создании канала. |
FIN | Указывает, что сторона прекращает передачу данных и желает закрыть виртуальный канал. |
Поле контрольной суммы Checksum