TCP는 애플리케이션 프로세스가 데이터를 다른 프로세스에게 보내기 전에, 두 프로세스가 서로 핸드셰이크를 먼저 햐여 하므로 연결지향형(oconnection-oriented) 이다.
TCP 연결은 회선 교환 네트워크에서와 같은 종단 간의 TDM(Time Division Multiplexing) 이나, FDM(Frequency Division Multiplexing)이 아니다.
TCP는 전이중 서비스(full-duplex service) 를 제공한다. 또한 TCP연결은 항상 단일 송신자와 단일 수신자 사이의 점대점(point-to-point) 이다. TCP에서 두 호스트 간 3개의 세그먼트가 보내지기 때문에 세 방향 핸드셰이크라고 부르기도 한다.
MSS: 최대 세그먼트 크기(maximum segment size)
TCP 세그먼트: TCP 헤드와 클라이언트 데이터를 하나로 짝지어 구성함
TCP 헤더는 일반적으로 20바이트다.(UDP보다 12바이트 크다). 헤더는 다음과 같은 항목으로 구성된다.
호스트 B가 호스트 A에게 데이터를 전송할 때, 호스트 A가 자신의 세그먼트에 삽입하는 확인응답 번호는 호스트 A가 호스트 B로부터 기대하는 다음 바이트의 순서다.
불필요한 재전송을 막기 위해 타임아웃 설정을 위한 RTT 예측은 매우 중요하다. 이를 위한 대표적인 예측치 계산 방법은, 직전 RTT 예측값과 직전 RTT 실제값을 가중 평균하여 구한다. 이때 가중치는 임의로 설정한다. 이를 지수적 가중 이동 평균(exponential weighted moving average, EWMA) 라고 부른다. 이를 활용하여 DevRTT도 계산하고(직전 DevRTT와 RTT 예측 오차의 EWMA), TimeoutInterval = EstimatedRTT+4*DevRTT로 계산한다.
TCP는 송신자가 수신자의 버펄을 오버플로시키는 것을 방지하기 위해 애플리케이션에게 흐름 제어 서비스(flow-control service) 를 제공한다. 이는 혼잡 제어(congestion control) 로 알려져 있다. TCP는 송신자가 수신 윈도라는 변수를 유지하여 흐름 제어를 제공한다. 수신 윈도는 수신 측에서 가용한 버퍼 공간이 얼마나 되는지를 송신자에게 알려주는데 사용된다.
1단계: 먼저 클라이언트 측 TCP 는 서버 TCP에게 특별한 TCP 세그먼트를 송신한다.
2단계: TCP SYN 세그먼트르 포함하는 IP 데이터그램이 서버 호스트에 도착하면, 서버는 TCP SYN 세그먼트를 추출한다. 그리고 클라이언트 TCP로 연결 승인 세그먼트를 송신한다.
3단계: 연결 승인 세그먼트를 수신하면, 클라이언트는 연결에 버퍼와 변수를 할당한다. 그 다음에 클라이언트 호스트는 서버로 또 다른 세그먼트를 송신한다.
nmap으로 포트 6789를 목적지 포트로 하는 TCP SYN 세그먼트를 보내면 가능한 세 가지 결과가 있다.
혼잡의 원인과 비용에 관한 몇 가지 사실은 다음과 같다.
혼잡 제어에 대한 접근 법은 크게 다음과 같이 구분할 수 있다.
cwnd): TCP 송신자가 네트워크로 트래픽을 전송할 수 있는 속도에 제약을 가한다.cwnd/RTT바이트/초다. cwnd의 값을 조절하여, 송신자는 링크에 데이터를 전송하는 속도를 조절할 수 있다.혼잡 제어를 위한 TCP는 다음과 같은 처리 원칙을 갖는다.
이에 따른 TCP 혼잡 제어 알고리즘은 아래에 제시되어 있다.
ECN 비트의 한 설정은 라우터가 정체를 겪고 있음을 나타내기 위해 라우터에서 사용된다. 그런 다음 이 혼잡 표시는 표시된 IP 데이터그램에서 목적지 호스트로 전달된 후, 송신 호스트에게 알려진다.
TCP 베가스에서는 모든 확인응답된 패킷에 대한 출발지에서 목적지까지의 경로의 RTT를 측정하고 이를 이용해 패킷 손실 이전에 더 일찍 전송 속도를 줄인다. 즉 혼잡 시작을 사전에 감지한다.
TCP 베가스는 TCP 송신자가 파이프를 가득 채우되 그 이상으로 채우지 않도록 해야한다는 직관적인 원칙하에 동작한다.

애플리케이션 설계자가 애플리케이션 계층에 항상 '자신의 프로토콜을 확장'할 수 있으며, 이는 QUIC에서 취한 접근방식이다. QUIC의 주요 기능은 다음과 같다.
다시한번 말하지만 QUIC는 두 종단 사이에 신뢰적이고 혼잡 제어된 데이터 전송을 제공하는 애플리케이션 계층 프로토콜이라는 점을 다시 강조한다.