|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Max Alekseyev 2:5015/60 22 Oct 2001 16:32:58 To : Alex Alexandrov Subject : Контрольная сумма для IP -------------------------------------------------------------------------------- Replying to a message of Alex Alexandrov to All: AA> При вычислении контрольных сумм ( в протоколах TCP/IP ) используется AA> следующий алгоритм: AA> - начальная контрольная сумма ( 2 байта ) - 0. AA> - при добавлении очередного двухбайтового слова - оно суммируется с AA> текущей контрольной суммой и м.б. выставленным переносом от AA> предыдущего сложения; полученный перенос запоминается. AA> - в конце м.б. выставленный при последнем сложении перенос складывается AA> с контрольной суммой ( сумма увеличивается на 1 ); в т.ч. при этом AA> переноса уже не возникает. Потом сумма инвертируется, но это уже AA> не важно. Можешь забыть про все переносы и пр. и считать, что контрольная сумма - это просто сумма всех слов по модулю 0xFFFF. Единственная проблема может быть, когда контрольная сумма равна 0 - этому значению может так же соответствовать значение контрольной суммы 0xFFFF. AA> Все это вроде называется "16-битное дополнение до единицы суммы AA> дополнений до единицы всех 16-битных слов в массиве". AA> Вопрос: есть массив, для него известна контрольная сумма. Если в AA> этом массиве увеличить какое-то число на N, то новая контрольная AA> сумма м.б. получена добавлением N к имеющейся ( не инвертированной в AA> конце, либо инвертированной еще раз ) контрольной сумме по тому же AA> алгоритму ( с учетом м.б. возникшего переноса ). А вот если какое-то AA> число в массиве не увеличилось, а уменьшилось - тоже наверняка можно AA> всю сумму не пересчитывать, но вот как ? Вычитай по модулю 0xFFFF и старайся избегать контрольных сумм равных 0. ;-) Regards, ш.ш Max ~ --- FleetStreet 1.27.3.6 * Origin: (2:5015/60) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/18133bd451ab.html, оценка из 5, голосов 10
|