프로토콜(Protocol)과 TCP/IP 4계층 모델

프로토콜은 "컴퓨터 네트워크에서 장치들끼리 데이터를 원활하게 교환하기 위해 약속된 규칙과 절차의 집합"입니다.
네트워크 통신은 하나의 규칙으로만 이루어지지 않고, 여러 개의 계층(Layer)으로 나뉘어 각자 역할에 맞는 프로토콜을 사용합니다.
이 구조를 TCP/IP 4계층 모델이라 부릅니다. (UDP도 동일한 4계층을 사용하지만, TCP가 대표적이라 TCP/IP 4계층 모델이라 부릅니다.)
네트워크 계층은 OSI 7계층이라는 정교한 이론 모델도 있지만, 이 글에서는 실제 인터넷의 표준인 TCP/IP 4계층을 기준으로 설명하겠습니다.
- 4계층 (응용 계층) : HTTP, 게임 프로토콜 등 실제 프로그램의 통신 담당.
- 3계층 (전송 계층) : 데이터 전송 방식을 결정. TCP와 UDP가 여기에 속합니다.
- 2계층 (인터넷 계층) : 데이터의 목적지(IP 주소) 경로 설정. IP가 여기에 속합니다.
- 1계층 (네트워크 인터페이스 계층) : 데이터를 물리적 신호로 변환하여 전송.
TCP와 UDP는 전송 계층(3계층)에서 데이터가 '어떻게' 전송될지를 책임지는 핵심 프로토콜입니다.
TCP vs UDP

전송 계층의 대표적인 두 프로토콜, TCP와 UDP는 명확한 장단점을 가집니다.
| 구분 | TCP (Transmission Control Protocol) | UDP (User Datagram Protocol) |
| 특징 | 연결 지향 (Connection-oriented) | 비연결형 (Connectionless) |
| 연결 방식 | 3-way handshake로 연결 수립 후 통신 | 연결 과정 없이 일방적으로 전송 |
| 신뢰성 | 높음 (데이터 도착 및 순서 보장, 재전송 O) | 낮음 (데이터 유실 및 순서 변경 가능, 재전송 X) |
| 속도 | 상대적으로 느림 | 매우 빠름 |
| 주요 사용처 | MMORPG (캐릭터 정보), 웹 통신 (HTTP) | FPS, 격투 게임 (실시간 위치 정보), 스트리밍 |
| 핵심 키워드 | #신뢰성 #순서보장 #연결 | #속도 #실시간성 #단순함 |
- TCP (신뢰의 프로토콜) 는 데이터를 보내기 전 상대방과 "너 데이터 받을 준비됐니?" 와 같이 서로 확인하는 과정을 거칩니다. 덕분에 데이터가 사라지거나 순서가 뒤바뀌는 일이 없지만, 그만큼 절차가 복잡해 속도가 느립니다.
- UDP (속도의 프로토콜) 는 이런 확인 절차 없이 그냥 데이터를 보내는 데만 집중합니다. 과정이 단순해 속도가 매우 빠르지만, 중간에 데이터가 사라져도 아무도 책임지지 않습니다.
게임의 상황에 따른 프로토콜 사용
상황에 맞게 or 둘 다 사용 or 둘을 섞어서 사용합니다. 일반적으로는 아래와 같은 상황에서 사용합니다.
- 채팅, 캐릭터 정보, 인벤토리 등 : 단 하나의 데이터라도 유실되면 안 되므로 TCP를 사용합니다.
- 실시간 캐릭터 위치, 총알 발사, 스킬 사용 등 : 약간의 유실이 있더라도 빠른 반응이 훨씬 중요하므로 UDP를 사용합니다.
하지만 UDP의 '신뢰성 없음'이 너무 불안하기 때문에, 실제 게임 개발에서는 Reliable UDP라는 기법을 많이 사용합니다. UDP의 빠른 속도를 기반으로 하되, '이 데이터만큼은 꼭 도착해야 해!'라고 표시를 해두어 어플리케이션 레벨에서 자체적으로 재전송을 구현하는 방식입니다.
3-way handshake

3-way handshake는 TCP 프로토콜에서 통신을 시작하기 전에 클라이언트와 서버가 서로 연결을 확인하고 설정하는 3단계 과정입니다. 데이터 전송에 앞서 양쪽 모두 데이터를 주고받을 준비가 되었는지 확실히 보장하는 역할을 합니다.
이 과정은 클라이언트가 서버에 연결을 요청하면서 시작됩니다.
1단계 (SYN): "연결해도 될까요?"
- 클라이언트 → 서버
- 클라이언트는 서버에 접속을 요청하는 SYN (Synchronize) 패킷을 보냅니다. 이 패킷에는 "이제부터 통신을 시작하고 싶으니, 포트를 열어줘"라는 의미가 담겨 있습니다.
2단계 (SYN-ACK): "네, 좋아요. 그쪽도 준비됐나요?"
- 서버 → 클라이언트
- 요청을 받은 서버는 클라이언트에게 요청을 수락한다는 의미의 SYN 패킷과 확인 응답인 ACK (Acknowledgement) 패킷을 함께 보냅니다. "네 요청 잘 받았어. 나도 준비됐으니, 너도 준비가 완료되면 알려줘"라는 의미입니다.
3-단계 (ACK): "네, 준비됐습니다. 이제 통신 시작하죠."
- 클라이언트 → 서버
- 서버의 응답을 받은 클라이언트는 마지막으로 자신도 통신 준비가 완료되었다는 ACK 패킷을 서버에 보냅니다.
이 3단계 과정이 성공적으로 완료되면, 클라이언트와 서버 간에 연결이 수립(Established)되고 비로소 신뢰성 있는 데이터 전송이 시작될 수 있습니다. 만약 이 과정에서 어느 한쪽이라도 응답을 받지 못하면 연결은 실패하게 됩니다.
'CS > 서버' 카테고리의 다른 글
| 액터 모델 (0) | 2025.10.23 |
|---|---|
| 서버 구현/구조 방식 (0) | 2025.10.16 |
| 클라이언트와 서버 (0) | 2025.10.16 |