IT 지식/네트워크(Network)

컴퓨터 네트워크 - TCP Three & Four way handshaking

나아가는중 2021. 12. 6. 21:37
반응형

TCP Connection Management

TCP 송신 측과 수신 측은 데이터 세그먼트들을 주고받기 전에 연결을 맺는다. 이때 sequence number, buffer size, flow control info(RcvWindow 등) 등의 변수들이 초기화돼서 설정이 된다.

 

서버(수신 측)는 특정 포트번호를 주어 소켓을 생성하면 welcomeSocket을 가지고 클라이언트(송신 측) 요청에 대기한다. 클라이언트는 소켓을 생성할 때 연결한 서버의 ID(Domain name), 포트 번호를 주면 바로 서버의 welcomSocket으로 three-way handshaking(연결)을 시작한다. 서버는 클라이언트로부터 요청이 오면 이에 대응하는 한 개의 소켓(connection socket)을 생성하여 클라이언트와 연결한다. 연결이 되면 데이터 전송은 클라이언트 소켓과 서버의 연결 소켓(connection socket) 간에 직접 이루어진다(Direct virtual pipe).

 

TCP 연결마다 서버는 새로운 클라이언트 연결마다 소켓이 생성되어 동일한 포트번호를 가진 복수개의 소켓이 만들어진다. 서버에는 동일한 포트번호의 복수개의 소켓 중 어느 클라이언트에서부터 만들어졌는지에 대한 정보를 같이 지칭해서 구분해야 한다. 그렇기 위해 4 tuple(클라이언트 IP 주소, 클라이언트 포트 번호, 서버 IP 주소, 서버 포트 번호)이 사용된다.

 

// Client & Sever 연결 - JAVA
client : Socket clientSocket = new Socket("hostname", "port number");
server : Socket connectionSocket = welcomeSocket.accept();

 

Three way handshaking (3-way handshaking)

Three-way handshaking은 TCP 연결을 맺는 과정이다.

 

Step 1 클라이언트 -> 서버 (SYN) : 클라이언트는 SYN bit가 1로 설정된 TCP SYN 세그먼트를 서버로 보낸다. 이때 클라이언트 초기 sequence number를 지칭해서 보내며, 데이터는 포함하지 않는다. 전송후에 클라이언트는 SYNACK 응답을 기다리는 SYN_SENT 상태가 된다.

 

Step 2 서버 -> 클라이언트 (SYNACK) : 서버에서는 SYN 세그먼트 요청을 받고 TCP 연결을 수락하면 TCP 버퍼와 변수들을 설정해준다. 응답으로 SYNACK(SYN bit 1, ACK bit 1) 세그먼트를 클라이언트에 보낸다. 이 때 서버의 sequnce number로 서버의 초기 sequnce number와 ACK로 클라이언트의 초기 sequence number + 1을 지칭해서 보낸다.

 

Step 3 클라이언트 -> 서버 (ACK) : 클라이언트는 SYNACK 세그먼트를 수신하면 응답으로 데이터를 포함하는 ACK 세그먼트를 보낸다. SYN bit = 0이며 ACK bit = 1이다.

Four way handshaking (4-way handshaking) 

Four-way handshaking은 TCP 연결 끊는 과정이다.

 

Step 1 클라이언트 -> 서버 (FIN) : 클라이언트는 연결을 끊기 위해 TCP segement 해더의 FIN bit를 1로 설정한 FIN control 세그먼트를 서버로 보낸다.

 

Step 2 서버 -> 클라이언트 (ACK, FIN) : 서버는 FIN 세그먼트를 수신하면 응답으로 ACK를 전송하고 애플리케이션으로 종료하라는 명령을 보낸다. 애플리케이션이 종료되면 클라이언트로 FIN 세그먼트를 전송한다.

 

Step 3 클라이언트 -> 서버 (ACK) :  클라이언트는 FIN 세그먼트를 수신하면 응답으로 ACK를 전송한다. 이후 timed wait 상태로 변경되어 해당 연결에서 사용되었던 모든 데이터가 소멸될 때까지 왕복시간의 2배 (Double Maximum Segement Life, MSL)만큼 대기한다.

 

Step 4 연결 종료 : 서버는 ACK 세그먼트 수신 시 연결을 종료한다.

반응형