Сетевое программирование в .NET. Расшифровка IP-адреса (IP address specification). Обеспечение надежности доставки пакетов, страница 7

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 работает без подтверждения соединения. Такие протоколы требуют небольших накладных расходов и работают быстрее, но их рассматривают как упрощенные и ненадежные. TCP и другие протоколы, ориентированные на соединение, работают более медленно, но следят за состоянием соединения между отравителем и получателем и позволяют восстановить утерянные данные путем запроса на повторение доставки или уведомления о постоянной ошибке.

Так протокол TCP наблюдает за процессом доставки, и требует проверки данных, то он увеличивает накладные расходы. Поля же UDP-заголовка довольно просты.

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

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

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

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

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

Так же, как и в TCP, в UDP индивидуальные соединения различаются номерами портов. Номера портов от 0 до 1023 отведены для зарезервированных приложений. Номера портов от 1024 до 65536 доступны для ваших приложений. Следущая таблица показывает номера портов, используемых наиболее известными приложениями.

Port

Description

53

Domain Name System

69

Trivial File Transfer Protocol

111

Remote Procedure Call

137

NetBIOS name service

138

NetBIOS datagram

161

Simple Network Management Protocol

Многие приложения резервируют как TCP-, так и UDP-порты, хотя на практике используется либо тот, либо другой тип соединений.

Разработка сетевых приложений

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

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