1. TCP란?

TCP(Transmission Control Protocol, 전송 제어 프로토콜)는 전송계층에서 신뢰할 수 있는 정확한 통신을 제공하는 연결형 통신 프로토콜이다.

TCP로 전송할 때 붙이는 헤더를 TCP 헤더라고 하고, 이 TCP 헤더가 붙은 데이터를 세그먼트(segment)라고 한다.

Untitled

연결형 통신은 데이터를 전송하기전에 먼저 연결(connection)이라는 가상의 독점 통신로를 확보해야 된다. 이 연결을 확립한 후에 데이터 전송이 가능하다. 연결은 TCP 헤더에 있는 ⑦ 코드비트를 사용하여 진행한다.

Untitled

2. 3-way 핸드셰이크란?

연결(connection)은 코드비트의 SYN(연결 요청)과 ACK(확인 응답)를 사용하여 확립할 수 있다. 신뢰할 수 있는 연결을 하려면 데이터를 전송하기 전에 패킷을 교환하는데, 아래처럼 세 번 확인한다.

Untitled

① 통신을 하려면 컴퓨터 2에게 허가를 받아야 하므로, 먼저 컴퓨터 1에서 컴퓨터 2로 연결 확립 허가를 받기 위한 요청(SYN)을 보낸다.

Untitled

② 컴퓨터 2는 컴퓨터 1이 보낸 요청을 받은 후에 허가한다는 응답을 회신하기 위해 연결 확립 응답(ACK)을 보낸다. 동시에 컴퓨터 2도 컴퓨터 1에게 데이터 전송 허가를 받기 위해 연결 확립 요청(SYN)을 보낸다.

Untitled

③ 컴퓨터 2의 요청을 받은 컴퓨터 1은 컴퓨터 2로 허가한다는 응답으로 연결 확립 응답(ACK)을 보낸다.

이처럼 데이터를 보내기 전에 연결을 확립하기 위해 패킷을 세 번 교환하는 것을 3-way 핸드셰이크(three-way handshake)라고 한다.

Untitled

데이터를 전송한 후에는 연결을 끊기 위한 요청을 해야된다. 연결을 끊을 때는 코드 비트에서 FIN(연결 종료)과 ACK(확인 응답)를 사용한다.

Untitled