2016-03-19 25 views
0

icmp üstbilgi sağlama toplamı ve ip üstbilgi sağlama toplamı hesaplama yöntemleri aynı mıdır? Yani benzer olabilirler. Ama ip header checksum için this kodunu buldum. Bu kodu icmp başlık sağlama toplamı için de kullanabilir miyim? Başka herhangi bir yardım harika olurdu.ICMP üstbilgisi ve IP üstbilgi sağlama toplamı hesaplamaları

 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

ICMP için RFC 792'yi kontrol etmelisiniz "_Header Checksum - 16 bit'in başlığındaki tüm 16 bitlik sözcüklerin tamamlayıcı toplamının tamamlayıcısıdır. Sağlama toplamını hesaplamak için sağlama alanı alanı sıfır olmalıdır. Gelecekte değiştirildi. "RFC 1071 ve 1141, IP sağlama toplamlarını nasıl yapacağını açıklar. –

+0

@Ron Yani, onlar (header checksum ve ip header checksum hesaplama yöntemleri) aynı olmadığını söyler misiniz? –

cevap

1

RFC 791 - Internet Protocol ...

Başlık Sağlama: 16 bit

başlığında yalnızca bir sağlama. Bazı başlık alanları (ör. Yaşam süresi) değiştiğinden, bu, internet başlığının işlendiği her noktada adresinde yeniden hesaplanır ve doğrulanır.

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. 

Bu sağlama ve yeterli olduğunu belirtmektedir deneysel kanıt hesaplamak için basit, ama daha ileri deneyimine bağlı olarak geçicidir ve bir CRC prosedürü ile değiştirilebilir:

sağlama algoritmasıdır .

Not: "CRC prosedürü" uygulanması değildi.

RFC 792 - Internet Control Message Protocol ...

Başlık Sağlama

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. 

Not: Yine, bu algoritma asla yerini aldı.

Bu nedenle, her iki algoritmanın da aynı olduğunu varsaymak güvenlidir ve evet, bir ICMP üstbilgi sağlama toplamını hesaplamak için aynı BSD kodunu (sanity 'sake için struct ip öğelerini değiştirme) kullanabilirsiniz.

İlgili konular