[게임서버프로그래밍#7] 네트워크 기본 통신 정리 (TCP/UDP, NAT, 네트워크 품질)
2024. 5. 26. 17:11ㆍ개발 서적 리뷰/게임서버 프로그래머 책
이 글에서는 네트워크 통신의 기본 개념을 정리한다.
레이턴시, 패킷 유실률, 전송 속도와 같은 품질 지표부터, TCP/UDP 통신 방식 차이, NAT(Network Address Translation)의 개념까지 실제 사례를 통해 살펴본다.
네트워크 품질을 결정하는 요소
네트워크 품질은 다음 3가지 주요 지표로 평가할 수 있다.
1. 레이턴시(Latency)
- 데이터가 목적지에 도달하는 데 걸리는 시간이다.
- 라우터, 스위치 경유가 많거나 거리(물리적 거리)가 멀수록 레이턴시가 증가한다.
- 진단 방법:
tracert 명령어를 이용해 중간 경유지 확인 가능.
예시:
한국 → 미국 서버로 접속할 때 레이턴시가 100ms 이상 발생할 수 있다.
2. 패킷 유실률(Packet Loss)
- 네트워크 전송 중 패킷이 손실되는 비율이다.
- 라우터, 스위치 등 장비가 과부하 상태일 때 주로 발생한다.
- 실시간 게임이나 스트리밍에서 큰 문제가 된다.
예시:
- UDP 기반 음성 채팅 중 패킷 유실률 5% 이상이면 음성이 끊긴다.
3. 전송 속도(Throughput)
- 데이터가 일정 시간 동안 전송될 수 있는 최대량이다.
- 중간 장비(라우터, 스위치)의 성능이 낮으면 전체 속도가 제한된다.
- 진단 방법:
ping 명령어로 응답 속도, TTL(Time To Live) 값을 확인할 수 있다.
TCP vs UDP 차이
항목 | TCP | UDP |
연결 방식 | 연결 지향 (Connection-oriented) | 비연결 지향 (Connectionless) |
신뢰성 | 데이터 유실 시 재전송, 순서 보장 | 데이터 유실 시 무시 |
데이터 구조 | 스트림(Stream) 형식 | 메시지(Message) 형식 |
주요 사용처 | 파일 전송, 금융 트랜잭션, 중요 데이터 통신 | 게임, 음성/영상 통화, 스트리밍 |
1. TCP 특징
- 송신자가 데이터를 보내면 수신자가 수신 확인(ACK)을 보내야 한다.
- 패킷 손실 시 자동으로 재전송한다.
- 수신자에게 순서대로 데이터가 도착하는 것을 보장한다.
단점:
- 전송 과정이 무겁고 느릴 수 있다.
2. UDP 특징
- 송신자가 데이터를 보내면 수신 확인을 기다리지 않는다.
- 패킷 손실이 발생해도 그냥 무시하고 다음 데이터를 전송한다.
- 빠르고 가볍지만 신뢰성은 낮다.
단점:
- 데이터 유실에 대한 복구가 없다.
스트림(Stream) vs 메시지(Message) 차이
항목 | 스트림 방식 (TCP) | 메시지 방식 (UDP) |
데이터 수신 | 조각조각 도착 (순서 보장) | 보내는 단위 그대로 수신 가능 |
예시 | 파일 다운로드, HTTP 통신 | 음성 채팅, 게임 좌표 전송 |
NAT(Network Address Translation)란 무엇인가
정의:
NAT는 가상 사설망 내부 IP 주소를 공인 IP로 변환하여 통신하는 기술이다.
- IPv4 주소 부족 문제를 해결하기 위해 탄생했다.
- 사설 네트워크에 있는 여러 기기가 하나의 공인 IP를 공유해서 인터넷과 통신할 수 있게 한다.
NAT 동작 방식
- 내부 네트워크의 기기들이 사설 IP를 사용한다. (예: 192.168.0.x)
- 인터넷으로 데이터를 보낼 때, 라우터가 사설 IP를 공인 IP로 변환한다.
- 외부에서 들어오는 응답 패킷은 다시 해당 기기로 전달된다.
NAT와 게임 통신 문제
NAT를 통과해 게임 서버나 다른 클라이언트와 직접 통신해야 할 경우 문제가 생긴다.
- NAT 환경에서는 외부에서 직접 클라이언트로 접속할 수 없다.
- 이를 해결하기 위해 NAT Traversal(구멍 뚫기) 기술이 사용된다.
(예: STUN, TURN, uPNP, Hole Punching)
간단 정리: TCP와 UDP는 어디에 쓰일까?
상황 | 추천 통신 방식 |
중요 데이터 전송 (결제, 채팅) | TCP |
실시간 움직임 전송 (게임) | UDP |
음성/영상 스트리밍 | UDP + 자체 복구 기능 사용 |
'개발 서적 리뷰 > 게임서버 프로그래머 책' 카테고리의 다른 글
[게임서버프로그래밍#5] 멀티스레드 Client-Server 구현 (feat: mutex, chrono) (1) | 2024.06.02 |
---|---|
Socket의 기본 정리 ( feat, Blocking / Non-Blocking ) (0) | 2024.05.30 |
[게임서버프로그래밍#번외1] 네트워크 간단 요약 (0) | 2024.05.30 |
[게임서버프로그래밍#8] 병렬성, 싱글/멀티스레드 서버, 세마포어, 병렬 자료구조 (0) | 2024.05.26 |