TCP(Transmission Control Protocol, 전송 제어 프로토콜)는 전송계층에서 신뢰할 수 있는 정확한 통신을 제공하는 연결형 통신 프로토콜이다.
TCP로 전송할 때 붙이는 헤더를 TCP 헤더라고 하고, 이 TCP 헤더가 붙은 데이터를 세그먼트(segment)라고 한다.
연결형 통신은 데이터를 전송하기전에 먼저 연결(connection)이라는 가상의 독점 통신로를 확보해야 된다. 이 연결을 확립한 후에 데이터 전송이 가능하다. 연결은 TCP 헤더에 있는 ⑦ 코드비트를 사용하여 진행한다.
연결(connection)은 코드비트의 SYN(연결 요청)과 ACK(확인 응답)를 사용하여 확립할 수 있다. 신뢰할 수 있는 연결을 하려면 데이터를 전송하기 전에 패킷을 교환하는데, 아래처럼 세 번 확인한다.
① 통신을 하려면 컴퓨터 2에게 허가를 받아야 하므로, 먼저 컴퓨터 1에서 컴퓨터 2로 연결 확립 허가를 받기 위한 요청(SYN)을 보낸다.
② 컴퓨터 2는 컴퓨터 1이 보낸 요청을 받은 후에 허가한다는 응답을 회신하기 위해 연결 확립 응답(ACK)을 보낸다. 동시에 컴퓨터 2도 컴퓨터 1에게 데이터 전송 허가를 받기 위해 연결 확립 요청(SYN)을 보낸다.
③ 컴퓨터 2의 요청을 받은 컴퓨터 1은 컴퓨터 2로 허가한다는 응답으로 연결 확립 응답(ACK)을 보낸다.
이처럼 데이터를 보내기 전에 연결을 확립하기 위해 패킷을 세 번 교환하는 것을 3-way 핸드셰이크(three-way handshake)라고 한다.
데이터를 전송한 후에는 연결을 끊기 위한 요청을 해야된다. 연결을 끊을 때는 코드 비트에서 FIN(연결 종료)과 ACK(확인 응답)를 사용한다.