home *** CD-ROM | disk | FTP | other *** search
/ Handbook of Infosec Terms 2.0 / Handbook_of_Infosec_Terms_Version_2.0_ISSO.iso / text / rfcs / rfc1141.txt < prev    next >
Text File  |  1996-05-07  |  4KB  |  68 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7. Network Working Group                                         T. Mallory Request for Comments: 1141                                   A. Kullberg Obsoletes: RFC 1071                                   BBN Communications                                                             January 1990 
  8.  
  9.               Incremental Updating of the Internet Checksum 
  10.  
  11. Status of this Memo 
  12.  
  13.    This memo correctly describes the incremental update procedure for    use with the standard Internet checksum.  It is intended to replace    the description of Incremental Update in RFC 1071.  This is not a    standard but rather, an implementation technique.  Distribution of    this memo is unlimited. 
  14.  
  15. Description 
  16.  
  17.    In RFC 1071 on pages 4 and 5, there is a description of a method to    update the IP checksum in the IP header without having to completely    recompute the checksum.  In particular, the RFC recommends the    following equation for computing the update checksum C' from the    original checksum C, and the old and new values of byte m: 
  18.  
  19.          C' = C + (-m) + m' = C + (m' - m) 
  20.  
  21.    While the equation above is correct, it is not very useful for    incremental updates since the equation above updates the checksum C,    rather than the 1's complement of the checksum, ~C, which is the    value stored in the checksum field.  In addition, it suffers because    the notation does not clearly specify that all arithmetic, including    the unary negation, must be performed one's complement, and so is    difficult to use to build working code.  The useful calculation for    2's complement machines is: 
  22.  
  23.          ~C' = ~(C + (-m) + m') = ~C + (m - m') = ~C + m + ~m' 
  24.  
  25.    In the oft-mentioned case of updating the IP TTL field, subtracting    one from the TTL means ADDING 1 or 256 as appropriate to the checksum    field in the packet, using one's complement addition.  One big-endian    non-portable implementation in C looks like: 
  26.  
  27.       unsigned long sum;       ipptr->ttl--;                  /* decrement ttl */       sum = ipptr->Checksum + 0x100;  /* increment checksum high byte*/       ipptr->Checksum = (sum + (sum>>16)) /* add carry */ 
  28.  
  29.    This special case can be optimized in many ways: for instance, you 
  30.  
  31.  
  32.  
  33. Mallory & Kullberg                                              [Page 1] 
  34.  RFC 1141                  Incremental Updating              January 1990 
  35.  
  36.     can bundle updating and checking the ttl.  Compiler mileage may vary.    Here is a more general and possibly more helpful example which    updates the ttl by n seconds: 
  37.  
  38.       UpdateTTL(iph,n)       struct ip_hdr *ipptr;       unsigned char n;       {           unsigned long sum;           unsigned short old; 
  39.  
  40.           old = ntohs(*(unsigned short *)&ipptr->ttl);           ipptr->ttl -= n;           sum = old + (~ntohs(*(unsigned short *)&ipptr->ttl) & 0xffff);           sum += ntohs(ipptr->Checksum);           sum = (sum & 0xffff) + (sum>>16);           ipptr->Checksum = htons(sum + (sum>>16));       } 
  41.  
  42. Security Considerations 
  43.  
  44.    Security issues are not addressed in this memo. 
  45.  
  46. Authors' Addresses 
  47.  
  48.    Tracy Mallory    BBN Communications Corporation    50 Moulton Street    Cambridge, MA 02238 
  49.  
  50.    Phone: (617) 873-3193 
  51.  
  52.    EMail: tmallory@CCV.BBN.COM 
  53.  
  54.     A. Kullberg    BBN Communications Corporation    50 Moulton Street    Cambridge, MA 02238 
  55.  
  56.    Phone: (617) 873-4000 
  57.  
  58.    EMail:  akullberg@BBN.COM 
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  Mallory & Kullberg                                              [Page 2] 
  67.  
  68.