Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
96
Добавлен:
23.02.2015
Размер:
8.9 Mб
Скачать

Лекция 2.Протокол tcp. Структура tcp-сегмента

Полная спецификация протокола TCPпредставлена в документеRFC793.

TCP (Transmission Control Protocol, Протокол управления передачей) был спроектирован в качестве связующего протокола для обеспечения интерактивной работы между компьютерами. TCP обеспечивает надежность и достоверность обмена данными между процессами на компьютерах, входящих в общую сеть.

TCP находится на транспортном уровне стека TCP/IP, между протоколом IP и собственно приложением. Протокол IP занимается пересылкой дейтаграмм по сети, никак не гарантируя доставку, целостность, порядок прибытия информации и готовность получателя к приему данных; все эти задачи возложены на протокол TCP.

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

Ниже основные функции протокола TCP и их реализация рассмотрены более подробно.

Базовая передача данных

Протокол TCP способен передавать непрерывные потоки байтов между своими клиентами в обоих направлениях, пакуя байты в сегменты для передачи через системы Internet. В общем случае протоколы TCP решают по своему усмотрению, когда производить приостановку и передачу данных.

Обеспечение достоверности

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

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

Управление потоком

Протокол TCP дает средства получателю управлять количеством данных, посылаемых ему отправителем. Это достигается возвратом так называемого "окна" (window) вместе с каждым подтверждением, которое указывает диапазон приемлемых номеров, следующих за номером последнего успешно принятого сегмента. Окно определяет количество байтов, которое отправитель может послать до получения дальнейших указаний.

Мультиплексирование каналов

Протокол TCP обеспечивает на одном компьютере работу одновременно нескольких соединений. Каждый прикладной процесс идентифицируется номером порта. Заголовок TCP-сегмента содержит номера портов процесса-отправителя и процесса-получателя. При получении сегмента модуль TCP анализирует номер порта получателя и отправляет данные соответствующему прикладному процессу.

Все распространенные сервисы Интернет имеют стандартизованные номера портов. Например, номер порта сервера электронной почты - 25, сервера FTP – 21, сервера TELNET – 23, WWW-сервера – 80 и т.д.

Совокупность IP-адреса и номера порта называется сокетом. Сокет уникально идентифицирует прикладной процесс. Например, сокет сервера электронной почты на хосте 194.84.124.4 обозначается как 194.84.124.4.25; часто номер порта отделяется двоеточием.

Работа с соединениями

Соединение - это совокупность информации о состоянии потока данных, включающая сокеты, номера посланных, принятых и подтвержденных байтов, размеры окон. Каждое соединение уникально идентифицируется парой сокетов. Соединение характеризуется для клиента некоторым указателем на структуру TCB (Transmission Control Block), содержащую полную информацию о соединении.

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

Формат TCP-сегмента

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

Source Port

Destination Port

Sequence Number (SN)

Acknowledgment Number (AN)

Data Offset

Reserved

U R G

A C K

P S H

P S T

S Y N

F I N

Window

Checksum

Urgent Pointer

Options

Padding

Data

Рис.1. ФорматTCP-сегмента

Source Port(16 бит) – номер порта отправителя.

Destination Port(16 бит) – номер порта получателя.

Sequence Number(32 бит) – последовательный номер передаваемого байта данных (номер первого байта поля данных сегмента). Каждая сторона счет передаваемых байт ведет независимо. При установке ТСР-соединения счетчикSNпринимает случайное 32-битовое значение, которое передается противоположной стороне в сегменте SYN.

Если в сегменте присутствует флаг SYN, то номер является инициализационным (ISN) и номер первого байта данных будет ISN+1.

Acknowledgment Number(32 бит) – ожидаемый номер первого байта данных в следую-щем принимаемом сегменте. Этим номером подтверждаются все принятые байты доAN-1 включительно.

Если установлен управляющий бит ACK, то поле ANсодержит следующий номер байта, который отправитель данной датаграммы желает получить в обратном направлении. Номера подтверждения посылаются постоянно, как только соединение будет установлено.

Data Offset(4 бита) – длина заголовка в 32-битных словах.

Указывает на начало поля данных. TCP заголовок всегда кончается на 32-битной границе слова, даже если он содержит опции.

Reserved(6 бит).

Резервное поле, должно быть заполнено нулями.

Control Bits(6 бит) – управляющие биты.

URG

указатель срочности данных этого сегмента

ACK

подтверждение получения правильного сегмента

PSH

проталкивание приложению данного сегмента вне очереди

RST

перезагрузка данного соединения

SYN

синхронизация счетчиков байтов в фазе установления соединения

FIN

нет больше данных для передачи

Рис. 2. Управляющие биты

Window(16 бит) – количество байтов, которое может принять отправитель настоящего сегмента.

Checksum(16 бит) – контрольная сумма.

Контрольная сумма – это 16-битное число, контролирующее ошибки сегмента. Если сегмент содержит в заголовке и данных нечетное количество байтов, подлежащих учету в контрольной сумме, последний байт будет дополнен нулями справа с тем, чтобы образовать для вычисления контрольной сумме 16-битное слово. Возникший при таком выравнивании байт не передается вместе с сегментом по сети. Перед вычислением контрольной суммы поле этой суммы заполняется нулями.

Контрольная сумма вычисляется с учетом специального псевдозаголовка, который ставится перед TCP заголовком (но никуда не передается). Псевдозаголовок содержит адрес отправителя и получателя (по 32 бита), код протокола (для ТСР это код 6) и длину TCP сегмента в байтах (без псевдозаголовка):

Адрес отправителя (32 бит)

Адрес получателя (32 бит)

8 нулей

Код протокола (8 бит)

Длина сегмента (16 бит)

Рис. 3. Псевдозаголовок

Такой подход обеспечивает защиту протокола TCP от ошибившихся в маршруте сегментов.

Контрольная сумма – есть 16 младших разрядов от арифметического сложения 16-битных слов ТСР-сегмента и псевдозаголовка как целых чисел, инвертирования разрядов всей полученной суммы и прибавления единицы к младшему разряду суммы.

Urgent Pointer(16 бит) – указатель окончания срочных данных. Указывает на номер байта следующего за срочными данными, с которого данные имеют обычный статус. Это поле интерпретируется только в том случае, когда в сегменте выставлен бит URG.

Options(длина переменная) – опции.

Опции располагаются в конце TCP заголовка, их длина кратна 8 бит. Все опции учитываются при расчете контрольной суммы.

Опции могут начинаться с любого байта. Они могут иметь два формата:

  • однобайтный тип опций;

  • байт типа опции, байт длины опции и байты данных рассматриваемой опции.

В байте длины опции указывается длина всех полей опции (в байтах).

Часто используется опция определяющая максимальный размер сегмента. Поле данных опции - 16 бит. Если опция присутствует, то она указывает для другой стороны максимальный размер получаемого сегмента. Эту опцию следует посылать лишь при первоначальном запросе на установление соединения (т.е. в сегментах с установленным контрольным битом SYN).

Padding(длина переменная) – выравнивание.

Выравнивание TCP заголовка осуществляется с тем, чтобы указать, что TCP заголовок заканчивается, а поле данных сегмента начинается на 32-битной границе. Выравнивание вы-полняется нулями.

Data(длина переменная) – данные сегмента

Сегменты с установленными битами SYNиFIN, а также сегменты с данными требуют подтверждения. После посылки этих сегментов протокол всегда включает таймерRTO.

Соседние файлы в папке Сетевые технологии