TCP 와 UDP 의 차이를 알아보기 전에 TCP/IP 가 무엇인지 먼저 이해해보자.
인터넷 통신 대부분은 패킷 통신으로 이루어지는데, 패킷 통신 규약 중 하나인 tcp/ip는 TCP(Transfer Control Protocol 전송제어프로토콜)과 IP(Internet Protocol 인터넷 프로토콜)을 지칭하는 용어다.
여기서 IP는 메시지가 목표로 하는 컴퓨터에 잘 도착하도록 해주는 역할을 한다.
컴퓨터의 위치(IP 주소)를 찾아서 메시지를 잘 전송했다면 메시지를 확인해야 한다.
네트워크 통신을 할때 메시지를 작은 단위로 쪼개서(패킷) 전송을 하는데, TCP가 이런 패킷들을 재조립하고 손상되거나 손실된 패킷이 있다면 재요청한다.
패킷 : 네트워크에서 사용하는 작게 분할된 데이터 조각으로, 네트워크에서 전송되는 데이터의 기본 단위
🤷♀️ 근데 데이터를 왜 번거롭게 쪼개서 보내는 걸까?
데이터를 큰 상태로 보내면 그 데이터가 네트워크 대역폭을 너무 많이 차지해서, 다른 패킷의 흐름을 막을 위험이 있다.
그래서 용량이 큰 데이터는 작게 분할된 데이터 조각으로 전송하고, 전송이 완료되면 원래 모습대로 되돌리는 작업이 필요하다.
IP가 이러한 데이터 조각들을 정확한 목적지로 보내는 역할을 하는 거다. 근데 IP 이놈은 조각들의 순서가 뒤바뀌거나 일부가 누락되더라도 상관하지않고 보내는 데에 집중한다.
TCP는 IP보다 느리지만 꼼꼼한 방식을 사용한다.
도착한 조각들을 점검해서 줄을 세우고 망가졌거나 누락된 부분을 다시 요청하는 것이다.
TCP, IP 이 두방식을 조합해서 인터넷 데이터 통신을 하는 것을 TCP/IP 라고 하는 것!
📌 정리하자면,
TCP는 end point 간의 산뢰성있는 데이터 전송을 담당하는 계층이다.
- 신뢰성: 데이터를 순차적 안정적인 전달
- 전송: 포트 번호에 해당하는 프로세스에 데이터를 전달
만약 전송계층이 없다면 어떻게 될까?
다음과 같은 문제들이 생겨날 것이다.
이런 문제를 해결하기 위해 나온 개념이 TCP 이다.
TCP 는 다음과 같은 특징을 가지고 있다.
TCP 는 양쪽의 컴퓨터가 연결이 되어있는지 확인하는 작업을 한다. 그 방식을 3-WAY-HANDSHAKE 방식으로 확인하는데, 여기서 연결이라는것은 물리적연결은 아니고 연결되었다고 간주하는 것이다.
이걸 3-WAY-HANDSHAKE 라고 한다.
✔ 만약 ok 를보냈는데 답이 안오면 연결이 끊어졌다고 간주한다
✔ 한쪽에서 disconnect 하는 것도 연결이 끊어졌다고 간주한다.
이러한 방식을 통해서 TCP 에서는 연결되고 끊어지고를 프로그램이 알수 있게 하는 것이다.
위에 TCP/IP를 설명할때 네트워크 통신을 할때 메시지를 작은 단위로 쪼개서(패킷) 전송을 하는데, TCP가 이런 패킷들을 재조립하고 손상되거나 손실된 패킷이 있다면 재요청한다고 했다.
ex) 패킷에 번호를 매겨서 보내면, 받는 쪽에서 작업을 해서 만약 2번 4번 패킷이 왔는데 3번이 오지 않았다면 3번을 요청하는 것
이런 작업을 통해서 데이터의 순서를 보장하고 동시에 송신을 보장한다.
UDP는 비연결형 프로토콜로써, 인터넷상에서 서로 정보를 주고받을 때 정보를 보낸다는 신호나 받는다는 신호 절차를 거치지 않고 보내는 쪽에서 일방적으로 데이터를 전달하는 통신 프로토콜이다. TCP가 하는 작업을 따로 하지 않기 때문에 속도가 빠르다.
UDP : 연결유무? 순서보장? 송신보장 응 그런거 없어~ 속도 빠른게 쵝오! 킼킼
뭐 이런것이다.
🤷♀️ 아니 그럼 UDP 도대체 웨 씀?
위에서 보았듯이 TCP 는 3번 왔다갔다 해야하기 땜에 뭘해도 3배 느리다.
확률적으로 데이터가 유실될 확률이 7%정도 라고 한다. 100을 보내면 7개가 안가는 것. UDP 는 7개 정도야 뭐~ 하는 것이다.
그래서 게임쪽에서 UDP를 많이 쓴다. 즉각적인 반응성이 중요하기 때문에!
근데 UDP는 신뢰성보다는 속도를 중시하기때문에, 데이터유실의 위험이 있다고 했다.
만약 게임을 하는 도중, 중요한 순간에 궁극기가 작동이 안된다면?
겁나 절망적일것이다.
그래서 이런 문제해결을 위해 Reliable UDP 라는 것을 코딩으로 따로 만들어서 사용한다.
TCP가 하던 일을 하는 것(신뢰성보장) 인데, TCP는 하드웨어적으로 처리하지만 이건 소프트웨어로 처리하는 것에 차이가 있다.
정리하자면,
✅ TCP는 연속성보다 신뢰성 있는 전송이 중요할 때에 사용되는 프로토콜이며,
✅ UDP는 TCP보다 빠르고 네트워크 부하가 적다는 장점이 있지만 신뢰성 있는 데이터 전송을 보장하지는 않는다.
그렇기 때문에 신뢰성보다는 연속성이 중요한 실시간 스트리밍과 같은 서비스에 자주 사용된다.