Правила чтения таблиц, описывающих структуру заголовков сетевых протоколов

Материал из wireshark.wiki

Введение

Чтение таблиц, описывающих структуру заголовков сетевых протоколов, зачастую вызывает затруднение у начинающих сетевых администраторов. В этой статье описаны правила чтения таких таблиц без привязки к какому-либо конкретному протоколу.

Далее приведены примеры отображения структуры UDP-заголовка с русскоязычной и с англоязычной «Википедии». На основе этих двух примеров можно увидеть, что одна и та же таблица может быть представлена в разных форматах отображения. Но, несмотря на это, принципы чтения содержимого заголовков остаются неизменными.


Структура UDP-заголовка с русскоязычной «Википедии»
Биты 0 - 15 16 - 31
0-31 Порт отправителя (Source port) Порт получателя (Destination port)
32-63 Длина датаграммы (Length) Контрольная сумма (Checksum)
64-... Данные (Data)


Структура UDP-заголовка с англоязычной «Википедии»
Offsets Octet 0 1 2 3
Octet Bit 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
0 0 Source port Destination port
4 32 Length Checksum


Вариант, который будет получен на основе материалов этой статьи
Байты 0 1 2 3
Биты 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
0–3 0–31 Порт отправителя (Source Port) Порт получателя (Destination Port)
4–7
32–63
Размер дейтаграммы (Length) Контрольная сумма (Checksum)
8–... 64... Октеты с данными (Data Octets)


Исходная таблица

Изучение принципов чтения структуры заголовков сетевых протоколов будет выполняться на основе приведенной далее таблицы. Таблица состоит из строк и столбцов. Количество строк у разных заголовков может отличаться, а вот количество столбцов всегда фиксированное – 32. Таким образом, в каждой строке всегда находится 32 ячейки с нумерацией от 0 до 31.

Байты 0 1 2 3
Биты  0   1   2   3   4   5   6   7   8   9  10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
0–3
0–31
4–7
32–63
8–11
64–95
12–15
96...


Каждая ячейка соответствует биту данных. Биты объединяются в байты (октеты). Нумерация битов и байтов начинается с нуля. В каждой строке содержится информация о тридцати двух битах (четырех байтах).

Байты 0 1 2 3
Биты  0   1   2   3   4   5   6   7   8   9  10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
0–3
0–31
4–7
32–63
8–11
64–95
12–15
96...


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

Байты 0 1 2 3
Биты  0   1   2   3   4   5   6   7   8   9  10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
0–3
0–31
4–7
32–63
8–11
64–95
12–15
96...


С помощью приведенной выше информации можно понять, что 42-я ячейка соответствует 42-му биту, который расположен в пятом байте. А 80-я ячейка соответствует 80-му биту, который расположен в 10-м байте. Важно помнить, что нумерация битов и байтов начинается с нуля.

Байты 0 1 2 3
Биты  0   1   2   3   4   5   6   7   8   9  10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
0–3
0–31
4–7
32–63
42
8–11
64–95
80
12–15
96...


Изучение сетевых протоколов «под микроскопом»

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


Объединение ячеек

Заголовки состоят из некоторого множества полей. Каждое поле занимает определенное количество битов. Ячейки, соответствующие битам, относящимся к одному полю, объединяют.

Байты 0 1 2 3
Биты  0   1   2   3   4   5   6   7   8   9  10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
0–3
0–31
Поле 1 Поле 2 Поле 3
4–7
32–63
8–11
64–95
12–15
96...


Если размер поля равен тридцати двум битам, то поле будет занимать всю строку в таблице.

Байты 0 1 2 3
Биты  0   1   2   3   4   5   6   7   8   9  10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
0–3
0–31
Поле 1
4–7
32–63
Поле 2
8–11
64–95
12–15
96...


Если размер поля более тридцати двух бит, то такое поле будет занимать более одной строки.

Байты 0 1 2 3
Биты  0   1   2   3   4   5   6   7   8   9  10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
0–3
0–31
Поле 1
4–7
32–63
8–11
64–95
12–15
96...


Контрольные биты (флаги)

В некоторых случаях поле может состоять из одного бита. Такие биты называют «контрольный бит» или «флаг». Так как поле занимает всего один бит, то оно может иметь только два значения: «0» или «1». Например, для обозначения того, что какое-то действие разрешено или запрещено.

Флаги могут идти друг за другом, в таких случаях комбинация флагов может называться «контрольные биты» или «флаги», но это не отменяет того, что по своей сущности каждый такой «флаг» представляет собой отдельное самостоятельное поле.

Байты 0 1 2 3
Биты  0   1   2   3   4   5   6   7   8   9  10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
0–3
0–31
4–7
32–63
8–11
64–95
12–15
96...


Пример чтения заголовка

Заголовок UDP-дейтаграммы
Байты 0 1 2 3
Биты 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
0–3 0–31 Порт отправителя (Source Port) Порт получателя (Destination Port)
4–7
32–63
Размер дейтаграммы (Length) Контрольная сумма (Checksum)
8–... 64... Октеты с данными (Data Octets)


На основе изложенной выше информации можно понять, что заголовок UDP-дейтаграммы читается следующим образом:

  • Поле «Порт отправителя» имеет оригинальное название Source Port, размер поля составляет 16 бит (2 байта), и оно занимает биты с 0 по 15, которые расположены в 0-м и 1-м байтах.
  • Поле «Порт получателя» имеет оригинальное название Destination Port, размер поля составляет 16 бит (2 байта), и оно занимает биты с 16 по 31, которые расположены во 2-м и 3-м байтах.
  • Поле «размер дейтаграммы» имеет оригинальное название Length, размер поля составляет 16 бит (2 байта), и оно занимает биты с 32 по 47, которые расположены в 4-м и 5-м байтах.
  • Поле «Контрольная сумма» имеет оригинальное название Checksup, размер поля составляет 16 бит (2 байта), и оно занимает биты с 48 по 63, которые расположены в 6-м и 7-м байтах.
  • Поле «Октеты с данными» имеет оригинальное название Data Octets, размер поля однозначно не указан, но однозначно понятно, что оно начинается с 64-го бита, который относится к 8 байту.


Изучение сетевых протоколов «под микроскопом»

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