![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Протокол TCP (Transmission Control Protocol, Протокол управления передачей) описан в RFC 793. Он обеспечивает надежную передачу потока данных, используя сервис передачи дейтаграмм протокола IP. Пакеты, передаваемые протоколом TCP, называются сегментами. Надежность передачи обеспечивается при помощи нумерации байтов потока и подтверждений приема. Все байты исходного потока данных нумеруются (этот номер называется номером в последовательности (sequence number)), и с каждым сегментом передается номер в последовательности его первого байта.
Поскольку два узла могут передавать два потока данные по одному TCP-соединению, для передачи подтверждений одного потока используются сегменты встречного потока. В каждом сегменте передается номер в последовательности байта, который собирается принять данный узел.
После того, как модуль TCP передаст сегмент модулю IP, он записывает его копию в очередь на повторную передачу и запускает таймер для этого сегмента. Когда поступит подтверждение приема сегмента (то есть будет принят сегмент, в котором будет заявлено, что та сторона готова принять байт с номером, большим всех номеров байтов сегмента, ждущего повторной передачи), сегмент удаляется из очереди. Если подтверждение не поступает до срабатывания таймера, сегмент отправляется повторно.
Сегмент состоит из заголовка и поля данных. Формат заголовка сегмента TCP приведен на рис.
Порт отправителя | Порт получателя | |||
Номер в последовательности | ||||
Номер подтверждения | ||||
Смещение данных | Резерв | Биты управления | Окно | |
Контрольная сумма | Указатель срочности | |||
Опции | Выравнивание | |||
Порт отправителя (Source port) и Порт получателя (Destination port) [16 бит] – номера портов на узлах.
Номер в последовательности (Sequence Number) [32 бита] – номер в потоке первого байта данных этого сегмента. Если установлен управляющий бит SYN, то в этом поле содержится начальный номер в последовательности (Initial Sequence Number, ISN) и первый байт данных сегмента имеет номер в потоке ISN+1.
Номер подтверждения (Acknowledgement number) [32 бита] – номер байта в потоке, ожидаемого отправителем данного сегмента. При этом должен быть установлен управляющий бит ACK.
Смещение данных (Data offset) [4 бита] – количество 32-битовых слов в заголовке TCP-сегмента. Минимальное значение поля – 5 (20-ти байтовый заголовок).
Резерв (Reserved) [6 битов] – должны быть заполнены нулями.
Биты управления (Control bits) [6 битов] – от старшего к младшему:
URG (Urgent Pointer field significant) – принимать во внимание поле Указатель срочности
ACK (Acknowledgement field significant) – принимать во внимание поле Номер подтверждения
PSH (Push function) – сегмент содержит “протолкнутые” данные
RST (Reset the connection) – прервать связь
SYN (Synchronize sequence numbers) – синхронизировать номера байтов в потоке
FIN (No more data from sender) – отправитель больше не будет передавать данные
Окно (Window) [16 бит] – размер окна – количество байтов данных, начиная с указанного в поле Номер подтверждения, которые отправитель данного сегмента готов принять.
Контрольная сумма (Checksum) [16 бит] – контрольная сумма всего сегмента (заголовка и данных), вычисляется по алгоритму протокола IP. Как и в UDP, перед вычислением контрольной суммы к сегменту приписывается псевдозаголовок (той же структуры, что и в UDP).
Указатель срочности (Urgent Pointer) [16 бит] – содержит номер первого байта, имеющего обычный статус срочности. При этом должен быть установлен управляющий бит URG.
Опции (Options) [переменный размер] – дополнительная служебная информация. Подобно опция заголовка IP-дейтаграммы, имеют переменную длину и могут вообще отсутствовать.
Выравнивание (Padding) – поле, используемое для доведения размера заголовка до целого числа 32-битовых слов.
Каждый раз при установлении соединения модуль TCP создает структуру данных – Блок управления передачей (Transmission Control Block, TCB), хранящую постоянную информацию о соединении (IP-адреса, номера портов, указатели на входной и выходной буферы, очередь повторной отправки и т.д.) и текущие значения переменных, описывающих текущее состояние соединения. К этим переменным относятся:
SND.UNA – не подтвержденная посылка
SND.NXT – следующий сегмент на отправку
SND.WND – окно отправки
SND.UP – указатель срочности для отправляемых данных
SND.WL1 – номер в последовательности, использованный для последней коррекции окна
SND.WL2 – номер подтверждения, использованный для последней коррекции окна
ISS – начальный номер в последовательности для отправки
RCV.NXT – следующий сегмент, который можно принять
RCV.WND – окно приема
RCV.UP – указатель срочности для принимаемых данных
IRS – начальный номер в последовательности для приема
Кроме того, значения некоторых полей заголовка текущего сегмента тоже переносятся в переменные TCB:
SEG.SEQ – номер в последовательности из
SEG.ACK – номер подтверждения
SEG.LEN – длина сегмента
SEG.WND – размер окна
SEG.UP– указатель срочности
SEG.PRC – приоритет
TCP-соединение может находиться в разных состояниях:
LISTEN (Прослушивание) – ожидание запроса на соединение
SYN-SENT (Синхронизация отправлена) – ожидание парного запроса на соединение (после того, как был отправлен запрос на соединение)
SYN-RECEIVED (Синхронизация получена) – ожидание подтверждения после обмена запросами на соединение
ESTABLISHED (Установлено) – соединение установлено и может передавать пользовательские данные; основное рабочее состояние
FIN-WAIT-1 (Ожидание завершения 1) – ожидание запроса на завершение соединения или подтверждения своего запроса на завершение соединения
FIN-WAIT-2 (Ожидание завершения 2) – ожидание запроса на завершение соединения
CLOSE-WAIT (Ожидание закрытия) – ожидание запроса на закрытие соединения от своего прикладного процесса
CLOSING (Закрытие) – ожидание подтверждения запроса на закрытие соединения
LAST-ACK (Последнее подтверждение) – ожидание подтверждения запроса на закрытие соединения (в котором содержалось подтверждение запроса на закрытие соединения)
TIME-WAIT (Ожидание) – пауза для уверенности. что дальняя сторона соединения получила подтверждение своего запроса на закрытие соединения
CLOSED (Закрыто) – соединение закрыто
14. ПРОТОКОЛЫ И СЛУЖБЫ НА ОСНОВЕ TCP/IP
Дата публикования: 2014-11-04; Прочитано: 374 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!