summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc1146.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/rfc/rfc1146.txt')
-rw-r--r--doc/rfc/rfc1146.txt283
1 files changed, 283 insertions, 0 deletions
diff --git a/doc/rfc/rfc1146.txt b/doc/rfc/rfc1146.txt
new file mode 100644
index 0000000..c65b9d2
--- /dev/null
+++ b/doc/rfc/rfc1146.txt
@@ -0,0 +1,283 @@
+
+
+
+
+
+
+Network Working Group J. Zweig
+Request for Comments: 1146 UIUC
+Obsoletes: RFC 1145 C. Partridge
+ BBN
+ March 1990
+
+
+ TCP Alternate Checksum Options
+
+Status of This Memo
+
+ This memo suggests a pair of TCP options to allow use of alternate
+ data checksum algorithms in the TCP header. The use of these options
+ is experimental, and not recommended for production use.
+
+ Note: This RFC corrects errors introduced in the editing process in
+ RFC 1145.
+
+ Distribution of this memo is unlimited.
+
+Introduction
+
+ Some members of the networking community have expressed interest in
+ using checksum-algorithms with different error detection and
+ correction properties than the standard TCP checksum. The option
+ described in this memo provides a mechanism to negotiate the use of
+ an alternate checksum at connection-establishment time, as well as a
+ mechanism to carry additional checksum information for algorithms
+ that utilize checksums that are longer than 16 bits.
+
+Definition of the Options
+
+ The TCP Alternate Checksum Request Option may be sent in a SYN
+ segment by a TCP to indicate that the TCP is prepared to both
+ generate and receive checksums based on an alternate algorithm.
+ During communication, the alternate checksum replaces the regular TCP
+ checksum in the checksum field of the TCP header. Should the
+ alternate checksum require more than 2 octets to transmit, the
+ checksum may either be moved into a TCP Alternate Checksum Data
+ Option and the checksum field of the TCP header be sent as 0, or the
+ data may be split between the header field and the option. Alternate
+ checksums are computed over the same data as the regular TCP checksum
+ (see TCP Alternate Checksum Data Option discussion below).
+
+TCP Alternate Checksum Request Option
+
+ The format of the TCP Alternate Checksum Request Option is:
+
+
+
+
+Zweig & Partridge [Page 1]
+
+RFC 1146 TCP Alternate Checksum Options March 1990
+
+
+ +----------+----------+----------+
+ | Kind=14 | Length=3 | chksum |
+ +----------+----------+----------+
+
+ Here chksum is a number identifying the type of checksum to be used.
+
+ The currently defined values of chksum are:
+
+ 0 -- TCP checksum
+ 1 -- 8-bit Fletcher's algorithm (see Appendix I)
+ 2 -- 16-bit Fletcher's algorithm (see Appendix II)
+
+ Note that the 8-bit Fletcher algorithm gives a 16-bit checksum and
+ the 16-bit algorithm gives a 32-bit checksum.
+
+ Alternate checksum negotiation proceeds as follows:
+
+ A SYN segment used to originate a connection may contain the
+ Alternate Checksum Request Option, which specifies an alternate
+ checksum-calculation algorithm to be used for the connection. The
+ acknowledging SYN-ACK segment may also carry the option.
+
+ If both SYN segments carry the Alternate Checksum Request option,
+ and both specify the same algorithm, that algorithm must be used
+ for the remainder of the connection. Otherwise, the standard TCP
+ checksum algorithm must be used for the entire connection. Thus,
+ for example, if one TCP specifies type 1 checksums, and the other
+ specifies type 2 checksums, then they will use type 0 (the regular
+ TCP checksum). Note that in practice, one TCP will typically be
+ responding to the other's SYN, and thus either accepting or
+ rejecting the proposed alternate checksum algorithm.
+
+ Any segment with the SYN bit set must always use the standard TCP
+ checksum algorithm. Thus the SYN segment will always be
+ understood by the receiving TCP. The alternate checksum must not
+ be used until the first non-SYN segment. In addition, because RST
+ segments may also be received or sent without complete state
+ information, any segment with the RST bit set must use the
+ standard TCP checksum.
+
+ The option may not be sent in any segment that does not have the
+ SYN bit set.
+
+ An implementation of TCP which does not support the option should
+ silently ignore it (as RFC 1122 requires). Ignoring the option
+ will force any TCP attempting to use an alternate checksum to use
+ the standard TCP checksum algorithm, thus ensuring
+ interoperability.
+
+
+
+Zweig & Partridge [Page 2]
+
+RFC 1146 TCP Alternate Checksum Options March 1990
+
+
+TCP Alternate Checksum Data Option
+
+ The format of the TCP Alternate Checksum Data Option is:
+
+ +---------+---------+---------+ +---------+
+ | Kind=15 |Length=N | data | ... | data |
+ +---------+---------+---------+ +---------+
+
+ This field is used only when the alternate checksum that is
+ negotiated is longer than 16 bits. These checksums will not fit in
+ the checksum field of the TCP header and thus at least part of them
+ must be put in an option. Whether the checksum is split between the
+ checksum field in the TCP header and the option or the entire
+ checksum is placed in the option is determined on a checksum by
+ checksum basis.
+
+ The length of this option will depend on the choice of alternate
+ checksum algorithm for this connection.
+
+ While computing the alternate checksum, the TCP checksum field and
+ the data portion TCP Alternate Checksum Data Option are replaced with
+ zeros.
+
+ An otherwise acceptable segment carrying this option on a connection
+ using a 16-bit checksum algorithm, or carrying this option with an
+ inappropriate number of data octets for the chosen alternate checksum
+ algorithm is in error and must be discarded; a RST-segment must be
+ generated, and the connection aborted.
+
+ Note the requirement above that RST and SYN segments must always use
+ the standard TCP checksum.
+
+APPENDIX I: The 8-bit Fletcher Checksum Algorithm
+
+ The 8-bit Fletcher Checksum Algorithm is calculated over a sequence
+ of data octets (call them D[1] through D[N]) by maintaining 2
+ unsigned 1's-complement 8-bit accumulators A and B whose contents are
+ initially zero, and performing the following loop where i ranges from
+ 1 to N:
+
+ A := A + D[i]
+ B := B + A
+
+ It can be shown that at the end of the loop A will contain the 8-bit
+ 1's complement sum of all octets in the datagram, and that B will
+ contain (N)D[1] + (N-1)D[2] + ... + D[N].
+
+ The octets covered by this algorithm should be the same as those over
+
+
+
+Zweig & Partridge [Page 3]
+
+RFC 1146 TCP Alternate Checksum Options March 1990
+
+
+ which the standard TCP checksum calculation is performed, with the
+ pseudoheader being D[1] through D[12] and the TCP header beginning at
+ D[13]. Note that, for purposes of the checksum computation, the
+ checksum field itself must be equal to zero.
+
+ At the end of the loop, the A goes in the first byte of the TCP
+ checksum and B goes in the second byte.
+
+ Note that, unlike the OSI version of the Fletcher checksum, this
+ checksum does not adjust the check bytes so that the receiver
+ checksum is 0.
+
+ There are a number of much faster algorithms for calculating the two
+ octets of the 8-bit Fletcher checksum. For more information see
+ [Sklower89], [Nakassis88] and [Fletcher82]. Naturally, any
+ computation which computes the same number as would be calculated by
+ the loop above may be used to calculate the checksum. One advantage
+ of the Fletcher algorithms over the standard TCP checksum algorithm
+ is the ability to detect the transposition of octets/words of any
+ size within a datagram.
+
+APPENDIX II: The 16-bit Fletcher Checksum Algorithm
+
+ The 16-bit Fletcher Checksum algorithm proceeds in precisely the same
+ manner as the 8-bit checksum algorithm,, except that A, B and the
+ D[i] are 16-bit quantities. It is necessary (as it is with the
+ standard TCP checksum algorithm) to pad a datagram containing an odd
+ number of octets with a zero octet.
+
+ Result A should be placed in the TCP header checksum field and Result
+ B should appear in an TCP Alternate Checksum Data option. This
+ option must be present in every TCP header. The two bytes reserved
+ for B should be set to zero during the calculation of the checksum.
+
+ The checksum field of the TCP header shall contain the contents of A
+ at the end of the loop. The TCP Alternate Checksum Data option must
+ be present and contain the contents of B at the end of the loop.
+
+BIBLIOGRAPHY:
+
+ [BrBoPa89] Braden, R., Borman, D., and C. Partridge, "Computing
+ the Internet Checksum", ACM Computer Communication
+ Review, Vol. 19, No. 2, pp. 86-101, April 1989.
+ [Note that this includes Plummer, W. "IEN-45: TCP
+ Checksum Function Design" (1978) as an appendix.]
+
+ [Fletcher82] Fletcher, J., "An Arithmetic Checksum for Serial
+ Transmissions", IEEE Transactions on Communication,
+
+
+
+Zweig & Partridge [Page 4]
+
+RFC 1146 TCP Alternate Checksum Options March 1990
+
+
+ Vol. COM-30, No. 1, pp. 247-252, January 1982.
+
+ [Nakassis88] Nakassis, T., "Fletcher's Error Detection Algorithm:
+ How to implement it efficiently and how to avoid the
+ most common pitfalls", ACM Computer Communication
+ Review, Vol. 18, No. 5, pp. 86-94, October 1988.
+
+ [Sklower89] Sklower, K., "Improving the Efficiency of the OSI
+ Checksum Calculation", ACM Computer Communication
+ Review, Vol. 19, No. 5, pp. 32-43, October 1989.
+
+Security Considerations
+
+ Security issues are not addressed in this memo.
+
+Authors' Addresses
+
+ Johnny Zweig
+ Digital Computer Lab
+ University of Illinois (UIUC)
+ 1304 West Springfield Avenue
+ CAMPUS MC 258
+ Urbana, IL 61801
+
+ Phone: (217) 333-7937
+
+ EMail: zweig@CS.UIUC.EDU
+
+
+ Craig Partridge
+ Bolt Beranek and Newman Inc.
+ 50 Moulton Street
+ Cambridge, MA 02138
+
+ Phone: (617) 873-2459
+
+ EMail: craig@BBN.COM
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Zweig & Partridge [Page 5]
+ \ No newline at end of file