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

Расшифровка IP-адреса (IP address specification)

Рассмотрим, как интерпретируются поля адреса (32-битовый адрес отправителя и 32-битовый адрес получателя в предыдущей таблице). Как было упомянуто, сеть представляет собой объединение более мелких сетей (subnets). Все подсети имеют разные коды, но всем устройствам одной подсети соответствует одна и та же часть сетевого адреса. Все 32-битовые IP-адреса принято разделять на 4 класса, которым соответствует свой собственный формат.

High Bits

Network Address

Host Address

Type

0

7 bits

24 bits

Class A

10

14 bits

16 bits

Class B

110

21 bits

8 bits

Class C

1110

0 bits

28 bits

Class D

Местоположение 0 в старших 4 битах определяет класс IP-адреса. Рассмотрим старший байт. Двоичному коду 10000000—соответствует десятичное число 128, коду 11000000—192, а коду 11100000—224. При задании IP-адресов пользуются этими десятичными представлениями реальных двоичных числовых кодов. С учетом этого:

¨  Классу A соответствуют все сетевые адреса, расположенные в диапазоне: от 000.xxx до 127.xxx,

¨  Классу B соответствуют адреса, расположенные в диапазоне: от 128.xxx до 191.xxx,

¨  Классу С — от 192.xxx до 223.xxx,

¨  Классу D — от 224.xxx до 254.xxx.

¨  Класс D делит свой диапазон на 2 группы: multicast addresses и experimental networks. Адреса от 224.xxx до 239.xxx принадлежат группе multicast-адресов, адреса от 240.xxx до 255.xxx—группе эксперментальных сетей.

Всем устройствам одной подсети соответствуют адреса с некоторой общей частью. Ее принято выделять с помощью маски. Допустим, что всем устройствам какой-то одной подсети соответствует маска 255.255.0.0. Здесь верхние 2 байта (255.255) определяют общий адрес подсети. Теперь рассмотрим два сетевых адреса: 130.100.1.6 и 130.100.10.5. Четыре байта каждого из них записаны с помощью 4-х десятичных кодов.

Вопрос. Принадлежат-ли эти адреса одной подсети с маской 255.255.0.0? Ответ. Если наложить на эти адреса маску: 255.255.0.0, то есть найти логическое произведение адреса и маски, применив к ним побитовую операцию &, то мы получим одно и то же число 130.100.0.0. Этот факт означает, что исходные адреса соответствуют одной и той же подсети класса B.

Но для того, чтобы ответить на вопрос, принадлежат-ли они одной и той же (но более мелкой) подсети, надо расширить маску и применить ее к обоим адресам. Например, если задать подсеть маской 255.255.255.0, то ответ будет отрицательным, но если маска, определяющая подсеть, равна 255.255.192.0, то устройства попадают в нее (попадают в одну и ту же часть сети—subnet). Адрес 192.168.x.255 при произвольном х зарезервирован и считается адресом всех подсетей (subnet broadcast address)

Комбинация IP-адреса и номера порта определяет IP endpoint. TCP-сессия уникальным образом определяется комбинацей локального IP endpoint и удаленного IP endpoint. Одно сетевое приложение может управлять несколькими соединениями с одним и тем же local IP endpoint, но разными remote IP endpoint.

Флаги фрагментации

Полный пакет может иметь произвольную длину в пределах от 8 байт (64 бит) до 64 килобайт. Но физически один Ethernet-пакет не может быть более 1500 байт. Поэтому длинные IP-пакеты разбивают на фрагменты. По прибытии части одного и того же пакета собираются вместе и блок информации восстанавливается в исходном виде. Технология фрагментации использует три поля IP-пакета (см. выше таблицу IP Layer):

¨  Identification (идентификатор пакета). Все фрагменты одного пакета должны иметь один и тот же идентификатор. Код на стороне получателя использует идентификатор пакета для его восстановления.

¨  Flags (разбит-ли пакет на части).

¨  Fragment offset (расположение фрагмента в пакете).

Поле Flags (3 бита) интерпретируется, как 3 отдельных флага:

¨  Зарезервированный бит (всегда равен нулю).