Porting PicoTCP WIP
This commit is contained in:
283
kernel/picotcp/RFC/rfc1146.txt
Normal file
283
kernel/picotcp/RFC/rfc1146.txt
Normal file
@ -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]
|
||||
|
||||
Reference in New Issue
Block a user