Скачиваний:
14
Добавлен:
01.05.2014
Размер:
317.44 Кб
Скачать

6.4.4. Протокол tcp

6.4.4.1. Структура tcp-сегмента

ТСР – протокол, поддерживающий надежную передачу данных с предварительным установлением связи между источником и получателем.

ТСР характеризуется следующими особенностями:

  1. Перед фактической передачей данных необходимо установление связи, т.е. запрос и подтверждение на возможность передачи данных. После обмена данными сеанс должен быть явно завершен.

  2. Доставка информации является надежной, т.е. нет дублирования, пропадания и нарушения очередности пакетов.

  3. Возможность управления потоком во избежание переполнения или затора.

  4. Доставка экстренных данных.

TCP-канал - это двунаправленный поток данных между соответствующими объектами обмена – источником и получателем. Данные передаются в виде пакетов различной длины, называемых сегментами. Формат ТСР сегмента представлен ниже.

0 – 3

4 - 7

8 - 11

12 - 15

16 - 19

20 - 23

24 - 27

28 – 31

Source port

Destination port

Sequence number

Acknowledgement number

Offset

Reserved

Flags

Window

Checksum

Urgent pointer

Options

Padding

Data

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

Положение каждого сегмента в потоке фиксируется порядковым номером (Sequence number). Сегмент также содержит номер подтверждения (Acknowledgement number), определяющий номер первого неподтвержденного байта в потоке.

Поле Window определяет количество байтов, которые получатель готов принять, начиная с байта, номер которого определен как Acknowledgement number.

Поле Offset указывает на начало данных в сегменте. Поле необходимо т.к. заголовок может иметь переменную длину.

Поле Flags содержит 6 управляющих битов:

  1. URG – экстренные данные

  2. ACK – в заголовке есть подтверждение

  3. PSH – немедленная передача данных

  4. RST – уничтожение канала

  5. SYN – управляющее сообщение

  6. FIN – прекращение передачи

Поле Checksum – контрольная сумма

Поле Urgent pointer – указатель на экстренные данные (при установленном флаге URG).

Поле Options – дополнительные параметры.

Поле Padding – выравнивающее до 32 бит поле.

6.4.4.2. Этапы tcp-сеанса

TCP-сеанс состоит из трех этапов.

Этап 1 – "рукопожатие" (handshaking).

  1. Одна из сторон, становящаяся клиентом, посылает другой стороне – серверу – сегмент SYN.

  2. Если сервер готов общаться с клиентом, то он создает канал (создает необходимые структуры данных) сегмент SYN, ACK.

  3. Клиент создает канал (необходимые структуры данных) и посылает в ответ сегмент ACK.

На этом этап создания канала завершается.

Этап 2. Обмен данными.

После создания канала стороны обмениваются данными в дуплексном режиме.

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

Данные буферизируются на каждой из сторон.

Когда требуется немедленная передача данных, протокол верхнего уровня устанавливает флаг PSH.

Ошибочные данные повторяются. Ошибки обнаруживаются за счет использования контрольных сумм.

Если данные доставлены без ошибок, получатель подтверждает это сегментом ACK.

Если отправитель не получил подтверждения в течение некоторого времени, он повторно посылает данные. (Негативное подтверждение NAK отсутствует)

Этап 3. Завершение сеанса.

Любая из сторон может завершить передачу, отправив сегмент FIN. Другая сторона подтверждает получение такого сегмента, но может продолжать передачу по уже одностороннему каналу. Когда эта вторая сторона пошлет сегмент FIN, а первая пошлет подтверждение, тогда канал полностью закрывается.

Состояния TCP-канала

  1. CLOSED – канал не существует

  2. LISTEN – готовность сервера к приему запросов

  3. SYN-SENT – клиент послал сегмент SYN с запросом на соединение

  4. SYN-RECEIVED – сервер получил SYN и отослал SYN, ACK

  5. ESTABLISHED – канал установлен

  6. FIN-WAIT-1 – сторона послала сегмент FIN

  7. CLOSE-WAIT – сторона приняла FIN и отправила на него ACK

  8. FIN-WAIT-2 – получен ACK на посланный FIN

  9. CLOSING – ожидание подтверждения на запрос окончания связи

  10. LAST-ACK – ожидание подтверждения на запрос окончания связи (канал уже односторонний)

  11. TIME-WAIT – таймаут перед окончательным разрушением канала.

Заключение

Здесь представлены только основные черты TCP-протокола. В действительности при реализации протокола возникает масса нюансов, которые должны преодолеваться.

К таким нюансам относятся "синдром глупого окна", медленный старт, способы устранения заторов.

Соседние файлы в папке Материалы к курсу