게임서버로 알아보는 UDP와 TCP 차이와 사용상황

김형진·2023년 11월 19일
0


TCP란?

TCP, 전송 제어 프로토콜(Transmission Control Protocol)은 주요 인터넷 프로토콜 중 하나이다. TCP는 인터넷에서 데이터를 신뢰성 있고 순차적으로 전송하는 데 사용된다. TCP는 데이터가 손실되거나 순서가 바뀌지 않도록 보장하며, 데이터 전송의 신뢰성과 흐름 제어를 제공한다.

🧩 TCP 헤더 구성

TCP segment의 헤드는 다음과 같은 필드들로 구성된다.

소스 포트(Source Port) 와 목적지 포트(Destination Port): 이 두 필드는 TCP 연결의 시작과 끝 지점을 식별한다.
순차 번호(Sequence Number): 데이터 스트림 내에서 바이트의 순차적 위치를 식별한다.
확인 응답 번호(Acknowledgment Number): 수신자가 다음에 기대하는 순차 번호를 나타낸다.
데이터 오프셋(Data Offset): TCP 헤더의 길이를 나타내며, 데이터가 시작되는 위치를 알려준다.
예약된 필드(Reserved Field): 현재 사용되지 않으며, 미래의 사용을 위해 예약되어 있다.
플래그(Flags): URG, ACK, PSH, RST, SYN, FIN 등 다양한 제어 플래그를 포함한다. 이들은 연결 설정, 관리, 종료 등을 제어하는 데 사용된다.
윈도우 크기(Window Size): 수신 버퍼의 크기를 나타내며, 전송 속도 조절에 사용된다.
체크섬(Checksum): 헤더와 데이터의 오류를 감지하는 데 사용된다.
긴급 포인터(Urgent Pointer): URG 플래그가 설정된 경우, 긴급 데이터의 끝을 가리킨다.
옵션(Options): 필요에 따라 추가 기능을 제공할 수 있는 선택적 필드이다.

TCP 는 데이터 송,수신 간 흐름을 제어하고, 그럼으로써 데이터의 안정적인 교환을 보장하고자 하기 때문에 TCP 규칙을 적용하기 위한 데이터를 담는 필드들을 많이 가지고 있으며, 때문에 비교적 복잡한 구조의 헤더를 갖는다.


UDP란?

UDP, 사용자 데이터그램 프로토콜(User Datagram Protocol)도 인터넷에서의 핵심 프로토콜 중 하나이다. UDP는 TCP와 달리 연결이 없는 프로토콜로, 데이터를 빠르게 전송하지만 신뢰성이나 순서 보장은 하지 않는다.

🧩 UDP 헤더 구성

UDP는 TCP와 비교해봤을 때 훨씬 간단한 헤더 구조를 갖는다. 출발지, 목적지, 체크섬과 같이 데이터 전송에 필수적인 부분만 있고, 다른 필드는 존재하지 않는다. 이는 UDP에는 TCP처럼 복잡한 규칙이 적용되지 않기 때문이다. 이는 데이터의 안정적인 송수신을 보장하지는 않겠다는 뜻이기도 하다.


게임서버에서의 프로토콜 사용

필자는 오버워치를 즐겨했기에, 오버워치를 예로 들어 설명하고자 한다.
오버워치와 같은 FPS 게임은 한 게임 내 참여자들 간의 동기화가 굉장히 중요하다. 또한, 캐릭터의 움직임과 같이 인게임 상황에 빠르게 반영되어야 하는 요청같은 경우 client와 server 간 데이터 송수신이 빨라야 한다.

이와 같은 게임 서버의 특성 때문에, 게임서버에서는 주로 TCP가 UDP를 사용한다. 구체적인 이유는 다음과 같다.

UDP 사용 이유 💡

1. 낮은 오버헤드: UDP는 TCP에 비해 헤더의 크기가 작고, 연결 설정 과정이 없다. 이로 인해 데이터를 더 빠르게 전송할 수 있다.

2. 비연결성: UDP는 비연결 지향 프로토콜로, 송수신 간 연결을 설정할 필요가 없다. 이는 네트워크 지연을 줄이고, 빠른 데이터 전송을 가능하게 한다.

3. 유연성: UDP는 패킷 손실이 발생하더라도 계속해서 데이터를 전송한다. 게임에서는 일부 데이터(예: 플레이어의 위치 업데이트)가 손실되더라도 게임 플레이에 큰 영향을 미치지 않으며, 오히려 지연 없이 계속 데이터를 받는 것이 더 중요할 수 있다.

4. 멀티캐스팅: UDP는 멀티캐스트와 브로드캐스트를 지원하여, 한 번에 여러 클라이언트에게 데이터를 전송할 수 있다. 이는 멀티플레이어 게임 환경에서 유용하다.

만약 TCP를 사용한다면? 🤔

반대로, UDP를 사용하지 않고 TCP를 사용하면 어떤 문제가 발생하게 될까? 발생할 수 있는 대표적인 문제들을 생각해보면 다음과 같을 것이다.

1. 지연 (Latency): TCP는 데이터의 신뢰성과 순서를 보장하기 위해 핸드셰이크 과정과 데이터 재전송 메커니즘을 사용한다. 이러한 과정들이 실시간 통신에서는 지연을 발생시킬 수 있다.

2. 네트워크 혼잡 및 지연의 증가: TCP는 네트워크 혼잡을 감지하면 데이터 전송 속도를 자동으로 줄인다. 이는 통신 중에 발생하는 지연을 더욱 심화시킬 수 있다.

3. 패킷 손실 시 높은 지연: TCP에서는 패킷 손실이 감지되면 해당 패킷을 재전송. 재전송 과정은 실시간 상호작용에서 중요한 타이밍을 놓치게 할 수 있다.

4. 데이터 순서 보장으로 인한 지연: TCP는 전송된 데이터의 순서를 보장한다. 만약 일부 데이터가 중간에 손실되면, TCP는 누락된 데이터가 도착할 때까지 다음 데이터의 처리를 지연시킨다.

즉, TCP의 안정적인 데이터 전송 보장이, 빠른 반응속도와 동기화를 요하는 게임상황에서는 오히려 유저들의 사용감을 해칠 수 있다는 것이다.


게임서버에서 TCP 프로토콜은 사용되지 않을까?

꼭 UDP만을 사용하는 것은 아니다.

UDP는 TCP와 달리 데이터의 순서 보장이나 신뢰성 있는 전송을 제공하지 않는다. 따라서, 많은 게임 서버들은 게임의 특성과 요구 사항에 따라 UDP와 TCP를 적절히 혼합하여 사용한다. 예를 들어, 게임 플레이에 중요한 데이터(예: 점수, 게임 상태)는 TCP를 사용해 전송하고, 실시간 상호작용이 더 중요한 데이터(예: 플레이어의 움직임)는 UDP를 사용해 전송하는 방식이다.

profile
히히

0개의 댓글