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

¨  1 бит задает уровень надежности (reliability): normal, или high,

¨  2 бита зарезервированы для будущего использования.

Bits

Priority

000

Routine

001

Priority

010

Immediate

011

Flash

100

Flash Override

101

CRITIC/ECP

110

Internetwork Control

111

Network Control

Поле Protocol

Однобайтовое поле Protocol задает протокол следующего слоя IP-пакета. Стандарт IANA определяет 135 значений этого поля, но на практике используется лишь небольшое подмножество, показанное в следующей таблице.

Value (Decimal)

Description

1

Internet Control Message (ICMP)

2

Internet Group Message (IGP)

6

Transmission Control (TCP)

8

Exterior Gateway (EGP)

9

Interior Gateway (Cisco IGP)

17

User Datagram (UDP)

88

Cisco EIGRP

Мы рассмотрим лишь два из них: TCP (protocol 6) и UDP (protocol 17).

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

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

TCP-заголовок содержит множество полей, каждое из которых ассоциировано с конкретной функцией TCP-сессии. Все функции полезно разделить на такие категории:

¨  Отслеживание множества (возможных?) соединений между source and destination ports,

¨  Отслеживание порядка следования, а также запросов на повторение передачи потерянных пакетов (sequence and acknowledgement numbers),

¨  Открытие и закрытие потоков (connection streams) между узлами сети (TCP flags).

Порты TCP-соединений, используемые приложениями

Для идентификации соединения TCP использует порты сетевых устройств. Первые два поля расширенного заголовка TCP—это идентификаторы портов отправителя и получателя (source and destination ports). Как мы уже говорили, комбинация IP-адреса и номера порта определяет IP endpoint. Сетевое приложение использует эти значения для установления соединения. Так как много разных приложений могут одновременно работать с одним и тем же устройством, то для каждого приложения устройство должно отвести какой-то диапазон номеров портов.

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

¨  Сетевым устройством Device A пользуются 2 серверных приложения: ServerApp1 и ServerApp2. Они ожидают прихода пакетов от удаленных устройств. Первому приложению приписан TCP-порт 8000, а второму—9000.

¨  Сетевое устройство Device B является клиентом, на котором работают два клиентских приложения (ClientApp1и ClientApp2). Они хотят соединиться с сервером и получить доступ к приложениям 1 и 2. Для того, чтобы послать данные серверному приложению, клиентские приложения тоже должны получить от операционной системы номера свободных портов. Эти порты остаются занятыми на протяжении всей сессии.

Номера клиентских портов обычно не имеют значения (они просто должны быть свободны в момент получения). Поэтому номера портов клиента на рисунке не указаны. Пакеты отправляются от свободного порта Device B к порту Device A, приписанному конкретному приложению.