Рассмотрим tcp/ip и ethernet протоколы на примере. Для этого я установил соединение c tcp сервером на ПК, через модем GPRS на модеме SIM900(о том как работать с SIM900 смотрите эту статью).
Для отслеживания сетевых пакетов на ПК используется программа анализатор трафика(сниффер) wireshark. Данная программа позволяет не только отслеживать сетевые данные, но и получать полную информацию о пакетах различных протоколов их вложенность и содержание.
IP протокол
Через WIRESHARK выловлен такой пакет:
IP пакет имеет следующую структуру:
Рассмотрим все эти поля на примере выловленного пакета.
- Номер версии протокола IP 0b0100 = 4. Используется IP v4, также встречается более новый IP v6.
-
Длина заголовка 0x5a 0b0101 = 5. Количество 32-битных(4 байтных) слов т.е. 5 * 4байта = 20 байт.
Два эти поля занимают один байт — в wiresharp 0b01000101 = 45.
- Тип сервиса 0x00. Показывает тип трафика. Используется для дифференцированного обслуживания разнотипного трафика. Изменяя значение этого поля, различные виды трафика можно распределить по приоритетам в очереди.
-
Общая длина 0x34 = 52. Общая длина пакета с учетом заголовка и полей данных. Максимальная длина 65535 байт, но обычно максимальная длина определяется протоколами нижестоящего уровня, в которые вложены IP пакеты (Ethernet). В нашем случае 52 байта — длина пакета IP + длина пакета TCP (данных в данном пакете нет).
-
Идентификатор IP пакета 0x615C = 24924. Используется для распознания пакетов (при сборе), которые были разбиты при передачи в сети TCP протоколом. Для одной посылки имеет один и тот же номер.
-
Флаги 0x02 = 0b010. Занимают 3 бита. 1 бит — зарезервирован. 2 бит DF — запрещает маршрутизатору фрагментировать данный пакет. 3 бит MF — указывает, что данный пакет является промежуточным не последним. 0xb010 — DF=1 запрещена фрагментация в нашем случае.
-
Смещение сегмента 0x00. Задает смещение в байтах этого фрагмента данных относительно поля данных исходного пакета(сборка/разборка сообщения на пакеты). Смещение кратно 8 байтам. В нашем случае нет поля данных — нет смещения.
-
Время жизни 0x80 = 128. Максимальное время в течении которого пакет может перемещаться в сети — задается в секундах. Маршрутизаторы вычитают из этого поля 1 при нахождении в маршрутизаторе данного пакета в течении секунды. Также 1 вычитается, при прохождение пакета через каждый маршрутизатор, даже если время нахождения в этом маршрутизаторе меньше одной секунды. Если время становится нулевым, пакет уничтожается. Современные маршрутизаторы обрабатывают пакеты быстро и время жизни сводится к максимальному количеству маршрутизаторов, через которые может пройти пакет.
-
Протокол верхнего уровня 0x06. Указывает протокол верхнего уровня у данного пакета. (6 — TCP, 17 — UDP, 1 — ICMP).
-
Контрольная сумма заголовка 0x0000. Контрольная сумма рассчитанная только по заголовку. Если 0, как в нашем пакете, то контрольная сумма не учитывается.
-
IP адрес источника 0xC0 0xA8 0x00 0x48 = 192 168 0 72.
-
IP адрес назначения 0xC0 0xA8 0x00 0x54 = 192 168 0 84.
Номер версии протокола
Ощая длина
Индентификатор пакета
Флаги
Смещение фрагмента