Циклический избыточный код
Циклический избыточный код (англ. Cyclic redundancy check, CRC[1]) — алгоритм нахождения контрольной суммы, предназначенный для проверки целостности данных[2]. CRC является практическим приложением помехоустойчивого кодирования, основанном на определённых математических свойствах циклического кода.
Содержание
Введение
Этот раздел не завершён. Вы поможете проекту, исправив и дополнив его.
|
Понятие циклические коды достаточно широкое[3]. В англоязычной литературе CRC расшифровывается двояко в зависимости от контекста: Cyclic Redundancy Code или Cyclic Redundancy Check[4]. Под первой расшифровкой понимают математический феномен циклических кодов, под второй — конкретное применение этого феномена как хэш-функции.
Помехоустойчивое кодирование
Первые попытки создания кодов с избыточной информацией начались задолго до появления современных компьютеров. К примеру, ещё в 1960-х годах Ридом и Соломоном была разработана эффективная методика кодирования — Код Рида-Соломона. Использование её в те времена не представлялось возможным, так как произвести операцию декодирования за разумное время первыми алгоритмами не удавалось. Точку в этом вопросе поставила фундаментальная работа Берлекампа, опубликованная в 1968 году. Эта методика, на практическое применение которой указал через год Мэсси, и по сей день используется в цифровых устройствах, обеспечивающих приём RS-кодированных данных. Более того: данная система позволяет не только определять позиции, но и исправлять неверные кодовые символы (чаще всего октеты).
Но далеко не всегда от кода требуется коррекция ошибок. Многие современные каналы связи обладают приемлемыми характеристиками, и зачастую достаточно лишь проверить, успешно ли прошла передача или возникли какие-нибудь сложности; структура же ошибок и конкретные позиции неверных символов совершенно не интересуют принимающую сторону. И в этих условиях очень удачным решением оказались алгоритмы, использующие контрольные суммы. CRC как нельзя лучше подходит для подобных задач: невысокие затраты ресурсов, простота реализации и уже сформированный математический аппарат из теории линейных циклических кодов обеспечили ей огромную популярность.
Контрольная сумма
В общем виде контрольная сумма представляет собой некоторое значение, вычисленное по определённой схеме на основе кодируемого сообщения. Проверочная информация при систематическом кодировании приписывается к передаваемым данным. На принимающей стороне абонент знает алгоритм вычисления контрольной суммы: соответственно, программа имеет возможность проверить корректность принятых данных.
При передаче пакетов по сетевому каналу могут возникнуть искажения исходной информации вследствие разных внешних воздействий: электрических наводок, плохих погодных условий и многих других. Сущность методики в том, что при хороших характеристиках контрольной суммы в подавляющем числе случаев ошибка в сообщении приведёт к изменению его контрольной суммы. Если исходная и вычисленная суммы не равны между собой, принимается решение о недостоверности принятых данных, и можно запросить повторную передачу пакета.
Математическое описание
Алгоритм CRC базируется на свойствах деления с остатком двоичных многочленов, то есть многочленов над конечным полем <math> GF(2) </math>. Значение CRC является по сути остатком от деления многочлена, соответствующего входным данным, на некий фиксированный порождающий многочлен.
Каждой конечной последовательности битов <math>a_0, a_1, \dots, a_{N-1}</math> взаимно однозначно сопоставляется двоичный полином <math>\textstyle\sum_{n=0}^{N-1} a_n x^n</math>, последовательность коэффициентов которого представляет собой исходную последовательность. Например, последовательность битов 1011010 соответствует многочлену:
- <math>P(x) = 1\cdot x^6 + 0\cdot x^5 + 1\cdot x^4 + 1\cdot x^3 + 0\cdot x^2 + 1\cdot x^1 + 0\cdot x^0 = x^6 + x^4 + x^3 + x^1.</math>
Количество различных многочленов степени меньшей <math> N </math> равно <math> 2^N </math>, что совпадает с числом всех двоичных последовательностей длины <math> N </math> .
Значение контрольной суммы в алгоритме с порождающим многочленом <math>G(x)</math> степени <math>N</math> определяется как битовая последовательность длины <math>N</math>, представляющая многочлен <math>R(x)</math>, получившийся в остатке при делении многочлена <math>P(x)</math>, представляющего входной поток бит, на многочлен <math>G(x)</math>:
- <math>R(x) = P(x)\cdot x^N\, \bmod\, G(x)</math>
где
- <math>R(x)</math> — многочлен, представляющий значение CRC;
- <math>P(x)</math> — многочлен, коэффициенты которого представляют входные данные;
- <math>G(x)</math> — порождающий многочлен;
- <math> N </math> — степень порождающего многочлена.
Умножение <math>x^N</math> осуществляется приписыванием <math>N</math> нулевых битов к входной последовательности, что улучшает качество хеширования для коротких входных последовательностей.
При делении с остатком исходного многочлена на порождающий полином <math>G(x)</math> степени <math>N</math> можно получить <math>2^N</math> различных остатков от деления. <math>G(x)</math> зачастую является неприводимым многочленом. Обычно его подбирают в соответствии с требованиями к хэш-функции в контексте каждого конкретного применения. Тем не менее, существует множество стандартизированных образующих многочленов, обладающих хорошими математическими и корреляционными свойствами (минимальное число коллизий, простота вычисления), некоторые из которых перечислены ниже.
Вычисление CRC
Параметры алгоритма
Одним из основных параметров CRC является порождающий полином.
С порождающим полиномом связан другой параметр — его степень, которая определяет количество битов, используемых для вычисления значения CRC. На практике наиболее распространены 8-, 16- и 32-битовые слова, что является следствием особенностей архитектуры современной вычислительной техники.
Ещё одним параметром является начальное (стартовое) значение слова. Указанные параметры полностью определяют «традиционный» алгоритм вычисления CRC. Существуют также модификации алгоритма, например, использующие обратный порядок обработки битов.
Описание процедуры
Из файла берётся первое слово — это может быть битовый (CRC-1), байтовый (CRC-8) или любой другой элемент. Если старший бит в слове «1», то слово сдвигается влево на один разряд с последующим выполнением операции XOR c порождающим полиномом. Соответственно, если старший бит в слове «0», то после сдвига операция XOR не выполняется. После сдвига теряется старый старший бит, а младший бит освобождается — его значение устанавливается равным нулю. На место младшего бита загружается очередной бит из файла, и операция повторяется до тех пор, пока не загрузится последний бит файла. После прохождения всего файла, в слове остается остаток, который и является контрольной суммой.
Популярные и стандартизованные полиномы
В то время, как циклические избыточные коды являются частью стандартов, у этого термина не существует общепринятого определения — трактовки различных авторов нередко противоречат друг другу.[1][5]
Этот парадокс касается и выбора многочлена-генератора: зачастую стандартизованные полиномы не являются самыми эффективными в плане статистических свойств соответствующего им check redundancy code.
При этом многие широко используемые полиномы не являются наиболее эффективными из всех возможных. В 1993—2004 годах группа учёных занималась исследованием порождающих многочленов разрядности до 16,[1] 24 и 32 бит[6][7] и нашла полиномы, дающие лучшую, нежели стандартизированные многочлены, производительность в смысле кодового расстояния.[7] Один из результатов этого исследования уже нашёл своё применение в протоколе iSCSI.
Самый популярный и рекомендуемый IEEE полином для CRC-32 используется в Ethernet, FDDI; также этот многочлен является генератором кода Хемминга[8]. Использование другого полинома — CRC-32C — позволяет достичь такой же производительности при длине исходного сообщения от 58 бит до 131 кбит, а в некоторых диапазонах длины входного сообщения может быть даже выше — поэтому в наши дни он тоже пользуется популярностью.[7] К примеру, стандарт ITU-T G.hn использует CRC-32C с целью обнаружения ошибок в полезной нагрузке.
Ниже в таблице перечислены наиболее распространённые многочлены — генераторы CRC. На практике вычисление CRC может включать пре- и пост-инверсию, а также обратный порядок обработки битов. В проприетарных реализациях CRC для усложнения анализа кода применяют ненулевые начальные значения регистров.
Название | Полином | Представления:[9] нормальное / реверсированное / реверсированное от обратного |
---|---|---|
CRC-1 | <math>x + 1</math> (используется в аппаратном контроле ошибок; также известен как бит чётности) | 0x1 / 0x1 / 0x1 |
CRC-4-ITU | <math>x^4 + x + 1</math> (ITU G.704[10]) | 0x3 / 0xC / 0x9 |
CRC-5-EPC | <math>x^5 + x^3 + 1</math> (Gen 2 RFID[11]) | 0x09 / 0x12 / 0x14 |
CRC-5-ITU | <math>x^5 + x^4 + x^2 + 1</math> (ITU G.704[12]) | 0x15 / 0x15 / 0x1A |
CRC-5-USB | <math>x^5 + x^2 + 1</math> (USB token packets) | 0x05 / 0x14 / 0x12 |
CRC-6-ITU | <math>x^6 + x + 1</math> (ITU G.704[13]) | 0x03 / 0x30 / 0x21 |
CRC-7 | <math>x^7 + x^3 + 1</math> (системы телекоммуникации, ITU-T G.707[14], ITU-T G.832[15], MMC, SD) | 0x09 / 0x48 / 0x44 |
CRC-8-CCITT | <math>x^8 + x^2 + x + 1</math> (ATM HEC), ISDN Header Error Control and Cell Delineation ITU-T [www.itu.int/rec/T-REC-I.432.1-199902-I/en I.432.1 (02/99)] | 0x07 / 0xE0 / 0x83 |
CRC-8-Dallas/Maxim | <math>x^8 + x^5 + x^4 + 1</math> (1-Wire bus) | 0x31 / 0x8C / 0x98 |
CRC-8 | <math>x^8 + x^7 + x^6 + x^4 + x^2 + 1</math> (ETSI EN 302 307[16], 5.1.4) | 0xD5 / 0xAB / 0xEA[1] |
CRC-8-SAE J1850 | <math>x^8 + x^4 + x^3 + x^2 + 1</math> | 0x1D / 0xB8 / 0x8E |
CRC-10 | <math>x^{10} + x^9 + x^5 + x^4 + x + 1</math> | 0x233 / 0x331 / 0x319 |
CRC-11 | <math>x^{11} + x^9 + x^8 + x^7 + x^2 + 1</math> (FlexRay[17]) | 0x385 / 0x50E / 0x5C2 |
CRC-12 | <math>x^{12} + x^{11} + x^3 + x^2 + x + 1</math> (системы телекоммуникации[18][19]) | 0x80F / 0xF01 / 0xC07 |
CRC-15-CAN | <math>x^{15} + x^{14} + x^{10} + x^8 + x^7 + x^4 + x^3 + 1 </math> | 0x4599 / 0x4CD1 / 0x62CC |
CRC-16-IBM | <math>x^{16} + x^{15} + x^2 + 1</math> (Bisync, Modbus, USB, ANSI X3.28[20], многие другие; также известен как CRC-16 и CRC-16-ANSI) | 0x8005 / 0xA001 / 0xC002 |
CRC-16-CCITT | <math>x^{16} + x^{12} + x^5 + 1</math> (X.25, HDLC, XMODEM, Bluetooth, SD и др.) | 0x1021 / 0x8408 / 0x8810[1] |
CRC-16-T10-DIF | <math>x^{16} + x^{15} + x^{11} + x^{9} + x^8 + x^7 + x^5 + x^4 + x^2 + x + 1</math> (SCSI DIF) | 0x8BB7[21] / 0xEDD1 / 0xC5DB |
CRC-16-DNP | <math>x^{16} + x^{13} + x^{12} + x^{11} + x^{10} + x^8 + x^6 + x^5 + x^2 + 1</math> (DNP, IEC 870, M-Bus) | 0x3D65 / 0xA6BC / 0x9EB2 |
CRC-16-Fletcher | Не CRC; см. Fletcher's checksum | Используется в Adler-32 A & B CRC |
CRC-24 | <math>x^{24} + x^{22} + x^{20} + x^{19} + x^{18} + x^{16} + x^{14} + x^{13} + x^{11} + x^{10} + x^8 + x^7 + x^6 + x^3 + x + 1</math> (FlexRay[17]) | 0x5D6DCB / 0xD3B6BA / 0xAEB6E5 |
CRC-24-Radix-64 | <math> x^{24} + x^{23} + x^{18} + x^{17} + x^{14} + x^{11} + x^{10} + x^7 + x^6 + x^5 + x^4 + x^3 + x + 1 </math> (OpenPGP) | 0x864CFB / 0xDF3261 / 0xC3267D |
CRC-30 | <math>x^{30} + x^{29} + x^{21} + x^{20} + x^{15} + x^{13} + x^{12} + x^{11} + x^{8} + x^{7} + x^{6} + x^{2} + x + 1 </math> (CDMA) | 0x2030B9C7 / 0x38E74301 / 0x30185CE3 |
CRC-32-Adler | Не CRC; см. Adler-32 | См. Adler-32 |
CRC-32-IEEE 802.3 | <math>x^{32} + x^{26} + x^{23} + x^{22} + x^{16} + x^{12} + x^{11} + x^{10} + x^8 + x^7 + x^5 + x^4 + x^2 + x + 1</math> (V.42, MPEG-2, PNG[22], POSIX cksum) | 0x04C11DB7 / 0xEDB88320 / 0x82608EDB[7] |
CRC-32C (Castagnoli) | <math>x^{32} + x^{28} + x^{27} + x^{26} + x^{25} + x^{23} + x^{22} + x^{20} + x^{19} + x^{18} + x^{14} + x^{13} + x^{11} + x^{10} + x^9 + x^8 + x^6 + 1</math> (iSCSI, G.hn payload) | 0x1EDC6F41 / 0x82F63B78 / 0x8F6E37A0[7] |
CRC-32K (Koopman) | <math>x^{32} + x^{30} + x^{29} + x^{28} + x^{26} + x^{20} + x^{19} + x^{17} + x^{16} + x^{15} + x^{11} + x^{10} + x^{7} + x^{6} + x^{4} + x^{2} + x + 1</math> | 0x741B8CD7 / 0xEB31D82E / 0xBA0DC66B[7] |
CRC-32Q | <math>x^{32} + x^{31} + x^{24} + x^{22} + x^{16} + x^{14} + x^{8} + x^{7} + x^{5} + x^{3} + x + 1</math> (aviation; AIXM[23]) | 0x814141AB / 0xD5828281 / 0xC0A0A0D5 |
CRC-64-ISO | <math>x^{64} + x^4 + x^3 + x + 1</math> (HDLC — ISO 3309) | 0x000000000000001B / 0xD800000000000000 / 0x800000000000000D |
CRC-64-ECMA | <math>x^{64} + x^{62} + x^{57} + x^{55} + x^{54} + x^{53} + x^{52} + x^{47} + x^{46} + x^{45} + x^{40} + x^{39} + x^{38} + x^{37} + x^{35} + x^{33} +</math> <math>x^{32} + x^{31} + x^{29} + x^{27} + x^{24} + x^{23} + x^{22} + x^{21} + x^{19} + x^{17} + x^{13} + x^{12} + x^{10} + x^9 + x^7 + x^4 + x + 1</math>[24] | 0x42F0E1EBA9EA3693 / 0xC96C5795D7870F42 / 0xA17870F5D4F51B49 |
Существующие стандарты CRC-128 (IEEE) и CRC-256 (IEEE) в настоящее время вытеснены криптографическими хеш-функциями.
Спецификации алгоритмов CRC
Одной из самых известных является методика Ross N. Williams[25]. В ней используются следующие параметры:
- Название алгоритма (name);
- Степень порождающего контрольную сумму многочлена (width);
- Сам производящий полином (poly). Для того, чтобы записать его в виде значения, его сначала записывают как битовую последовательность, при этом старший бит опускается — он всегда равен 1. К примеру, многочлен <math> x^8+x^4+1 </math> в данной нотации будет записан числом <math> 00010001_2 </math>. Для удобства полученное двоичное представление записывают в шестнадцатеричной форме. Для нашего случая оно будет равно <math>11_h</math> или 0x11;
- Стартовые данные (init), то есть значения регистров на момент начала вычислений;
- Флаг (RefIn), указывающий на начало и направление вычислений. Существует два варианта: False — начиная со старшего значащего бита (MSB-first), или True — с младшего (LSB-first);
- Флаг (RefOut), определяющий, инвертируется ли порядок битов регистра при входе на элемент XOR;
- Число (XorOut), с которым складывается по модулю 2 полученный результат;
- Значение CRC (check) для строки «123456789» .
- Примеры[26]
Name | Width | Poly | Init | RefIn | RefOut | XorOut | Check |
---|---|---|---|---|---|---|---|
CRC-3/ROHC | 3 | 0x3 | 0x7 | true | true | 0x0 | 0x6 |
CRC-4/ITU | 4 | 0x3 | 0x0 | true | true | 0x0 | 0x7 |
CRC-5/EPC | 5 | 0x9 | 0x9 | false | false | 0x0 | 0x0 |
CRC-5/ITU | 5 | 0x15 | 0x0 | true | true | 0x0 | 0x7 |
CRC-5/USB | 5 | 0x5 | 0x1F | true | true | 0x1F | 0x19 |
CRC-6/CDMA2000-A | 6 | 0x27 | 0x3F | false | false | 0x0 | 0xD |
CRC-6/CDMA2000-B | 6 | 0x7 | 0x3F | false | false | 0x0 | 0x3B |
CRC-6/DARC | 6 | 0x19 | 0x0 | true | true | 0x0 | 0x26 |
CRC-6/ITU | 6 | 0x3 | 0x0 | true | true | 0x0 | 0x6 |
CRC-7 | 7 | 0x9 | 0x0 | false | false | 0x0 | 0x75 |
CRC-7/ROHC | 7 | 0x4F | 0x7F | true | true | 0x0 | 0x53 |
CRC-8 | 8 | 0x7 | 0x0 | false | false | 0x0 | 0xF4 |
CRC-8/CDMA2000 | 8 | 0x9B | 0xFF | false | false | 0x0 | 0xDA |
CRC-8/DARC | 8 | 0x39 | 0x0 | true | true | 0x0 | 0x15 |
CRC-8/DVB-S2 | 8 | 0xD5 | 0x0 | false | false | 0x0 | 0xBC |
CRC-8/EBU | 8 | 0x1D | 0xFF | true | true | 0x0 | 0x97 |
CRC-8/I-CODE | 8 | 0x1D | 0xFD | false | false | 0x0 | 0x7E |
CRC-8/ITU | 8 | 0x7 | 0x0 | false | false | 0x55 | 0xA1 |
CRC-8/MAXIM | 8 | 0x31 | 0x0 | true | true | 0x0 | 0xA1 |
CRC-8/ROHC | 8 | 0x7 | 0xFF | true | true | 0x0 | 0xD0 |
CRC-8/WCDMA | 8 | 0x9B | 0x0 | true | true | 0x0 | 0x25 |
CRC-10 | 10 | 0x233 | 0x0 | false | false | 0x0 | 0x199 |
CRC-10/CDMA2000 | 10 | 0x3D9 | 0x3FF | false | false | 0x0 | 0x233 |
CRC-11 | 11 | 0x385 | 0x1A | false | false | 0x0 | 0x5A3 |
CRC-12/3GPP | 12 | 0x80F | 0x0 | false | true | 0x0 | 0xDAF |
CRC-12/CDMA2000 | 12 | 0xF13 | 0xFFF | false | false | 0x0 | 0xD4D |
CRC-12/DECT | 12 | 0x80F | 0x0 | false | false | 0x0 | 0xF5B |
CRC-13/BBC | 13 | 0x1CF5 | 0x0 | false | false | 0x0 | 0x4FA |
CRC-14/DARC | 14 | 0x805 | 0x0 | true | true | 0x0 | 0x82D |
CRC-15 | 15 | 0x4599 | 0x0 | false | false | 0x0 | 0x59E |
CRC-15/MPT1327 | 15 | 0x6815 | 0x0 | false | false | 0x1 | 0x2566 |
CRC-16/ARC | 16 | 0x8005 | 0x0 | true | true | 0x0 | 0xBB3D |
CRC-16/AUG-CCITT | 16 | 0x1021 | 0x1D0F | false | false | 0x0 | 0xE5CC |
CRC-16/BUYPASS | 16 | 0x8005 | 0x0 | false | false | 0x0 | 0xFEE8 |
CRC-16/CCITT-FALSE | 16 | 0x1021 | 0xFFFF | false | false | 0x0 | 0x29B1 |
CRC-16/CDMA2000 | 16 | 0xC867 | 0xFFFF | false | false | 0x0 | 0x4C06 |
CRC-16/DDS-110 | 16 | 0x8005 | 0x800D | false | false | 0x0 | 0x9ECF |
CRC-16/DECT-R | 16 | 0x589 | 0x0 | false | false | 0x1 | 0x7E |
CRC-16/DECT-X | 16 | 0x589 | 0x0 | false | false | 0x0 | 0x7F |
CRC-16/DNP | 16 | 0x3D65 | 0x0 | true | true | 0xFFFF | 0xEA82 |
CRC-16/EN-13757 | 16 | 0x3D65 | 0x0 | false | false | 0xFFFF | 0xC2B7 |
CRC-16/GENIBUS | 16 | 0x1021 | 0xFFFF | false | false | 0xFFFF | 0xD64E |
CRC-16/MAXIM | 16 | 0x8005 | 0x0 | true | true | 0xFFFF | 0x44C2 |
CRC-16/MCRF4XX | 16 | 0x1021 | 0xFFFF | true | true | 0x0 | 0x6F91 |
CRC-16/RIELLO | 16 | 0x1021 | 0xB2AA | true | true | 0x0 | 0x63D0 |
CRC-16/T10-DIF | 16 | 0x8BB7 | 0x0 | false | false | 0x0 | 0xD0DB |
CRC-16/TELEDISK | 16 | 0xA097 | 0x0 | false | false | 0x0 | 0xFB3 |
CRC-16/TMS37157 | 16 | 0x1021 | 0x89EC | true | true | 0x0 | 0x26B1 |
CRC-16/USB | 16 | 0x8005 | 0xFFFF | true | true | 0xFFFF | 0xB4C8 |
CRC-A | 16 | 0x1021 | 0xC6C6 | true | true | 0x0 | 0xBF05 |
CRC-16/KERMIT | 16 | 0x1021 | 0x0 | true | true | 0x0 | 0x2189 |
CRC-16/MODBUS | 16 | 0x8005 | 0xFFFF | true | true | 0x0 | 0x4B37 |
CRC-16/X-25 | 16 | 0x1021 | 0xFFFF | true | true | 0xFFFF | 0x906E |
CRC-16/XMODEM | 16 | 0x1021 | 0x0 | false | false | 0x0 | 0x31C3 |
CRC-24 | 24 | 0x864CFB | 0xB704CE | false | false | 0x0 | 0x21CF02 |
CRC-24/FLEXRAY-A | 24 | 0x5D6DCB | 0xFEDCBA | false | false | 0x0 | 0x7979BD |
CRC-24/FLEXRAY-B | 24 | 0x5D6DCB | 0xABCDEF | false | false | 0x0 | 0x1F23B8 |
CRC-31/PHILIPS | 31 | 0x4C11DB7 | 0x7FFFFFFF | false | false | 0x7FFFFFFF | 0xCE9E46C |
CRC-32 | 32 | 0x4C11DB7 | 0xFFFFFFFF | true | true | 0xFFFFFFFF | 0xCBF43926 |
CRC-32/BZIP2 | 32 | 0x4C11DB7 | 0xFFFFFFFF | false | false | 0xFFFFFFFF | 0xFC891918 |
CRC-32C | 32 | 0x1EDC6F41 | 0xFFFFFFFF | true | true | 0xFFFFFFFF | 0xE3069283 |
CRC-32D | 32 | 0xA833982B | 0xFFFFFFFF | true | true | 0xFFFFFFFF | 0x87315576 |
CRC-32/MPEG-2 | 32 | 0x4C11DB7 | 0xFFFFFFFF | false | false | 0x0 | 0x376E6E7 |
CRC-32/POSIX | 32 | 0x4C11DB7 | 0x0 | false | false | 0xFFFFFFFF | 0x765E7680 |
CRC-32Q | 32 | 0x814141AB | 0x0 | false | false | 0x0 | 0x3010BF7F |
CRC-32/JAMCRC | 32 | 0x4C11DB7 | 0xFFFFFFFF | true | true | 0x0 | 0x340BC6D9 |
CRC-32/XFER | 32 | 0xAF | 0x0 | false | false | 0x0 | 0xBD0BE338 |
CRC-40/GSM | 40 | 0x4820009 | 0x0 | false | false | 0xFFFFFFFFFF | 0xD4164FC646 |
CRC-64 | 64 | 0x42F0E1EBA9EA3693 | 0x0 | false | false | 0x0 | 0x6C40DF5F0B497347 |
CRC-64/WE | 64 | 0x42F0E1EBA9EA3693 | 0xFFFFFFFFFFFFFFFF | false | false | 0xFFFFFFFFFFFFFFFF | 0x62EC59E3F1A4F00A |
CRC-64/XZ | 64 | 0x42F0E1EBA9EA3693 | 0xFFFFFFFFFFFFFFFF | true | true | 0xFFFFFFFFFFFFFFFF | 0x995DC9BBDF1939FA |
Напишите отзыв о статье "Циклический избыточный код"
Примечания
- ↑ 1 2 3 4 5 Philip Koopman, Tridib Chakravarty. [www.ece.cmu.edu/~koopman/roses/dsn04/koopman04_crc_poly_embedded.pdf Cyclic Redundancy Code (CRC) Polynomial Selection For Embedded Networks] (2004). Проверено ???. [www.webcitation.org/618ad4oyk Архивировано из первоисточника 23 августа 2011].
- ↑ [www.intuit.ru/department/network/wifi/1/wifi_1.html Интернет-Университет Информационных Технологий. Лекция: Организация беспроводных сетей ]
- ↑ [www.intuit.ru/department/network/baslocnet/10/baslocnet_10.html Интернет-Университет Информационных Технологий. Лекция: Алгоритмы сети Ethernet/Fast Ethernet]
- ↑ [ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=4317846 Walma, M.; Pipelined Cyclic Redundancy Check (CRC) Calculation]
- ↑ Greg Cook. [homepages.tesco.net/rainstorm/crc-catalogue.htm Catalogue of parameterised CRC algorithms] (29 апреля 2009). Проверено ???. [www.webcitation.org/618adVYf6 Архивировано из первоисточника 23 августа 2011].
- ↑ G. Castagnoli, S. Braeuer, M. Herrman. Optimization of Cyclic Redundancy-Check Codes with 24 and 32 Parity Bits // IEEE Transactions on Communications. — июнь 1993. — Т. 41, № 6. — С. 883. — DOI:10.1109/26.231911.
- ↑ 1 2 3 4 5 6 P. Koopman. [citeseer.ist.psu.edu/koopman02bit.html 32-Bit Cyclic Redundancy Codes for Internet Applications] // The International Conference on Dependable Systems and Networks. — июнь 2002. — С. 459. — DOI:10.1109/DSN.2002.1028931.
- ↑ Brayer, K; Hammond, J L Jr. (December 1975). "Evaluation of error detection polynomial performance on the AUTOVON channel" in National Telecommunications Conference, New Orleans, La. Conference Record 1: 8-21 to 8-25, New York: Institute of Electrical and Electronics Engineers.
- ↑ В представлениях опущен старший бит.
- ↑ [www.itu.int/rec/T-REC-G.704-199810-I/en G.704], p. 12
- ↑ [www.epcglobalinc.org/standards/uhfc1g2/uhfc1g2_1_0_9-standard-20050126.pdf Class-1 Generation-2 UHF RFID Protocol version 1.2.0]. — 23 октября 2008. — С. 35.
- ↑ [www.itu.int/rec/T-REC-G.704-199810-I/en G.704], p. 9
- ↑ [www.itu.int/rec/T-REC-G.704-199810-I/en G.704], p. 3
- ↑ [www.itu.int/rec/T-REC-G.707/en G.707 : Network node interface for the synchronous digital hierarchy (SDH)]
- ↑ [www.itu.int/rec/T-REC-G.832/en G.832 : Transport of SDH elements on PDH networks — Frame and multiplexing structures]
- ↑ [www.etsi.org/deliver/etsi_en/302300_302399/302307/01.02.01_40/en_302307v010201o.pdf EN 302 307. Digital Video Broadcasting (DVB); Second generation framing structure, channel coding and modulation systems for Broadcasting, Interactive Services, News Gathering and other broadband satellite applications (DVB-S2)]
- ↑ 1 2 FlexRay Protocol Specification version 2.1 Revision A. — 22 декабря 2005. — С. 93.
- ↑ A. Perez, Wismer, Becker. Byte-Wise CRC Calculations // IEEE Micro. — 1983. — Т. 3, № 3. — С. 40—50. — DOI:10.1109/MM.1983.291120.
- ↑ T. V. Ramabadran, S. S. Gaitonde. A tutorial on CRC computations // IEEE Micro. — 1988. — Т. 8, № 4. — С. 62—75. — DOI:10.1109/40.7773.
- ↑ www.incits.org/press/1997/pr97020.htm
- ↑ Pat Thaler. [www.t10.org/ftp/t10/document.03/03-290r0.pdf 16-bit CRC polynomial selection]. INCITS T10 (28 августа 2003). Проверено ???. [www.webcitation.org/618advs5T Архивировано из первоисточника 23 августа 2011].
- ↑ Thomas Boutell, Glenn Randers-Pehrson и др. [www.libpng.org/pub/png/spec/1.2/PNG-Structure.html PNG (Portable Network Graphics) Specification, Version 1.2] (14 июля 1998). Проверено ???. [www.webcitation.org/618aeMw33 Архивировано из первоисточника 23 августа 2011].
- ↑ [www.eurocontrol.int/aim/gallery/content/public/aicm_aixm_4_5/aixm_primer/AIXM_Primer_4.5.pdf AIXM Primer version 4.5]. European Organisation for the Safety of Air Navigation (20 марта 2006). Проверено ???. [www.webcitation.org/618aeucX4 Архивировано из первоисточника 23 августа 2011].
- ↑ [www.ecma-international.org/publications/standards/Ecma-182.htm ECMA-182] p. 51
- ↑ Ross N. Williams. [www.ross.net/crc/crcpaper.html CRC Rocksoft] (1993). [www.webcitation.org/67fzBMZSa Архивировано из первоисточника 15 мая 2012].
- ↑ Greg Cook. [reveng.sourceforge.net/crc-catalogue/ Catalogue of parametrised CRC algorithms] (18 January 2016).
Литература
- Генри С. Уоррен, мл. Глава 5. Подсчет битов // Алгоритмические трюки для программистов = Hacker’s Delight. — М.: Вильямс, 2007. — 288 с. — ISBN 0-201-91465-4.
Ссылки
- [web.archive.org/web/20130407000813/rsdn.ru/article/files/classes/SelfCheck/crcguide.pdf Элементарное руководство по CRC алгоритмам обнаружения ошибок]
- [web.archive.org/web/20120227054137/www.rsdn.ru/article/files/classes/SelfCheck/crcrevrs.pdf CRC, и как его восстановить]
- [www.easics.be/webtools/crctool Генератор CRC-функций] на языках VHDL и Verilog
- Ross N. Williams/Anarchriz. [web.archive.org/web/20051229000614/www.wasm.ru/docs/5/crc.zip Всё о CRC32] // Ross N. Williams. Элементарное руководство по CRC алгоритмам обнаружения ошибок
- Ross N. Williams. [www.ross.net/crc/download/crc_v3.txt A PAINLESS GUIDE TO CRC ERROR DETECTION ALGORITHMS] (англ.)
- CRC Калькуляторы
- [github.com/KoynovStas/QCRC_Calc CRC-калькулятор, написан на Qt]
- [dencode.com/hash/crc32 On-line CRC32-калькулятор, для строк (можно менять кодировку и формат EndLine)]
- [www.zorc.breitbandkatze.de/crc.html On-line CRC-калькулятор]
- [www.lammertbies.nl/comm/info/crc-calculation.html On-line CRC calculation and free library]
|
Отрывок, характеризующий Циклический избыточный код
– Нет, Соня, я не могу больше! – сказала она. – Я не могу больше скрывать от тебя. Ты знаешь, мы любим друг друга!… Соня, голубчик, он пишет… Соня…Соня, как бы не веря своим ушам, смотрела во все глаза на Наташу.
– А Болконский? – сказала она.
– Ах, Соня, ах коли бы ты могла знать, как я счастлива! – сказала Наташа. – Ты не знаешь, что такое любовь…
– Но, Наташа, неужели то всё кончено?
Наташа большими, открытыми глазами смотрела на Соню, как будто не понимая ее вопроса.
– Что ж, ты отказываешь князю Андрею? – сказала Соня.
– Ах, ты ничего не понимаешь, ты не говори глупости, ты слушай, – с мгновенной досадой сказала Наташа.
– Нет, я не могу этому верить, – повторила Соня. – Я не понимаю. Как же ты год целый любила одного человека и вдруг… Ведь ты только три раза видела его. Наташа, я тебе не верю, ты шалишь. В три дня забыть всё и так…
– Три дня, – сказала Наташа. – Мне кажется, я сто лет люблю его. Мне кажется, что я никого никогда не любила прежде его. Ты этого не можешь понять. Соня, постой, садись тут. – Наташа обняла и поцеловала ее.
– Мне говорили, что это бывает и ты верно слышала, но я теперь только испытала эту любовь. Это не то, что прежде. Как только я увидала его, я почувствовала, что он мой властелин, и я раба его, и что я не могу не любить его. Да, раба! Что он мне велит, то я и сделаю. Ты не понимаешь этого. Что ж мне делать? Что ж мне делать, Соня? – говорила Наташа с счастливым и испуганным лицом.
– Но ты подумай, что ты делаешь, – говорила Соня, – я не могу этого так оставить. Эти тайные письма… Как ты могла его допустить до этого? – говорила она с ужасом и с отвращением, которое она с трудом скрывала.
– Я тебе говорила, – отвечала Наташа, – что у меня нет воли, как ты не понимаешь этого: я его люблю!
– Так я не допущу до этого, я расскажу, – с прорвавшимися слезами вскрикнула Соня.
– Что ты, ради Бога… Ежели ты расскажешь, ты мой враг, – заговорила Наташа. – Ты хочешь моего несчастия, ты хочешь, чтоб нас разлучили…
Увидав этот страх Наташи, Соня заплакала слезами стыда и жалости за свою подругу.
– Но что было между вами? – спросила она. – Что он говорил тебе? Зачем он не ездит в дом?
Наташа не отвечала на ее вопрос.
– Ради Бога, Соня, никому не говори, не мучай меня, – упрашивала Наташа. – Ты помни, что нельзя вмешиваться в такие дела. Я тебе открыла…
– Но зачем эти тайны! Отчего же он не ездит в дом? – спрашивала Соня. – Отчего он прямо не ищет твоей руки? Ведь князь Андрей дал тебе полную свободу, ежели уж так; но я не верю этому. Наташа, ты подумала, какие могут быть тайные причины ?
Наташа удивленными глазами смотрела на Соню. Видно, ей самой в первый раз представлялся этот вопрос и она не знала, что отвечать на него.
– Какие причины, не знаю. Но стало быть есть причины!
Соня вздохнула и недоверчиво покачала головой.
– Ежели бы были причины… – начала она. Но Наташа угадывая ее сомнение, испуганно перебила ее.
– Соня, нельзя сомневаться в нем, нельзя, нельзя, ты понимаешь ли? – прокричала она.
– Любит ли он тебя?
– Любит ли? – повторила Наташа с улыбкой сожаления о непонятливости своей подруги. – Ведь ты прочла письмо, ты видела его?
– Но если он неблагородный человек?
– Он!… неблагородный человек? Коли бы ты знала! – говорила Наташа.
– Если он благородный человек, то он или должен объявить свое намерение, или перестать видеться с тобой; и ежели ты не хочешь этого сделать, то я сделаю это, я напишу ему, я скажу папа, – решительно сказала Соня.
– Да я жить не могу без него! – закричала Наташа.
– Наташа, я не понимаю тебя. И что ты говоришь! Вспомни об отце, о Nicolas.
– Мне никого не нужно, я никого не люблю, кроме его. Как ты смеешь говорить, что он неблагороден? Ты разве не знаешь, что я его люблю? – кричала Наташа. – Соня, уйди, я не хочу с тобой ссориться, уйди, ради Бога уйди: ты видишь, как я мучаюсь, – злобно кричала Наташа сдержанно раздраженным и отчаянным голосом. Соня разрыдалась и выбежала из комнаты.
Наташа подошла к столу и, не думав ни минуты, написала тот ответ княжне Марье, который она не могла написать целое утро. В письме этом она коротко писала княжне Марье, что все недоразуменья их кончены, что, пользуясь великодушием князя Андрея, который уезжая дал ей свободу, она просит ее забыть всё и простить ее ежели она перед нею виновата, но что она не может быть его женой. Всё это ей казалось так легко, просто и ясно в эту минуту.
В пятницу Ростовы должны были ехать в деревню, а граф в среду поехал с покупщиком в свою подмосковную.
В день отъезда графа, Соня с Наташей были званы на большой обед к Карагиным, и Марья Дмитриевна повезла их. На обеде этом Наташа опять встретилась с Анатолем, и Соня заметила, что Наташа говорила с ним что то, желая не быть услышанной, и всё время обеда была еще более взволнована, чем прежде. Когда они вернулись домой, Наташа начала первая с Соней то объяснение, которого ждала ее подруга.
– Вот ты, Соня, говорила разные глупости про него, – начала Наташа кротким голосом, тем голосом, которым говорят дети, когда хотят, чтобы их похвалили. – Мы объяснились с ним нынче.
– Ну, что же, что? Ну что ж он сказал? Наташа, как я рада, что ты не сердишься на меня. Говори мне всё, всю правду. Что же он сказал?
Наташа задумалась.
– Ах Соня, если бы ты знала его так, как я! Он сказал… Он спрашивал меня о том, как я обещала Болконскому. Он обрадовался, что от меня зависит отказать ему.
Соня грустно вздохнула.
– Но ведь ты не отказала Болконскому, – сказала она.
– А может быть я и отказала! Может быть с Болконским всё кончено. Почему ты думаешь про меня так дурно?
– Я ничего не думаю, я только не понимаю этого…
– Подожди, Соня, ты всё поймешь. Увидишь, какой он человек. Ты не думай дурное ни про меня, ни про него.
– Я ни про кого не думаю дурное: я всех люблю и всех жалею. Но что же мне делать?
Соня не сдавалась на нежный тон, с которым к ней обращалась Наташа. Чем размягченнее и искательнее было выражение лица Наташи, тем серьезнее и строже было лицо Сони.
– Наташа, – сказала она, – ты просила меня не говорить с тобой, я и не говорила, теперь ты сама начала. Наташа, я не верю ему. Зачем эта тайна?
– Опять, опять! – перебила Наташа.
– Наташа, я боюсь за тебя.
– Чего бояться?
– Я боюсь, что ты погубишь себя, – решительно сказала Соня, сама испугавшись того что она сказала.
Лицо Наташи опять выразило злобу.
– И погублю, погублю, как можно скорее погублю себя. Не ваше дело. Не вам, а мне дурно будет. Оставь, оставь меня. Я ненавижу тебя.
– Наташа! – испуганно взывала Соня.
– Ненавижу, ненавижу! И ты мой враг навсегда!
Наташа выбежала из комнаты.
Наташа не говорила больше с Соней и избегала ее. С тем же выражением взволнованного удивления и преступности она ходила по комнатам, принимаясь то за то, то за другое занятие и тотчас же бросая их.
Как это ни тяжело было для Сони, но она, не спуская глаз, следила за своей подругой.
Накануне того дня, в который должен был вернуться граф, Соня заметила, что Наташа сидела всё утро у окна гостиной, как будто ожидая чего то и что она сделала какой то знак проехавшему военному, которого Соня приняла за Анатоля.
Соня стала еще внимательнее наблюдать свою подругу и заметила, что Наташа была всё время обеда и вечер в странном и неестественном состоянии (отвечала невпопад на делаемые ей вопросы, начинала и не доканчивала фразы, всему смеялась).
После чая Соня увидала робеющую горничную девушку, выжидавшую ее у двери Наташи. Она пропустила ее и, подслушав у двери, узнала, что опять было передано письмо. И вдруг Соне стало ясно, что у Наташи был какой нибудь страшный план на нынешний вечер. Соня постучалась к ней. Наташа не пустила ее.
«Она убежит с ним! думала Соня. Она на всё способна. Нынче в лице ее было что то особенно жалкое и решительное. Она заплакала, прощаясь с дяденькой, вспоминала Соня. Да это верно, она бежит с ним, – но что мне делать?» думала Соня, припоминая теперь те признаки, которые ясно доказывали, почему у Наташи было какое то страшное намерение. «Графа нет. Что мне делать, написать к Курагину, требуя от него объяснения? Но кто велит ему ответить? Писать Пьеру, как просил князь Андрей в случае несчастия?… Но может быть, в самом деле она уже отказала Болконскому (она вчера отослала письмо княжне Марье). Дяденьки нет!» Сказать Марье Дмитриевне, которая так верила в Наташу, Соне казалось ужасно. «Но так или иначе, думала Соня, стоя в темном коридоре: теперь или никогда пришло время доказать, что я помню благодеяния их семейства и люблю Nicolas. Нет, я хоть три ночи не буду спать, а не выйду из этого коридора и силой не пущу ее, и не дам позору обрушиться на их семейство», думала она.
Анатоль последнее время переселился к Долохову. План похищения Ростовой уже несколько дней был обдуман и приготовлен Долоховым, и в тот день, когда Соня, подслушав у двери Наташу, решилась оберегать ее, план этот должен был быть приведен в исполнение. Наташа в десять часов вечера обещала выйти к Курагину на заднее крыльцо. Курагин должен был посадить ее в приготовленную тройку и везти за 60 верст от Москвы в село Каменку, где был приготовлен расстриженный поп, который должен был обвенчать их. В Каменке и была готова подстава, которая должна была вывезти их на Варшавскую дорогу и там на почтовых они должны были скакать за границу.
У Анатоля были и паспорт, и подорожная, и десять тысяч денег, взятые у сестры, и десять тысяч, занятые через посредство Долохова.
Два свидетеля – Хвостиков, бывший приказный, которого употреблял для игры Долохов и Макарин, отставной гусар, добродушный и слабый человек, питавший беспредельную любовь к Курагину – сидели в первой комнате за чаем.
В большом кабинете Долохова, убранном от стен до потолка персидскими коврами, медвежьими шкурами и оружием, сидел Долохов в дорожном бешмете и сапогах перед раскрытым бюро, на котором лежали счеты и пачки денег. Анатоль в расстегнутом мундире ходил из той комнаты, где сидели свидетели, через кабинет в заднюю комнату, где его лакей француз с другими укладывал последние вещи. Долохов считал деньги и записывал.
– Ну, – сказал он, – Хвостикову надо дать две тысячи.
– Ну и дай, – сказал Анатоль.
– Макарка (они так звали Макарина), этот бескорыстно за тебя в огонь и в воду. Ну вот и кончены счеты, – сказал Долохов, показывая ему записку. – Так?
– Да, разумеется, так, – сказал Анатоль, видимо не слушавший Долохова и с улыбкой, не сходившей у него с лица, смотревший вперед себя.
Долохов захлопнул бюро и обратился к Анатолю с насмешливой улыбкой.
– А знаешь что – брось всё это: еще время есть! – сказал он.
– Дурак! – сказал Анатоль. – Перестань говорить глупости. Ежели бы ты знал… Это чорт знает, что такое!
– Право брось, – сказал Долохов. – Я тебе дело говорю. Разве это шутка, что ты затеял?
– Ну, опять, опять дразнить? Пошел к чорту! А?… – сморщившись сказал Анатоль. – Право не до твоих дурацких шуток. – И он ушел из комнаты.
Долохов презрительно и снисходительно улыбался, когда Анатоль вышел.
– Ты постой, – сказал он вслед Анатолю, – я не шучу, я дело говорю, поди, поди сюда.
Анатоль опять вошел в комнату и, стараясь сосредоточить внимание, смотрел на Долохова, очевидно невольно покоряясь ему.
– Ты меня слушай, я тебе последний раз говорю. Что мне с тобой шутить? Разве я тебе перечил? Кто тебе всё устроил, кто попа нашел, кто паспорт взял, кто денег достал? Всё я.
– Ну и спасибо тебе. Ты думаешь я тебе не благодарен? – Анатоль вздохнул и обнял Долохова.
– Я тебе помогал, но всё же я тебе должен правду сказать: дело опасное и, если разобрать, глупое. Ну, ты ее увезешь, хорошо. Разве это так оставят? Узнается дело, что ты женат. Ведь тебя под уголовный суд подведут…
– Ах! глупости, глупости! – опять сморщившись заговорил Анатоль. – Ведь я тебе толковал. А? – И Анатоль с тем особенным пристрастием (которое бывает у людей тупых) к умозаключению, до которого они дойдут своим умом, повторил то рассуждение, которое он раз сто повторял Долохову. – Ведь я тебе толковал, я решил: ежели этот брак будет недействителен, – cказал он, загибая палец, – значит я не отвечаю; ну а ежели действителен, всё равно: за границей никто этого не будет знать, ну ведь так? И не говори, не говори, не говори!
– Право, брось! Ты только себя свяжешь…
– Убирайся к чорту, – сказал Анатоль и, взявшись за волосы, вышел в другую комнату и тотчас же вернулся и с ногами сел на кресло близко перед Долоховым. – Это чорт знает что такое! А? Ты посмотри, как бьется! – Он взял руку Долохова и приложил к своему сердцу. – Ah! quel pied, mon cher, quel regard! Une deesse!! [О! Какая ножка, мой друг, какой взгляд! Богиня!!] A?
Долохов, холодно улыбаясь и блестя своими красивыми, наглыми глазами, смотрел на него, видимо желая еще повеселиться над ним.
– Ну деньги выйдут, тогда что?
– Тогда что? А? – повторил Анатоль с искренним недоумением перед мыслью о будущем. – Тогда что? Там я не знаю что… Ну что глупости говорить! – Он посмотрел на часы. – Пора!
Анатоль пошел в заднюю комнату.
– Ну скоро ли вы? Копаетесь тут! – крикнул он на слуг.
Долохов убрал деньги и крикнув человека, чтобы велеть подать поесть и выпить на дорогу, вошел в ту комнату, где сидели Хвостиков и Макарин.
Анатоль в кабинете лежал, облокотившись на руку, на диване, задумчиво улыбался и что то нежно про себя шептал своим красивым ртом.
– Иди, съешь что нибудь. Ну выпей! – кричал ему из другой комнаты Долохов.
– Не хочу! – ответил Анатоль, всё продолжая улыбаться.
– Иди, Балага приехал.
Анатоль встал и вошел в столовую. Балага был известный троечный ямщик, уже лет шесть знавший Долохова и Анатоля, и служивший им своими тройками. Не раз он, когда полк Анатоля стоял в Твери, с вечера увозил его из Твери, к рассвету доставлял в Москву и увозил на другой день ночью. Не раз он увозил Долохова от погони, не раз он по городу катал их с цыганами и дамочками, как называл Балага. Не раз он с их работой давил по Москве народ и извозчиков, и всегда его выручали его господа, как он называл их. Не одну лошадь он загнал под ними. Не раз он был бит ими, не раз напаивали они его шампанским и мадерой, которую он любил, и не одну штуку он знал за каждым из них, которая обыкновенному человеку давно бы заслужила Сибирь. В кутежах своих они часто зазывали Балагу, заставляли его пить и плясать у цыган, и не одна тысяча их денег перешла через его руки. Служа им, он двадцать раз в году рисковал и своей жизнью и своей шкурой, и на их работе переморил больше лошадей, чем они ему переплатили денег. Но он любил их, любил эту безумную езду, по восемнадцати верст в час, любил перекувырнуть извозчика и раздавить пешехода по Москве, и во весь скок пролететь по московским улицам. Он любил слышать за собой этот дикий крик пьяных голосов: «пошел! пошел!» тогда как уж и так нельзя было ехать шибче; любил вытянуть больно по шее мужика, который и так ни жив, ни мертв сторонился от него. «Настоящие господа!» думал он.
Анатоль и Долохов тоже любили Балагу за его мастерство езды и за то, что он любил то же, что и они. С другими Балага рядился, брал по двадцати пяти рублей за двухчасовое катанье и с другими только изредка ездил сам, а больше посылал своих молодцов. Но с своими господами, как он называл их, он всегда ехал сам и никогда ничего не требовал за свою работу. Только узнав через камердинеров время, когда были деньги, он раз в несколько месяцев приходил поутру, трезвый и, низко кланяясь, просил выручить его. Его всегда сажали господа.
– Уж вы меня вызвольте, батюшка Федор Иваныч или ваше сиятельство, – говорил он. – Обезлошадничал вовсе, на ярманку ехать уж ссудите, что можете.
И Анатоль и Долохов, когда бывали в деньгах, давали ему по тысяче и по две рублей.
Балага был русый, с красным лицом и в особенности красной, толстой шеей, приземистый, курносый мужик, лет двадцати семи, с блестящими маленькими глазами и маленькой бородкой. Он был одет в тонком синем кафтане на шелковой подкладке, надетом на полушубке.
Он перекрестился на передний угол и подошел к Долохову, протягивая черную, небольшую руку.
– Федору Ивановичу! – сказал он, кланяясь.
– Здорово, брат. – Ну вот и он.
– Здравствуй, ваше сиятельство, – сказал он входившему Анатолю и тоже протянул руку.
– Я тебе говорю, Балага, – сказал Анатоль, кладя ему руки на плечи, – любишь ты меня или нет? А? Теперь службу сослужи… На каких приехал? А?
– Как посол приказал, на ваших на зверьях, – сказал Балага.
– Ну, слышишь, Балага! Зарежь всю тройку, а чтобы в три часа приехать. А?
– Как зарежешь, на чем поедем? – сказал Балага, подмигивая.
– Ну, я тебе морду разобью, ты не шути! – вдруг, выкатив глаза, крикнул Анатоль.
– Что ж шутить, – посмеиваясь сказал ямщик. – Разве я для своих господ пожалею? Что мочи скакать будет лошадям, то и ехать будем.
– А! – сказал Анатоль. – Ну садись.
– Что ж, садись! – сказал Долохов.
– Постою, Федор Иванович.
– Садись, врешь, пей, – сказал Анатоль и налил ему большой стакан мадеры. Глаза ямщика засветились на вино. Отказываясь для приличия, он выпил и отерся шелковым красным платком, который лежал у него в шапке.
– Что ж, когда ехать то, ваше сиятельство?
– Да вот… (Анатоль посмотрел на часы) сейчас и ехать. Смотри же, Балага. А? Поспеешь?
– Да как выезд – счастлив ли будет, а то отчего же не поспеть? – сказал Балага. – Доставляли же в Тверь, в семь часов поспевали. Помнишь небось, ваше сиятельство.
– Ты знаешь ли, на Рожество из Твери я раз ехал, – сказал Анатоль с улыбкой воспоминания, обращаясь к Макарину, который во все глаза умиленно смотрел на Курагина. – Ты веришь ли, Макарка, что дух захватывало, как мы летели. Въехали в обоз, через два воза перескочили. А?
– Уж лошади ж были! – продолжал рассказ Балага. – Я тогда молодых пристяжных к каурому запрег, – обратился он к Долохову, – так веришь ли, Федор Иваныч, 60 верст звери летели; держать нельзя, руки закоченели, мороз был. Бросил вожжи, держи, мол, ваше сиятельство, сам, так в сани и повалился. Так ведь не то что погонять, до места держать нельзя. В три часа донесли черти. Издохла левая только.
Анатоль вышел из комнаты и через несколько минут вернулся в подпоясанной серебряным ремнем шубке и собольей шапке, молодцовато надетой на бекрень и очень шедшей к его красивому лицу. Поглядевшись в зеркало и в той самой позе, которую он взял перед зеркалом, став перед Долоховым, он взял стакан вина.
– Ну, Федя, прощай, спасибо за всё, прощай, – сказал Анатоль. – Ну, товарищи, друзья… он задумался… – молодости… моей, прощайте, – обратился он к Макарину и другим.
Несмотря на то, что все они ехали с ним, Анатоль видимо хотел сделать что то трогательное и торжественное из этого обращения к товарищам. Он говорил медленным, громким голосом и выставив грудь покачивал одной ногой. – Все возьмите стаканы; и ты, Балага. Ну, товарищи, друзья молодости моей, покутили мы, пожили, покутили. А? Теперь, когда свидимся? за границу уеду. Пожили, прощай, ребята. За здоровье! Ура!.. – сказал он, выпил свой стакан и хлопнул его об землю.
– Будь здоров, – сказал Балага, тоже выпив свой стакан и обтираясь платком. Макарин со слезами на глазах обнимал Анатоля. – Эх, князь, уж как грустно мне с тобой расстаться, – проговорил он.
– Ехать, ехать! – закричал Анатоль.
Балага было пошел из комнаты.
– Нет, стой, – сказал Анатоль. – Затвори двери, сесть надо. Вот так. – Затворили двери, и все сели.
– Ну, теперь марш, ребята! – сказал Анатоль вставая.
Лакей Joseph подал Анатолю сумку и саблю, и все вышли в переднюю.
– А шуба где? – сказал Долохов. – Эй, Игнатка! Поди к Матрене Матвеевне, спроси шубу, салоп соболий. Я слыхал, как увозят, – сказал Долохов, подмигнув. – Ведь она выскочит ни жива, ни мертва, в чем дома сидела; чуть замешкаешься, тут и слезы, и папаша, и мамаша, и сейчас озябла и назад, – а ты в шубу принимай сразу и неси в сани.
Лакей принес женский лисий салоп.
– Дурак, я тебе сказал соболий. Эй, Матрешка, соболий! – крикнул он так, что далеко по комнатам раздался его голос.