Section 2. Introduction

RFC 793 contains a discussion of the TCP design goals and provides
   examples of its operation, including examples of connection
   establishment, connection termination, and packet retransmission to
   repair losses.
   This document describes the basic functionality expected in modern
   TCP implementations and replaces the protocol specification in RFC
   793.  It does not replicate or attempt to update the introduction and
   philosophy content in Sections 1 and 2 of RFC 793.  Other documents
   are referenced to provide explanations of the theory of operation,
   rationale, and detailed discussion of design decisions.  This
   document only focuses on the normative behavior of the protocol.
   The "TCP Roadmap" [49] provides a more extensive guide to the RFCs
   that define TCP and describe various important algorithms.  The TCP
   Roadmap contains sections on strongly encouraged enhancements that
   improve performance and other aspects of TCP beyond the basic
   operation specified in this document.  As one example, implementing
   congestion control (e.g., [8]) is a TCP requirement, but it is a
   complex topic on its own and not described in detail in this
   document, as there are many options and possibilities that do not
   impact basic interoperability.  Similarly, most TCP implementations
   today include the high-performance extensions in [47], but these are
   not strictly required or discussed in this document.  Multipath
   considerations for TCP are also specified separately in [59].
   A list of changes from RFC 793 is contained in Section 5.
2.1.  Requirements Language
   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
   "OPTIONAL" in this document are to be interpreted as described in
   BCP 14 [3] [12] when, and only when, they appear in all capitals, as
   shown here.
   Each use of RFC 2119 keywords in the document is individually labeled
   and referenced in Appendix B, which summarizes implementation
   requirements.
   Sentences using "MUST" are labeled as "MUST-X" with X being a numeric
   identifier enabling the requirement to be located easily when
   referenced from Appendix B.
   Similarly, sentences using "SHOULD" are labeled with "SHLD-X", "MAY"
   with "MAY-X", and "RECOMMENDED" with "REC-X".
   For the purposes of this labeling, "SHOULD NOT" and "MUST NOT" are
   labeled the same as "SHOULD" and "MUST" instances.
2.2.  Key TCP Concepts
   TCP provides a reliable, in-order, byte-stream service to
   applications.
   The application byte-stream is conveyed over the network via TCP
   segments, with each TCP segment sent as an Internet Protocol (IP)
   datagram.
   TCP reliability consists of detecting packet losses (via sequence
   numbers) and errors (via per-segment checksums), as well as
   correction via retransmission.
   TCP supports unicast delivery of data.  There are anycast
   applications that can successfully use TCP without modifications,
   though there is some risk of instability due to changes of lower-
   layer forwarding behavior [46].
   TCP is connection oriented, though it does not inherently include a
   liveness detection capability.
   Data flow is supported bidirectionally over TCP connections, though
   applications are free to send data only unidirectionally, if they so
   choose.
   TCP uses port numbers to identify application services and to
   multiplex distinct flows between hosts.
   A more detailed description of TCP features compared to other
   transport protocols can be found in Section 3.1 of [52].  Further
   description of the motivations for developing TCP and its role in the
   Internet protocol stack can be found in Section 2 of [16] and earlier
   versions of the TCP specification.