Правила чтения таблиц, описывающих структуру заголовков сетевых протоколов
Введение
Чтение таблиц, описывающих структуру заголовков сетевых протоколов, зачастую вызывает затруднение у начинающих сетевых администраторов. В этой статье описаны правила чтения таких таблиц без привязки к какому-либо конкретному протоколу.
Далее приведены примеры отображения структуры UDP-заголовка с русскоязычной и с англоязычной «Википедии». На основе этих двух примеров можно увидеть, что одна и та же таблица может быть представлена в разных форматах отображения. Но, несмотря на это, принципы чтения содержимого заголовков остаются неизменными.
Биты | 0 - 15 | 16 - 31 | ||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0-31 | Порт отправителя (Source port) | Порт получателя (Destination port) | ||||||||||||||||||||||||||||||
32-63 | Длина датаграммы (Length) | Контрольная сумма (Checksum) | ||||||||||||||||||||||||||||||
64-... | Данные (Data) |
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...
|
Пример чтения заголовка
Байты | 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.