Porting PicoTCP WIP
This commit is contained in:
451
kernel/picotcp/RFC/rfc2873.txt
Normal file
451
kernel/picotcp/RFC/rfc2873.txt
Normal file
@ -0,0 +1,451 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Network Working Group X. Xiao
|
||||
Request for Comments: 2873 Global Crossing
|
||||
Category: Standards Track A. Hannan
|
||||
iVMG
|
||||
V. Paxson
|
||||
ACIRI/ICSI
|
||||
E. Crabbe
|
||||
Exodus Communications
|
||||
June 2000
|
||||
|
||||
|
||||
TCP Processing of the IPv4 Precedence Field
|
||||
|
||||
Status of this Memo
|
||||
|
||||
This document specifies an Internet standards track protocol for the
|
||||
Internet community, and requests discussion and suggestions for
|
||||
improvements. Please refer to the current edition of the "Internet
|
||||
Official Protocol Standards" (STD 1) for the standardization state
|
||||
and status of this protocol. Distribution of this memo is unlimited.
|
||||
|
||||
Copyright Notice
|
||||
|
||||
Copyright (C) The Internet Society (2000). All Rights Reserved.
|
||||
|
||||
Abstract
|
||||
|
||||
This memo describes a conflict between TCP [RFC793] and DiffServ
|
||||
[RFC2475] on the use of the three leftmost bits in the TOS octet of
|
||||
an IPv4 header [RFC791]. In a network that contains DiffServ-capable
|
||||
nodes, such a conflict can cause failures in establishing TCP
|
||||
connections or can cause some established TCP connections to be reset
|
||||
undesirably. This memo proposes a modification to TCP for resolving
|
||||
the conflict.
|
||||
|
||||
Because the IPv6 [RFC2460] traffic class octet does not have any
|
||||
defined meaning except what is defined in RFC 2474, and in particular
|
||||
does not define precedence or security parameter bits, there is no
|
||||
conflict between TCP and DiffServ on the use of any bits in the IPv6
|
||||
traffic class octet.
|
||||
|
||||
1. Introduction
|
||||
|
||||
In TCP, each connection has a set of states associated with it. Such
|
||||
states are reflected by a set of variables stored in the TCP Control
|
||||
Block (TCB) of both ends. Such variables may include the local and
|
||||
remote socket number, precedence of the connection, security level
|
||||
|
||||
|
||||
|
||||
|
||||
Xiao, et al. Standards Track [Page 1]
|
||||
|
||||
RFC 2873 TCP and the IPv4 Precedence Field June 2000
|
||||
|
||||
|
||||
and compartment, etc. Both ends must agree on the setting of the
|
||||
precedence and security parameters in order to establish a connection
|
||||
and keep it open.
|
||||
|
||||
There is no field in the TCP header that indicates the precedence of
|
||||
a segment. Instead, the precedence field in the header of the IP
|
||||
packet is used as the indication. The security level and compartment
|
||||
are likewise carried in the IP header, but as IP options rather than
|
||||
a fixed header field. Because of this difference, the problem with
|
||||
precedence discussed in this memo does not apply to them.
|
||||
|
||||
TCP requires that the precedence (and security parameters) of a
|
||||
connection must remain unchanged during the lifetime of the
|
||||
connection. Therefore, for an established TCP connection with
|
||||
precedence, the receipt of a segment with different precedence
|
||||
indicates an error. The connection must be reset [RFC793, pp. 36, 37,
|
||||
40, 66, 67, 71].
|
||||
|
||||
With the advent of DiffServ, intermediate nodes may modify the
|
||||
Differentiated Services Codepoint (DSCP) [RFC2474] of the IP header
|
||||
to indicate the desired Per-hop Behavior (PHB) [RFC2475, RFC2597,
|
||||
RFC2598]. The DSCP includes the three bits formerly known as the
|
||||
precedence field. Because any modification to those three bits will
|
||||
be considered illegal by endpoints that are precedence-aware, they
|
||||
may cause failures in establishing connections, or may cause
|
||||
established connections to be reset.
|
||||
|
||||
2. Terminology
|
||||
|
||||
Segment: the unit of data that TCP sends to IP
|
||||
|
||||
Precedence Field: the three leftmost bits in the TOS octet of an IPv4
|
||||
header. Note that in DiffServ, these three bits may or may not be
|
||||
used to denote the precedence of the IP packet. There is no
|
||||
precedence field in the traffic class octet in IPv6.
|
||||
|
||||
TOS Field: bits 3-6 in the TOS octet of IPv4 header [RFC 1349].
|
||||
|
||||
MBZ field: Must Be Zero
|
||||
|
||||
The structure of the TOS octet is depicted below:
|
||||
|
||||
0 1 2 3 4 5 6 7
|
||||
+-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
| PRECEDENCE | TOS | MBZ |
|
||||
+-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Xiao, et al. Standards Track [Page 2]
|
||||
|
||||
RFC 2873 TCP and the IPv4 Precedence Field June 2000
|
||||
|
||||
|
||||
DS Field: the TOS octet of an IPv4 header is renamed the
|
||||
Differentiated Services (DS) Field by DiffServ.
|
||||
|
||||
The structure of the DS field is depicted below:
|
||||
|
||||
0 1 2 3 4 5 6 7
|
||||
+---+---+---+---+---+---+---+---+
|
||||
| DSCP | CU |
|
||||
+---+---+---+---+---+---+---+---+
|
||||
|
||||
DSCP: Differentiated Service Code Point, the leftmost 6 bits in the
|
||||
DS field.
|
||||
|
||||
CU: currently unused.
|
||||
|
||||
Per-hop Behavior (PHB): a description of the externally observable
|
||||
forwarding treatment applied at a differentiated services-compliant
|
||||
node to a behavior aggregate.
|
||||
|
||||
3. Problem Description
|
||||
|
||||
The manipulation of the DSCP to achieve the desired PHB by DiffServ-
|
||||
capable nodes may conflict with TCP's use of the precedence field.
|
||||
This conflict can potentially cause problems for TCP implementations
|
||||
that conform to RFC 793. First, page 36 of RFC 793 states:
|
||||
|
||||
If the connection is in any non-synchronized state (LISTEN, SYN-
|
||||
SENT, SYN-RECEIVED), and the incoming segment acknowledges
|
||||
something not yet sent (the segment carries an unacceptable ACK),
|
||||
or if an incoming segment has a security level or compartment
|
||||
which does not exactly match the level and compartment requested
|
||||
for the connection, a reset is sent. If our SYN has not been
|
||||
acknowledged and the precedence level of the incoming segment is
|
||||
higher than the precedence level requested then either raise the
|
||||
local precedence level (if allowed by the user and the system) or
|
||||
send a reset; or if the precedence level of the incoming segment
|
||||
is lower than the precedence level requested then continue as if
|
||||
the precedence matched exactly (if the remote TCP cannot raise
|
||||
the precedence level to match ours this will be detected in the
|
||||
next segment it sends, and the connection will be terminated
|
||||
then). If our SYN has been acknowledged (perhaps in this incoming
|
||||
segment) the precedence level of the incoming segment must match
|
||||
the local precedence level exactly, if it does not a reset must
|
||||
be sent.
|
||||
|
||||
This leads to Problem #1: For a precedence-aware TCP module, if
|
||||
during TCP's synchronization process, the precedence fields of the
|
||||
SYN and/or ACK packets are modified by the intermediate nodes,
|
||||
|
||||
|
||||
|
||||
Xiao, et al. Standards Track [Page 3]
|
||||
|
||||
RFC 2873 TCP and the IPv4 Precedence Field June 2000
|
||||
|
||||
|
||||
resulting in the received ACK packet having a different precedence
|
||||
from the precedence picked by this TCP module, the TCP connection
|
||||
cannot be established, even if both modules actually agree on an
|
||||
identical precedence for the connection.
|
||||
|
||||
Then, on page 37, RFC 793 states:
|
||||
|
||||
If the connection is in a synchronized state (ESTABLISHED, FIN-
|
||||
WAIT-1, FIN-WAIT-2, CLOSE-WAIT, CLOSING, LAST-ACK, TIME-WAIT),
|
||||
security level, or compartment, or precedence which does not
|
||||
exactly match the level, and compartment, and precedence
|
||||
requested for the connection, a reset is sent and connection goes
|
||||
to the CLOSED state.
|
||||
|
||||
This leads to Problem #2: For a precedence-aware TCP module, if the
|
||||
precedence field of a received segment from an established TCP
|
||||
connection has been changed en route by the intermediate nodes so as
|
||||
to be different from the precedence specified during the connection
|
||||
setup, the TCP connection will be reset.
|
||||
|
||||
Each of problems #1 and #2 has a mirroring problem. They cause TCP
|
||||
connections that must be reset according to RFC 793 not to be reset.
|
||||
|
||||
Problem #3: A TCP connection may be established between two TCP
|
||||
modules that pick different precedence, because the precedence fields
|
||||
of the SYN and ACK packets are modified by intermediate nodes,
|
||||
resulting in both modules thinking that they are in agreement for the
|
||||
precedence of the connection.
|
||||
|
||||
Problem #4: A TCP connection has been established normally by two
|
||||
TCP modules that pick the same precedence. But in the middle of the
|
||||
data transmission, one of the TCP modules changes the precedence of
|
||||
its segments. According to RFC 793, the TCP connection must be reset.
|
||||
In a DiffServ-capable environment, if the precedence of the segments
|
||||
is altered by intermediate nodes such that it retains the expected
|
||||
value when arriving at the other TCP module, the connection will not
|
||||
be reset.
|
||||
|
||||
4. Proposed Modification to TCP
|
||||
|
||||
The proposed modification to TCP is that TCP must ignore the
|
||||
precedence of all received segments. More specifically:
|
||||
|
||||
(1) In TCP's synchronization process, the TCP modules at both ends
|
||||
must ignore the precedence fields of the SYN and SYN ACK packets. The
|
||||
TCP connection will be established if all the conditions specified by
|
||||
RFC 793 are satisfied except the precedence of the connection.
|
||||
|
||||
|
||||
|
||||
|
||||
Xiao, et al. Standards Track [Page 4]
|
||||
|
||||
RFC 2873 TCP and the IPv4 Precedence Field June 2000
|
||||
|
||||
|
||||
(2) After a connection is established, each end sends segments with
|
||||
its desired precedence. The precedence picked by one end of the TCP
|
||||
connection may be the same or may be different from the precedence
|
||||
picked by the other end (because precedence is ignored during
|
||||
connection setup time). The precedence fields may be changed by the
|
||||
intermediate nodes too. In either case, the precedence of the
|
||||
received packets will be ignored by the other end. The TCP connection
|
||||
will not be reset in either case.
|
||||
|
||||
Problems #1 and #2 are solved by this proposed modification. Problems
|
||||
#3 and #4 become non-issues because TCP must ignore the precedence.
|
||||
In a DiffServ-capable environment, the two cases described in
|
||||
problems #3 and #4 should be allowed.
|
||||
|
||||
5. Security Considerations
|
||||
|
||||
A TCP implementation that terminates a connection upon receipt of any
|
||||
segment with an incorrect precedence field, regardless of the
|
||||
correctness of the sequence numbers in the segment's header, poses a
|
||||
serious denial-of-service threat, as all an attacker must do to
|
||||
terminate a connection is guess the port numbers and then send two
|
||||
segments with different precedence values; one of them is certain to
|
||||
terminate the connection. Accordingly, the change to TCP processing
|
||||
proposed in this memo would yield a significant gain in terms of that
|
||||
TCP implementation's resilience.
|
||||
|
||||
On the other hand, the stricter processing rules of RFC 793 in
|
||||
principle make TCP spoofing attacks more difficult, as the attacker
|
||||
must not only guess the victim TCP's initial sequence number, but
|
||||
also its precedence setting.
|
||||
|
||||
Finally, the security issues of each PHB group are addressed in the
|
||||
PHB group's specification [RFC2597, RFC2598].
|
||||
|
||||
6. Acknowledgments
|
||||
|
||||
Our thanks to Al Smith for his careful review and comments.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Xiao, et al. Standards Track [Page 5]
|
||||
|
||||
RFC 2873 TCP and the IPv4 Precedence Field June 2000
|
||||
|
||||
|
||||
7. References
|
||||
|
||||
[RFC791] Postel, J., "Internet Protocol", STD 5, RFC 791, September
|
||||
1981.
|
||||
|
||||
[RFC793] Postel, J., "Transmission Control Protocol", STD 7, RFC
|
||||
793, September 1981.
|
||||
|
||||
[RFC1349] Almquist, P., "Type of Service in the Internet Protocol
|
||||
Suite", RFC 1349, July 1992.
|
||||
|
||||
[RFC2460] Deering, S. and R. Hinden, "Internet Protocol, Version 6
|
||||
(IPv6) Specification", RFC 2460, December 1998.
|
||||
|
||||
[RFC2474] Nichols, K., Blake, S., Baker, F. and D. Black, "Definition
|
||||
of the Differentiated Services Field (DS Field) in the IPv4
|
||||
and IPv6 Headers", RFC 2474, December 1998.
|
||||
|
||||
[RFC2475] Blake, S., Black, D., Carlson, M., Davies, E., Wang, Z. and
|
||||
W. Weiss, "An Architecture for Differentiated Services",
|
||||
RFC 2475, December 1998.
|
||||
|
||||
[RFC2597] Heinanen, J., Baker, F., Weiss, W. and J. Wroclawski,
|
||||
"Assured Forwarding PHB Group", RFC 2587, June 1999.
|
||||
|
||||
[RFC2598] Jacobson, V., Nichols, K. and K. Poduri, "An Expedited
|
||||
Forwarding PHB", RFC 2598, June 1999.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Xiao, et al. Standards Track [Page 6]
|
||||
|
||||
RFC 2873 TCP and the IPv4 Precedence Field June 2000
|
||||
|
||||
|
||||
8. Authors' Addresses
|
||||
|
||||
Xipeng Xiao
|
||||
Global Crossing
|
||||
141 Caspian Court
|
||||
Sunnyvale, CA 94089
|
||||
USA
|
||||
|
||||
Phone: +1 408-543-4801
|
||||
EMail: xipeng@gblx.net
|
||||
|
||||
|
||||
Alan Hannan
|
||||
iVMG, Inc.
|
||||
112 Falkirk Court
|
||||
Sunnyvale, CA 94087
|
||||
USA
|
||||
|
||||
Phone: +1 408-749-7084
|
||||
EMail: alan@ivmg.net
|
||||
|
||||
|
||||
Edward Crabbe
|
||||
Exodus Communications
|
||||
2650 San Tomas Expressway
|
||||
Santa Clara, CA 95051
|
||||
USA
|
||||
|
||||
Phone: +1 408-346-1544
|
||||
EMail: edc@explosive.net
|
||||
|
||||
|
||||
Vern Paxson
|
||||
ACIRI/ICSI
|
||||
1947 Center Street
|
||||
Suite 600
|
||||
Berkeley, CA 94704-1198
|
||||
USA
|
||||
|
||||
Phone: +1 510-666-2882
|
||||
EMail: vern@aciri.org
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Xiao, et al. Standards Track [Page 7]
|
||||
|
||||
RFC 2873 TCP and the IPv4 Precedence Field June 2000
|
||||
|
||||
|
||||
9. Full Copyright Statement
|
||||
|
||||
Copyright (C) The Internet Society (2000). All Rights Reserved.
|
||||
|
||||
This document and translations of it may be copied and furnished to
|
||||
others, and derivative works that comment on or otherwise explain it
|
||||
or assist in its implementation may be prepared, copied, published
|
||||
and distributed, in whole or in part, without restriction of any
|
||||
kind, provided that the above copyright notice and this paragraph are
|
||||
included on all such copies and derivative works. However, this
|
||||
document itself may not be modified in any way, such as by removing
|
||||
the copyright notice or references to the Internet Society or other
|
||||
Internet organizations, except as needed for the purpose of
|
||||
developing Internet standards in which case the procedures for
|
||||
copyrights defined in the Internet Standards process must be
|
||||
followed, or as required to translate it into languages other than
|
||||
English.
|
||||
|
||||
The limited permissions granted above are perpetual and will not be
|
||||
revoked by the Internet Society or its successors or assigns.
|
||||
|
||||
This document and the information contained herein is provided on an
|
||||
"AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
|
||||
TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
|
||||
BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
|
||||
HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
Acknowledgement
|
||||
|
||||
Funding for the RFC Editor function is currently provided by the
|
||||
Internet Society.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Xiao, et al. Standards Track [Page 8]
|
||||
|
||||
Reference in New Issue
Block a user