TCP란
TCP(Transmission Control Protocol, 전송 제어 프로토콜)는 인터넷을 통해 디바이스에서 웹 서버로 데이터를 전송하는 네트워크 프로토콜입니다.
TCP/IP 프로토콜이라고 불리기도 합니다. 메신저에서 친구와 채팅을 하거나, 이메일을 보내거나, 온라인 동영상을 보거나, 웹을 검색할 때마다 TCP 프로토콜을 사용합니다.
TCP는 상호 연결 기반이므로 데이터를 전송하는 동안 수신자와 발신자 사이에 연결을 설정하고 이를 유지합니다.
이는 데이터가 완전히 온전하게 도착하도록 보장합니다. 이러한 신뢰성 때문에 TCP는 가장 널리 사용되는 네트워크 프로토콜입니다.
TCP를 사용하면 어떠한 장점이 있는지 알아보겠습니다.
- TCP는 운영체제와 독립적으로 작동하여, 다양한 시스템과 디바이스 간의 상호 운용성을 높여줍니다.
- 데이터 전송 시 오류를 검사하고, 전송된 데이터가 목적지에 온전하게 도달하도록 보장합니다.
- 수신자의 네트워크 상태와 용량을 고려해 전송 속도를 최적화하며, 필요에 따라 조절할 수 있습니다.
- 데이터가 목적지에 정상적으로 도착했는지 확인하고, 만약 첫 번째 전송이 실패하면 자동으로 재전송을 수행합니다.
이러한 장점에도 불구하고 TCP에는 몇 가지 단점도 있습니다:
- 대역폭 사용량이 많고 속도가 느림
- 전송 중 일부 데이터가 손실되면 전체 데이터 로딩이 지연됨
- 예를 들어, 웹 페이지 로딩 중 이미지나 동영상 파일 일부가 손실되면, 나머지 페이지 요소도 정상적으로 표시되지 않을 수 있습니다.
- 근거리 통신망(LAN)이나 개인 영역 네트워크(PAN)에서 효율적이지 않음
- TCP는 주로 인터넷과 같은 광범위한 네트워크 환경에서 신뢰성 보장이 필요한 경우에 사용됩니다. 하지만 LAN(근거리 통신망)이나 PAN(개인 영역 네트워크) 같은 안정적인 네트워크 환경에서는 불필요한 연결 설정, 흐름 제어, 혼잡 제어 과정이 오버헤드가 되어 성능 저하를 일으킬 수 있다.
TCP 적합한 프로젝트 - 파일 전송 애플리케이션 (예: Google Drive, FTP 서비스)
Google Drive나 FTP(File Transfer Protocol)와 같은 서비스에서는 사용자가 중요한 문서, 이미지, 동영상을 업로드하고 다운로드합니다.
이러한 데이터가 손상되거나 유실될 경우 복구가 어려우므로, 정확하고 신뢰성 있는 데이터 전송이 필수적입니다. 따라서 데이터 무결성과 전송 안정성을 보장하는 TCP가 가장 적합한 프로토콜입니다.
UDP란
UDP는 ‘User Datagram Protocol,’ 즉 ‘사용자 데이터그램 프로토콜’의 약자입니다. UDP 네트워크 프로토콜은 TCP에 비해 안정성은 떨어지지만 더 빠르고 간단합니다. 그래서 스트리밍이나 게임과 같이 빠른 속도가 중요한 상황에서 자주 사용됩니다.
UDP는 비연결 방식이므로 두 당사자 간에 사전 연결을 설정하지 않습니다. 그 과정에서 데이터가 손실될 가능성이 있지만, 그 대신 훨씬 빠른 속도를 얻을 수 있습니다.
UDP의 장점에 대해 자세히 살펴보겠습니다.
- UDP는 더 작은 패킷을 더 적은 오버헤드로 전송하여 엔드투엔드 지연을 줄입니다.
- UDP는 일부 패킷이 누락되더라도 데이터를 전송하므로 패킷 손실로 인해 전체 전송이 중단되지 않습니다.
- 브로드캐스트 및 멀티캐스트 기능을 통해 하나의 UDP 전송을 여러 수신자에게 한 번에 전송할 수 있습니다.
- UDP 전송은 TCP와 같은 다른 옵션보다 더 빠르고 효율적입니다.
물론 UDP에는 몇 가지 단점이 있는데, 다음과 같습니다.
- UDP는 데이터 패킷이 목적지에 성공적으로 도달했는지 여부를 확인하지 않습니다.
- UDP는 전송이 온전하게 도착한다고 보장할 수 없습니다. 일부 패킷이 손실되었을 수 있지만 발신자 측에서 이를 확인할 수 있는 방법은 없습니다.
- 라우터가 데이터 패킷의 우선순위를 정해야 하는 경우, UDP 패킷보다 TCP 패킷을 먼저 전송할 가능성이 높습니다.
- UDP는 특정 순서로 데이터를 전송하지 않으므로 패킷은 어떤 순서로든 도착할 수 있습니다.
UDP가 적합한 프로젝트 – 실시간 온라인 게임 (예: 배틀그라운드, 리그 오브 레전드, 오버워치)
온라인 멀티플레이 게임에서는 플레이어의 위치, 총격, 스킬 사용 등의 데이터를 빠르게 전달해야 합니다.
이 과정에서 일부 데이터가 손실되더라도 게임 진행이 끊기지 않고 원활하게 이어지는 것이 더욱 중요하므로, 빠른 전송이 가능한 UDP가 적합한 프로토콜입니다.
게임에서 데이터 손실이 나면 심각한 문제가 발생하는거 아니야?
- 게임에서는 UDP로 빠른 데이터 전송을 보장하고, TCP로 중요한 데이터의 신뢰성을 확보
- 캐릭터 이동, 공격 등은 UDP를 사용하며, 일부 손실은 보간 및 보정 기법으로 처리
- 아이템 획득, 결제 등은 TCP를 사용해 데이터 손실 없이 정확하게 처리
- 패킷 손실 감지 및 예측을 통해 끊김 없는 게임 플레이 유지
참고자료 - https://www.inflearn.com/community/questions/1431791/tcp-ip-vs-udp-멀티-스레드에서의-병목-현상에-대한-질문이-있습니다?srsltid=AfmBOor3vHDwWjMtBrgcH97H_F8F580ukMWNdrHnyojUQnSoVITtlP89
결론
TCP와 UDP는 각각의 장점과 한계를 가지며, 애플리케이션의 특성에 따라 적절한 프로토콜을 선택하는 것이 중요하다. TCP는 신뢰성과 데이터 순서를 보장하는 반면, UDP는 속도와 실시간성을 우선한다. 따라서 개발자는 프로젝트의 요구 사항을 충분히 고려해 최적의 프로토콜을 선택해야 한다.
이해한 내용을 바탕으로, 우리는 다양한 네트워크 환경에서 TCP와 UDP를 효과적으로 활용할 수 있다. 결국, 특정 프로젝트에서 프로토콜을 선택할 때는 "데이터 무결성이 중요한가?" vs "실시간성이 중요한가?" 를 기준으로 판단하는 것이 가장 합리적인 접근 방식이다.