On Mon, Dec 05, 2016 at 03:40:38PM +0200, Marian Marinov wrote:
On 12/05/2016 02:06 PM, Григор wrote:
Изобщо не мога да схвана как точно го пресмятат. Пробвах някакви функции за пресмятане на crc16 но винаги дава грешен резултат.
получената информация е:
efbeadde1b0131ffd8054843363954611143454
00000
6c
00011800
0119
0000000000000000000000000000000000000000
b343
Където b343 <crc> #на горната
Ако някой се е занимавал с това да удари едно рамо. Ще черпя.
UDP използва pseudo IP header за пресмятане на checksums:
http://www.tcpipguide.com/free/t_UDPMessageFormat-2.htm
Информация за самите сметки(padding-а е важен):
http://images.slideplayer.com/15/4794330/slides/slide_54.jpg
Струва ми се, че Григор има предвид нещо по-различно: май говори за
това, че в *данните*, предадени в UDP пакета, има някакво CRC на
по-високо ниво, изчислявано от програмите, които си прехвърлят тези
данни. Лошото е, че в такъв случай не е много ясно какво изобщо може
да се разбере - като начало, не е ясно дали CRC-то е върху *всички*
данни в пакета или, още по-зле, дали не е и върху някакви други данни -
т.е. дали в пресмятането не участват някакви данни, които не са в този
пакет (пореден номер на пакета, ID на едната или другата страна, фаза
на луната, знае ли човек). Да не говорим за това, че не знаеш какъв
е полиномът, не знаеш дали трябва да размениш тук-там някой байт (дали
преди пресмятането някой не обръща нещата от единия в другия byte order),
и всякакви такива щуротии :(
Поздрави,
Петър