본문 바로가기

게임서버(Game Server)

[게임서버] OSI 7계층 및 3-way, 4-way

 

 

OSI 7계층과 각 계층의 역할

특징이 다른 여러 호스트를 서로 연결해서 통신하려면 연결 방식을 표준화해야 한다. 국제 표준화 단체인 ISO(International Standard Organization)에서는 OSI(Open System Interconnection) 7계층 모델은 제안하여, 네트워크에 연결된 시스템이 갖추어야 할 기능을 상세히 정의하고 있다. [1]

OSI 7계층[3]

 

TCP 3-way HandShake

3-way HandShake [2]

TCP는 데이터를 전송하기 전에 3-way HandShake 방식을 사용해서 연결을 시도한다.

 

1. Clinet에서 SYN(Synchronize sequence numbers)를 보내며 연결 설정을 요구한다.

2. 그 후 Server에서 SYN 비트에 대한 ACK(acknowledgment)를 보내며 연결을 수락한다.

3. Server가 보낸 연결 수락 세그먼트에 대한 ACK를 보내며 전송 데이터가 있으며 바로 데이터를 전송한다. 

 

SYN_SENT: Client(로컬)에서 Server(리모트)에게 연결 요청 SYN 플래그를 보낸 상태

SYN_RECV: 요청을 수락하는 ACK와 SYN 플래그를 보내고 다시 ACK를 받기를 기다리는 상태

ESTABLISHED: 서로 연결이 된 상태

TCP 4-way HandShake

4-way handshake [2]

3-way HandShake가 연결에 대한 과정이라면 4-way HandShake는 해제에 관한 과정이다. 연결 해제는 양쪽 프로세스의 동의하에 진해되기 때문에 연결 해제 세그먼트를 받은 프로세스가 FIN 플래그로 응답할 때까지 연결은 유지된다. [1]

 

1. Clinet 쪽이 먼저 연결을 해제(Close)하고자 FIN 플래그를 전송하고 기다린다(FIN_WAIT1).

2. Server는(CLOSE_WAIT)으로 상태가 바뀌며 FIN 플래그에 대한 ACK를 보내며 Clinet에게 Close를 요청한다.

3. ACK를 받은 Clinet은(FIN_WAIT2)로 변경된다.

4. Server는 종료 프로세스를 진행하고 FIN을 Client에게 보내(LAST_ACK) 상태로 바뀐다.

5. FIN을 받은 Client는 ACK를 서버에 다시 전송하고(TIME_WAIT) 상태로 바뀌며 일정 시간이 지나면 (Close)가 되며 ACK를 받은 서버도 (Close)가 된다. [4]

 

FIN_WAIT1: 최초 보낸 FIN에 대한 ACK를 기다리고 있는 상태

CLOSE_WAIT: FIN 플래그를 받고 FIN에 대한 ACK를 보낸 상태

FIN_WAIT2:  SERVER의 FIN 플래그를 기다리고 있는 상태

LAST_ACK: 보낸 FIN 플래그에 대해 ACK를 기다리고 있는 상태

TIME_WAIT:  지연 패킷이나 원격의 연결이 닫혔는지 확인하기 위해 대기하는 상태

CLOSE: 연결 종료

 

후기

OSI 7계층을 계속 까먹어서 정리하였고 3-way와 4-way의 개념을 다시 간단하게 확립했다.

 

출처 및 레퍼런스

[1] [박기현][쉽게 배우는 데이터 통신과 컴퓨터 네트워크]: 한빛아카데미

[2] [SlidePlayer]https://slideplayer.com/slide/7814134/

[3] [Wiki] https://ko.wikipedia.org/wiki/OSI_%EB%AA%A8%ED%98%95

[4] [Kakao Tech] https://tech.kakao.com/2016/04/21/closewait-timewait/