KoreanFoodie's Study

[C++ 게임 서버] 3-4. TCP vs UDP 본문

Game Dev/Game Server

[C++ 게임 서버] 3-4. TCP vs UDP

GoldGiver 2023. 9. 21. 20:13

Rookiss 님의 '[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버' 를 들으며 배운 내용을 정리하고 있습니다. 관심이 있으신 분은 꼭 한 번 들어보시기를 추천합니다!

[C++ 게임 서버] 3-4. TCP vs UDP

핵심 :

1. TCP 와 UDP 는 네트워크 프로토콜 중, 트랜스포트 레이어에 해당하는 규칙이다.

2. TCP 는 안전하며(데이터 유실이 없음), 데이터의 순서가 보장된다. 하지만 각 패킷의 경계(Boundary)가 없어 데이터가 합쳐지거나 쪼개질 수 있으며, UDP 에 비해 상대적으로 느리다.

3. UDP 는 빠르며(일단 데이터를 보내고 봄), 패킷의 경계가 있어 데이터가 쪼개지거나 합쳐지지 않는다. 하지만 패킷 전송의 순서가 보장되지 않으며, 데이터가 유실될 위험성이 있다.

이번 글에서는 간단히 TCP 와 UDP 의 차이에 대해 알아보도록 하자.

네트워크 공부를 깊게 하지 않았어도, 오며가며 그 둘의 차이에 대해서는 알게 되는데, 이번 글에서는 그에 대해 깔끔하게 정리하고 넘어가려고 한다.

 

우리가 이전에 Hello World 를 소켓을 통해 보냈는데, 사실 네트워크는 여러 Layer 가 있다. 일단 TCP/UDP 는 그 중 트랜스포트에 해당하는 규칙이라는 것을 알아두고 넘어가자.

 

일단, TCP/UDP 를 택배/전화 관점에서 생각해 보자.

TCP 는 안전한 트럭 내지는 전화 연결 방식에 가깝고, UDP 는 '위험한' 총알 배송 및 이메일 전송 방식에 가깝다. 좀 더 자세히 풀어보면...

 

TCP 와 UDP 의 연결 지향성의 차이가 있기에, 각각의 특징이 다르다고 볼 수 있다. TCP 는 전화에, UDP 는 메일에 가깝다.

 

그러다 보니... 속도 및 신뢰성에도 다음과 같은 차이를 보인다. 😮

 

TCP 와 UDP 를 통해 Hello World 를 보낼 때, 실제로 이 특징이 어떻게 나타날 수 있는지를 보면...

TCP 의 경우 ,경계가 없어 데이터가 쪼개져 보내질 수는 있으나, 순서는 보장된다.

반면 UDP 의 경우, 경계가 있어 데이터가 쪼개지지는 않으나, 순서가 보장되지 않는다!

 

그래서 종합하자면, 다음과 같을 것이다 😉

앞에서 다 설명한 내용이지만, 2가지만 좀 더 살펴보자.

 

일단 TCP 에서, 흐름/혼잡제어가 있다는 것은...

이전에 보았던, 송수신 버퍼가 가득 찬 상황에서, 클라이언트는 패킷을 보내지 않고 대기를 하게 되는데... 이것과 연관지어 이해하면, 현재 데이터가 전송되는 흐름을 파악하고 나름대로 관리를 하고 있다고 이해할 수도 있다 😁

 

반면 UDP 의 경우를 보자.

UDP 의 경우, 위와 같이 서버의 수신 버퍼가 가득차 있는 상황에서 데이터 전송을 시도한다.

그런데 서버에서는 받을 공간이 없으니... 클라가 무작정 보낸 패킷은 유실되게 된다 😂

UDP 는 일단 보내고 생각하기 때문에, 속도는 빠르지만 위와 같이 데이터의 안전성이 보장되지 않는 것이다 😄

Comments