Приклад розрахунку контрольної суми в протоколах ТСР/ІР
Перед розрахунком контрольної суми в протоколах ТСР/ІР повідомлення доповнюється в кінці нульовими бітами до довжини, кратної 16 бітам (додаткові нульові біти не відправляються разом з повідомленням). Початкове значення контрольної суми у час розрахунку контрольної суми повідомлення, що відправляється, приймається за нуль.
Для розрахунку контрольної суми уся інформація, для якої розраховується контрольна сума, розбивається на слова (1 слово = 2 байти (2 октети) = 16 біт). Потім розраховується порозрядне доповнення до одиниці суми всіх слів з порозрядним доповненням. Результат записується у відповідне поле заголовку.
У тому випадку, якщо контрольна сума вийшла рівною нулю, поле заповнюють одиницями. Якщо контрольну суму не потрібно розраховувати, значення поля залишають нульовим.
Для прикладу розрахуємо контрольну суму декількох 16-бітових слів: 0x398А, 0xF802, 0x14B2, 0xC281. Нагадаємо, що тут, як і в деяких мовах програмування позначка “0х” є префіксом, ознакою того, що далі записане число в шістьнадцатьковій системі числення. Знаходимо їх суму з переносом старшої (п’ятої) тетради (в разі її наявності) до молодшої та доповненням останнього біта молодшої тетради:
0x 3 9 8 A + 0x F 8 0 2 = 0011 1001 1000 1010 + 1111 1000 0000 0010 =
0011 1001 1000 1010
1111 1000 0000 0010
00010011 0001 1000 1100→
= 0001 0011 0001 1000 1100 → 0x 3 1 8 С → 0011 0001 1000 1101 = 0x 3 1 8 D
0x318D + 0x14B2 = 0011 0001 1000 1101 + 0001 0100 1011 0010 =
0011 0001 1000 1101
0001 0100 1011 0010
0000 0100 0110 0011 1111→
= 0000 0100 0110 0011 1111 = 0x0463F → 0x463F
0x463F + 0xC281 = 0100 0110 0011 1111 + 1100 0010 1000 0001 =
0100 0110 0011 1111
1100 0010 1000 0001
0001 0000 1000 1100 0000→
= 0001 0000 1000 1100 0000 → 0000 1000 1100 0001 →0x08C1
![]() |
Тепер знаходимо порозрядне доповнення до одиниці отриманого результату:
0x08C1 = 0000 1000 1100 0001 → 1111 0111 0011 1110 = 0xF73E або, інакше - 0xFFFF - 0x08C1 = 0xF73E. Це і є шукана контрольна сума
При отриманні повідомлення одержувач рахує контрольну суму заново (уже з урахуванням контрольної суми), і, якщо в результаті вийде двійкове число з шістнадцяти одиниць (тобто 0xffff), то контрольна сума вважається такою, що збіглася, і повідомлення приймається.
Таблиця переводу чисел
0hex | = | 0dec | = | 0oct | 8hex | = | 8dec | = | 10oct | |||||||||
1hex | = | 1dec | = | 1oct | 9hex | = | 9dec | = | 11oct | |||||||||
2hex | = | 2dec | = | 2oct | Ahex | = | 10dec | = | 12oct | |||||||||
3hex | = | 3dec | = | 3oct | Bhex | = | 11dec | = | 13oct | |||||||||
4hex | = | 4dec | = | 4oct | Chex | = | 12dec | = | 14oct | |||||||||
5hex | = | 5dec | = | 5oct | Dhex | = | 13dec | = | 15oct | |||||||||
6hex | = | 6dec | = | 6oct | Ehex | = | 14dec | = | 16oct | |||||||||
7hex | = | 7dec | = | 7oct | Fhex | = | 15dec | = | 17oct |