[컴퓨터(Computer Science)/네트워크, Network] - TCP vs UDP 비교
우선 TCP와 UDP는 위와 같다.
생각해보면
UDP는 속도만 빠르지 제대로 데이터가 전달되는지도 몰라서
온라인 게임에선 정확한게 중요하지 않을까? 생각하면서
TCP가 적용된다고 생각하는 사람이 많다.
그러나 현업에선 오히려 UDP가 더 많이 쓰인다고 한다.
왜 정확한 것보다 빠른 것을 쓰는 것일까?
TCP의 특징 중 하나인
데이터를 주고 받을 때 순서와 전송을 보장하는 특성이 오히려 온라인 게임에서
방해가 된다는 이유 때문이다.
전달을 보증하는 TCP는 송신한 세그먼트가 유실되었다고 판단하면 재전송을 한다.
도대체 이것이 무엇을 방해하는 것일까?
일반적으로 TCP는 세그먼트 송신후 재전송 타임아웃(RTO) 시간까지 상대방에게 ACK 신호를 기다린다.
그렇지 않으면 재전송을 하게 된다.
재전송후 RTO는 2배로 늘어난다. 그렇게 되면 상대방에게 ACK 신호를 기다리는 시간이 2배가 되는 것이다.
만약 격투게임이라고 쳐보자.
우선 격투게임은 턴제가 아니다.
나의 입력과 상대방의 입력 모두를 기다린 다음 처리하는 것이 아니라
바로바로 처리하기를 원한다.
하지만 실시간에서는 그것이 불가능하다. 내가 입력하더라도 상대방에게 전달되지 않았으면
재전송을 기다려야하고 게임이 멈추는 사태가 벌어질 것이다.
그래서 TCP의 장점은 이해가 가면서도
UDP를 쓴다.
하지만 UDP도 UDP 그대로 쓰는 것이 아니라
TCP와 같은 기능을 추가해서 쓰는 것이다.
RUDP와 같은 프로토콜도 있다.
** 패킷 유실했을 때 재전송하거나 수신 패킷의 확인 응답신호를 받는 기능이 있음
다시 말해서 재전송 기능을 구현한 UDP를 이용한다면 송신할 패킷을 TCP와 같이 다룰 수 있다는 말이다.
하지만 TCP에 구현된 기능을 쓰기만 했지 어떻게 UDP 상에서 구현할 지 모른다.
이것이 온라인 게임에서의 네트워크 진입 장벽이 높은 이유다.
++ 우리는 그냥 있는 것을 쓸 줄만 알지 만드는 것까지는 모른다.
하여튼 TCP와 UDP 둘 다 통신방식으로 게임에서 쓸 수 있으나
게임의 장르에 따라 필요에 따라 쓰고
아니면 현 프로토콜에서 기능을 임의로 추가시켜서 쓴다는 것이
게임 네트워크와 우리가 생각하는 네트워크의 차이점이다.
아마 포켓몬도 친구랑 뜰 수 있는 대전이 있었던 것 같은데
물론 얘는 케이블로 연결해서 P2P로 하지 않았나 싶다.
'Game Development, 게임개발 > 게임네트워크' 카테고리의 다른 글
Client - side Prection, 클라이언트 단 예측 (0) | 2022.05.02 |
---|---|
멀티플레이 게임과 네트워크 지연 (1) | 2022.04.29 |
Socket으로 통신 라이브러리 만들기 (0) | 2021.10.02 |
TCP,UDP 소켓프로그래밍, C# - 소켓 생성부터 종료까지 (0) | 2021.09.28 |
게임네트워크를 따로 생각해야하는 이유 (0) | 2021.09.27 |