метки DNS используют формат <length><data ...>
.
Метка может иметь длину не более 63 байтов, поэтому в поле <length>
осталось два бита. Они используются для кодирования типа метки.
Если старшие два бита равны 0b11
, то оставшиеся шесть битов вместо этого объединяются со следующим байтом в виде указателя сжатия , который является смещением внутри полезной нагрузки DNS до до экземпляр другого ярлыка.
Поскольку заголовок протокола DNS имеет длину 12 байтов, самое короткое допустимое смещение составляет 12 байтов, что дает значение, которое вы видели выше, равным 0xc00c
.
[ технически , можно создать указатель сжатия, который указывает на заголовок, но он не совсем соответствует протоколу].
Я бы настоятельно рекомендовал против , пытаясь пересмотреть спецификацию из проводных пакетов - вы неизбежно пропустите материал. Просто прочитайте RFC 1035 вместо этого - все основные компоненты находятся там.