Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Checksum в UDP-пакете

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Сети
Предыдущая тема :: Следующая тема  
Автор Сообщение
TanaT
Гость





СообщениеДобавлено: Ср Июл 28 2004 23:43    Заголовок сообщения: Checksum в UDP-пакете Ответить с цитатой

Как вычисляется контрольная сумма в заголовке UDP-пакета?

По адресу http://www.citforum.ru/nets/tcp/udpspec.shtml есть описание протокола UDP, в котором сказано:

"Контрольная сумма - 16 битное дополнение до единицы суммы дополнений UDP заголовка, данных и псевдозаголовка. Последний содержит информацию из заголовка в протоколе IP. В случае необходимости, датаграмма дополняется в конце нулевыми октетами, чтобы общее их количество стало четным. "

В оригинале это звучит так:

"Checksum is the 16-bit one's complement of the one's complement sum of a pseudo header of information from the IP header, the UDP header, and the data, padded with zero octets at the end (if necessary) to make a multiple of two octets."

Мне, честно говоря, не понятно, что хотел сказать автор перевода. Что до чего дополняется. Как будто бы переводила машина. Объясните, пожалуйста, подробнее.
Вернуться к началу
DSN



Зарегистрирован: 20.02.2003
Сообщения: 150
Откуда: Moscow

СообщениеДобавлено: Ср Авг 04 2004 10:58    Заголовок сообщения: обьясняю ... Ответить с цитатой

обьясняю ...
Так же как и в IP и TCP пакетах
слово
1) CheckSum = 0; в пакете перед подсчетом присваеваем данному полю ноль.
2) сумируем все слова заголовка и если нужно поля данных, после каждого сумирования проверяем перенос, если есть то прибавляем еще единицу, если нет, то следующее слово.

Есть еще вариант когда сумма QWORD, тогда просто получают сумму
а затем:

cs = LOWord(sc) + HIWord(cs); прибавляем перенос из старшего слова к младшему слову
cs = LOWord(sc) + HIWord(cs); прибавляем возможный перенос после суммирования ст и мл слов.
После в переменной cs будет нужная вам CheckSum
Удачи.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Andy_user



Зарегистрирован: 03.12.2003
Сообщения: 382
Откуда: Санкт-Петербург

СообщениеДобавлено: Ср Авг 04 2004 11:19    Заголовок сообщения: Ответить с цитатой

void IP_CheckSum(unsigned char * PointerBuf,
int NumberOfBytes,
unsigned char * PointerCS)
{
// Calculates IP-style checksum on block of data
unsigned long check = 0;
USHORT * TempPointer;
TempPointer = (USHORT *) PointerBuf;
// Sum all the words together, adding the final byte if the size is odd
while(NumberOfBytes > 1) {
check = check + ( * TempPointer);
TempPointer ++;
NumberOfBytes --;
NumberOfBytes --;
};
if (NumberOfBytes) {
check = check + ( * TempPointer);
};
check = (check >> 16) + (check & 0xffff);
check = check + (check >> 16);
check = ~ check;
* PointerCS = (unsigned char)(check & 0xff);
* (PointerCS + 1) = (unsigned char)((check >> Cool & 0xff);
}
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
DSN



Зарегистрирован: 20.02.2003
Сообщения: 150
Откуда: Moscow

СообщениеДобавлено: Ср Авг 04 2004 13:41    Заголовок сообщения: Ответить с цитатой

да, про инверсию то я и забыл...
исходники дома, подглядеть негде.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Сети Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...