⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rfc1141.txt

📁 著名的RFC文档,其中有一些文档是已经翻译成中文的的.
💻 TXT
字号:
Network Working Group                                         T. MalloryRequest for Comments: 1141                                   A. KullbergObsoletes: RFC 1071                                   BBN Communications                                                            January 1990             Incremental Updating of the Internet ChecksumStatus of this Memo   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.Description   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:         C' = C + (-m) + m' = C + (m' - m)   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:         ~C' = ~(C + (-m) + m') = ~C + (m - m') = ~C + m + ~m'   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:      unsigned long sum;      ipptr->ttl--;                  /* decrement ttl */      sum = ipptr->Checksum + 0x100;  /* increment checksum high byte*/      ipptr->Checksum = (sum + (sum>>16)) /* add carry */   This special case can be optimized in many ways: for instance, youMallory & Kullberg                                              [Page 1]RFC 1141                  Incremental Updating              January 1990   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:      UpdateTTL(iph,n)      struct ip_hdr *ipptr;      unsigned char n;      {          unsigned long sum;          unsigned short old;          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));      }Security Considerations   Security issues are not addressed in this memo.Authors' Addresses   Tracy Mallory   BBN Communications Corporation   50 Moulton Street   Cambridge, MA 02238   Phone: (617) 873-3193   EMail: tmallory@CCV.BBN.COM   A. Kullberg   BBN Communications Corporation   50 Moulton Street   Cambridge, MA 02238   Phone: (617) 873-4000   EMail:  akullberg@BBN.COMMallory & Kullberg                                              [Page 2]

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -