KoreanFoodie's Study
[C++ 게임 서버] 3-4. TCP vs UDP 본문
[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 는 일단 보내고 생각하기 때문에, 속도는 빠르지만 위와 같이 데이터의 안전성이 보장되지 않는 것이다 😄
'Game Dev > Game Server' 카테고리의 다른 글
[C++ 게임 서버] 3-6. 소켓 옵션 (0) | 2023.09.22 |
---|---|
[C++ 게임 서버] 3-5. UDP 서버 실습 (0) | 2023.09.22 |
[C++ 게임 서버] 3-3. TCP 서버 실습 (0) | 2023.09.21 |
[C++ 게임 서버] 3-2. 소켓 프로그래밍 기초 #2 (0) | 2023.09.20 |
[C++ 게임 서버] 3-1. 소켓 프로그래밍 기초 #1 (0) | 2023.09.19 |