The Transmission Control Protocol (TCP) is intended for use as a highly reliable host-to-host protocol between hosts in packet-switched computer communication networks, and in interconnected systems of such networks.
TCP is a connection-oriented, end-to-end reliable protocol designed to fit into a layered hierarchy of protocols which support multi-network applications. The TCP provides for reliable inter-process communication between pairs of processes in host computers attached to distinct but interconnected computer communication networks. Very few assumptions are made as to the reliability of the communication protocols below the TCP layer. TCP assumes it can obtain a simple, potentially unreliable datagram service from the lower level protocols. In principle, the TCP should be able to operate above a wide spectrum of communication systems ranging from hard-wired connections to packet-switched or circuit-switched networks.
TCP is based on concepts first described by Cerf and Kahn in . The TCP fits into a layered protocol architecture just above a basic Internet Protocol  which provides a way for the TCP to send and receive variable-length segments of information enclosed in internet datagram "envelopes". The internet datagram provides a means for addressing source and destination TCPs in different networks. The internet protocol also deals with any fragmentation or reassembly of the TCP segments required to achieve transport and delivery through multiple networks and interconnecting gateways. The internet protocol also carries information on the precedence, security classification and compartmentation of the TCP segments, so this information can be communicated end-to-end across multiple networks.
The TCP is intended to provide a reliable process-to-process communication service in a multinetwork environment. The TCP is intended to be a host-to-host protocol in common use in multiple networks.
|Field name||Field type||Field size||Field description|
|source_port||Integer||16||The source port number|
|destination_port||Integer||16||The destination port number|
|sequence_no||Integer||32||The sequence number of the first data octet in this segment (except when SYN is present). If SYN is present the sequence number is the initial sequence number (ISN) and the first data octet is ISN+1.|
|ack_no||Integer||32||If the ACK control bit is set this field contains the value of the next sequence number the sender of the segment is expecting to receive. Once a connection is established this is always sent.|
|doff||Integer||4||The number of 32 bit words in the TCP Header. This indicates where the data begins. The TCP header (even one including options) is an integral number of 32 bits long.|
|res1||Integer||4||Reserved for future use. Must be zero.|
|flags||Integer||8||fin, syn, rst, psh, ack, urg, res2|
|window||Integer||16||The number of data octets beginning with the one indicated in the acknowledgment field which the sender of this segment is willing to accept.|
|check||Integer||16||The checksum field is the 16 bit one's complement of the one's complement sum of all 16 bit words in the header and text. (See RFC for more info.)|
|urg_ptr||Integer||16||This field communicates the current value of the urgent pointer as a positive offset from the sequence number in this segment. The urgent pointer points to the sequence number of the octet following the urgent data. This field is only be interpreted in segments with the URG control bit set.|
|payload||Binary Large Object||-||Payload data.|