2016-03-19 5 views
0

Являются ли контрольные суммы заголовка icmp и методы расчета контрольной суммы IP-заголовка одинаковыми? Я имею в виду, они могут быть похожими. Но я нашел код this для контрольной суммы IP-заголовка. Могу ли я использовать этот код для контрольной суммы заголовка icmp? Любая другая помощь была бы замечательной.Расчет контрольной суммы заголовка ICMP и IP-заголовка

 unsigned short cksum(struct ip *ip, int len){ 
     long sum = 0; /* assume 32 bit long, 16 bit short */ 

     while(len > 1){ 
     sum += *((unsigned short*) ip)++; 
     if(sum & 0x80000000) /* if high order bit set, fold */ 
      sum = (sum & 0xFFFF) + (sum >> 16); 
     len -= 2; 
     } 

     if(len)  /* take care of left over byte */ 
     sum += (unsigned short) *(unsigned char *)ip; 

     while(sum>>16) 
     sum = (sum & 0xFFFF) + (sum >> 16); 

     return ~sum; 
    } 
+1

Вы должны проверить RFC 792 для ICMP «Контрольная сумма -Header Checksum» - 16-разрядное дополнение к сумме дополнений к сумме всех 16-разрядных слов в заголовке. Для вычисления контрольной суммы поле контрольной суммы должно быть равно 0. Эта контрольная сумма может быть равна заменены в будущем ». RFC 1071 и 1141 разъясняют, как выполнять контрольные суммы IP. –

+0

@ Ron, вы говорите, что они (контрольная сумма контрольной суммы и методы вычисления контрольной суммы ip-заголовка) не одинаковы? –

ответ

1

RFC 791 - Internet Protocol ...

Контрольная сумма заголовка: 16 бит

Контрольная сумма на только в заголовке. Поскольку некоторые поля заголовка меняют (например, время на живое), это пересчитывается и проверяется в каждой точке , что обрабатывается интернет-заголовок.

Алгоритм контрольной суммы:

The checksum field is the 16 bit one's complement of the one's 
complement sum of all 16 bit words in the header. For purposes of 
computing the checksum, the value of the checksum field is zero. 

Это простое вычисление контрольной суммы и экспериментальные доказательства указывает, что является адекватным, но это временное и может быть заменен посредством процедуры CRC, в зависимости от дальнейшего опыта ,

Примечание: «Процедура CRC» никогда не была реализована.

RFC 792 - Internet Control Message Protocol ...

Контрольная сумма заголовка

The 16 bit one's complement of the one's complement sum of all 16 
bit words in the header. For computing the checksum, the checksum 
field should be zero. This checksum may be replaced in the 
future. 

Примечание: Опять же, этот алгоритм не был заменен.

Таким образом, можно с уверенностью предположить, что оба алгоритма одинаковы, и да, вы можете использовать один и тот же код BSD (естественно, для нумерации struct ip) для вычисления контрольной суммы заголовка ICMP.

 Смежные вопросы

  • Нет связанных вопросов^_^