Some of the specifications for TCP are not at all clear to everyone. The following things are some summary notes to the RFC.
Flow Control: A window is returned with every ACK. This tells how much the sender can send until another ACK has to be sent by the receiver. This is actually the highes sequence number that the receiver is going to accept.
TCP takes a stream and makes a segment out of it.
Reliability is achieved via the sequence numbers.
Options
MSS: sender shows what he accepts.
PSH is used such that the queuinf of TCP can be overridden and certain information is immediately transmitted.
ECN and CWR used for flow control:
ECN: Explicit Congestion Control added later to TCP. RFC 3168.
CWR: Congestion Window Reduced
A problem is that some firewalls send a RST when getting undefined TCP fields. WRONG! As in old implementations ECN, CWR were undefined. Nowadays not any more! (RFC 3360)