Сетевое программирование в .NET, страница 6

Flag

Description

6 bits

Зарезервированы для будущего использования. Должны быть нулями.

URG  (1-bit)

Помечает пакет, содержащий срочные данные (urgent data)

ACK  (1-bit)

Подтверждение получения (Acknowledge)

PUSH  (1-bit)

Указывает, что данные надо немедленно передать (push) приложению

RESET  (1-bit)

Установка TCP-соединения в исходное состояние (Reset)

SYN  (1-bit)

Указывает, что этот пакет синхронизирует сессию (start-of session)

FIN  (1-bit)

Указывает, что сессия завершается с помощью FIN-пакетов

Для учреждения сессии, слежения за ее статусом и завершения используется специальный протокол рукопожатия (handshaking protocol). Вот его фазы:

¨  Открывающее рукопожатие (opening handshake),

¨  Session communication,

¨  Закрывающее рукопожатие (closing handshake).

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

¨  Хост, инициирующий соединение, посылает SYN-флаг для того. чтобы обозначить начало сессии.

¨  Хост-получатель посылает два флага SYN, ACK, означающие, что он принял сигнал начала сессии.

¨  Хост-отправитель посылает ACK-флаг. Это означает, что сессия открыта и готова работать с пакетами.

После открытия сессии флаги ACK в пакетах означают, что устройство подтверждает их получение и порядок не нарушен. Закрытие сессии осуществляется по протоколу закрывающего рукопожатия с помощью FIN-пакетов:

1.  Хост, инициирующий закрытие, посылает FIN-флаг.

2.  Хост-получатель посылает в одном пакете FIN и ACK-флаги.

3.  Хост-отправитель посылает ACK-флаг. Это означает, что сессия закрыта.

Следующая временная диаграмма иллюстрирует описанные процедуры обмена флагами.

Трем фазам сессии соответствуют определенные состояния. Статус сессии указывает ее позицию в последовательности событий (процедур рукопожатия). Они одинаково применимы как к клиенту, так и к серверу.

State

Description

CLOSED

Сессия не активна

LISTEN

Устройство ожидает прихода данных в определенный порт

SYN-SENT

Устройство послало SYN-флаг и ожидает подтверждения начала сессии.

SYN-RECEIVED

Устройство послало SYN-ACK флаги и ждет подтверждения (ACK flag).

ESTABLISHED

Оба устройства завершили рукопожатие и могут обмениваться пакетами.

FIN-WAIT-1

Устройство послало FIN-флаг, инициирующий закрытие сессии.

FIN-WAIT-2

Устройство получило FIN-флаг и возвратило FIN-ACK флаги.

LAST-ACK

Устройство послало FIN-ACK флаги и ждет подтверждения закрытия сессии

TIME-WAIT

После LAST-ACK устройство ждет установленный квант времени, затем закрывает порт и сессию

Утилита Windows netstat.exe позволяет увидеть список текущих статусов всех TCP- и UDP-портов рабочей станции или сервера. Запустите ее из командной строки вашей системы и вы увидите список с заголовком Active Connections и колонками: Proto, Local Address, Foreign Address и State. В нем, как нетрудно догадаться, отражено состояние (State) всех активных соединений от порта Local Address к порту Foreign Address.

Слой UDP-заголовка

Другим протоколом высокого уровня, часто используемым в IP-соединениях, является UDP (User Datagram Protocol). В отличие от TCP, UDP обеспечивает обеспечивает прохождение одного пакета информации между сетевыми устройствами в одну сторону. При этом не надо устанавливать соединение (connectionless path), поддерживать флаги и состояния. Поля UDP-заголовка довольно просты.

¨  Порт отправителя (Source Port),

¨  Порт получателя (Destination Port),

¨  Длина сообщения (Message Length),

¨  Контрольная сумма,

¨  Протокол следующего уровня.