Computer >> 컴퓨터 >  >> 네트워킹 >> 네트워킹

TCP vs UDP — 차이점은 무엇이고, 어떤 프로토콜이 더 빠를까?

컴퓨터 네트워킹을 공부하거나 애플리케이션의 네트워크 설정을 살펴본 적이 있다면 'TCP'와 'UDP'라는 용어를 한 번쯤은 접했을 겁니다.

TCP(Transmission Control Protocol, 전송 제어 프로토콜)와 UDP(User Datagram Protocol, 사용자 데이터그램 프로토콜)는 인터넷 프로토콜 스위트의 일부로, 인터넷에서 정보를 주고받는 서로 다른 방식입니다.

하지만 이름을 안다고 해서 어떤 프로토콜을 언제, 왜 사용해야 하는지 바로 알 수 있는 건 아니죠.

이 글에서는 네트워킹의 기본 개념부터 TCP와 UDP의 차이점, 각각의 활용 사례까지 차근차근 알아보겠습니다.

인터넷 네트워킹 기본 개념

TCP와 UDP의 작동 방식을 이해하기 전에, 인터넷이 어떻게 돌아가는지 기본 원리를 짚고 넘어가는 것이 좋습니다.

간단히 말해 인터넷은 서로 연결된 장치들의 거대한 네트워크입니다. 스마트폰이든 서버든, 모든 장치는 인터넷 프로토콜 스위트를 통해 통신합니다.

인터넷 프로토콜 스위트는 장치들이 서로 소통할 수 있게 해주는 다양한 프로토콜, 즉 통신 방식들의 집합입니다. 그중에서도 TCP와 UDP는 가장 핵심적인 두 프로토콜입니다.

인터넷에 연결된 모든 장치는 고유한 IP 주소를 가지며, 두 장치가 인터넷으로 통신할 때는 대부분 TCP 또는 UDP 방식을 사용합니다.

TCP란 무엇인가?

TCP(Transmission Control Protocol)는 온라인에서 가장 널리 쓰이는 네트워크 프로토콜입니다. 매우 안정적이어서 웹 서핑(HTTP), 이메일 전송(SMTP), 파일 전송(FTP) 등 거의 모든 영역에서 활용됩니다.

TCP는 한 장치가 보낸 데이터가 반드시 완전하고 손상 없이 상대방에게 전달되어야 하는 상황에 적합합니다.

예를 들어 웹사이트에 접속할 때 TCP는 페이지를 렌더링하는 데 필요한 텍스트, 이미지, 코드가 모두 도착하는 것을 보장합니다. TCP가 없다면 이미지나 텍스트가 누락되거나 순서가 어긋나 페이지가 깨져 버릴 수 있습니다.

TCP는 연결 지향형(connection-oriented) 프로토콜입니다. 즉, 데이터 전송 전에 두 장치 간 연결을 먼저 설정하고, 전송 과정 내내 그 연결을 유지합니다.

두 장치 간 연결을 맺기 위해 TCP는 3-way 핸드셰이크(three-way handshake)라는 방식을 사용합니다.

여러분이 이 글을 읽는 상황을 예로 들어 볼까요? 먼저 여러분의 기기가 freeCodeCamp News 서버에 SYN(Synchronize Sequence Number)이라는 메시지를 보냅니다.

그러면 서버가 SYN-ACK이라는 확인 메시지를 되돌려 보냅니다.

기기가 서버로부터 SYN-ACK를 받으면 ACK 확인 메시지를 다시 전송하고, 이로써 연결이 성립됩니다.

연결이 수립되면 TCP는 모든 데이터가 전송됨을 보장합니다. 이제 서버는 이 글을 렌더링하는 데 필요한 모든 데이터를 여러분의 브라우저로 보낼 수 있습니다.

모든 장치는 데이터를 인터넷으로 전송하기 전에 작은 패킷(packet) 단위로 나눕니다. 그리고 받는 쪽에서 이 패킷들을 다시 조립해야 하죠.

따라서 freeCodeCamp News 서버가 이 글의 HTML, CSS, 이미지 등을 보낼 때도 데이터를 작은 패킷으로 분할해 기기로 전송하고, 기기는 이를 재조립해 화면에 글을 표시합니다.

TCP는 이 패킷들이 모두 도착하도록 보장합니다. 전송 중 일부 패킷이 유실되면, 기기가 서버에 누락 사실을 알리고 서버가 해당 패킷을 재전송할 수 있도록 설계되어 있습니다.

필요한 데이터를 모두 받으면, TCP는 FIN과 ACK 패킷을 사용해 3-way 핸드셰이크와 비슷한 방식으로 자동으로 연결을 종료합니다.

UDP란 무엇인가?

UDP(User Datagram Protocol) 역시 인터넷 프로토콜 스위트를 구성하는 주요 프로토콜 중 하나입니다. TCP보다 신뢰성은 낮지만 훨씬 단순하다는 것이 특징입니다.

UDP는 실시간 영상·음성처럼 약간의 데이터 손실이 허용되거나, 온라인 게임처럼 속도가 결정적인 상황에서 사용됩니다.

UDP도 TCP처럼 온라인에서 데이터를 주고받는 용도지만, 몇 가지 핵심적인 차이가 있습니다.

첫째, UDP는 비연결형(connectionless) 프로토콜입니다. TCP처럼 3-way 핸드셰이크로 사전에 연결을 맺지 않습니다.

둘째, UDP는 모든 데이터가 성공적으로 전달되는 것을 보장하지 않습니다. 수신 대기 중인 장치에 데이터를 일단 보내기만 할 뿐, 도중에 일부가 유실되어도 신경 쓰지 않습니다. 그래서 UDP는 '발사 후 잊기(fire-and-forget)' 프로토콜이라고도 불립니다.

이 차이를 이해하는 가장 쉬운 방법은 비유입니다. TCP는 두 사람 간의 대화와 같습니다. A가 B에게 "대화해도 될까요?"라고 묻고, B가 "네, 좋습니다"라고 답하면 A가 이에 동의한 뒤 둘이 대화를 시작하는 식이죠.

반면 UDP는 확성기를 든 시위자와 같습니다. 귀 기울이고 있는 사람들은 말하는 내용 대부분을 들을 수 있지만, 주변 모든 사람이 다 들었다고 보장할 수 없고, 애초에 듣고 있는지조차 알 방법이 없습니다.

TCP와 UDP 중 무엇이 더 빠른가?

일반적으로 UDP가 더 빠른 프로토콜입니다.

UDP는 구조가 단순해서 데이터 전송 전에 연결을 설정하거나, 모든 데이터가 도착했는지 검증하지 않습니다. 요청하는 장치에 데이터를 계속 밀어 넣기만 하며, 상대가 연결을 끊거나 보낼 데이터가 없을 때까지 전송합니다.

병으로 물을 홀짝이는 것과 호스로 물을 벌컥벌컥 마시는 것의 차이라고 생각하면 됩니다. 둘 다 갈증은 해소되지만, 후자는 셔츠가 젖기 십상이겠죠.

하지만 빠르다고 해서 UDP가 모든 면에서 우월한 것은 아닙니다. 특정 상황에서 더 적합하다는 의미일 뿐입니다.

앞서 말했듯이 TCP는 모든 패킷이 순서대로, 빠짐없이 도착해야 하는 상황에서 필수적입니다. TCP 없이는 웹 자체가 작동하지 않습니다.

연결 설정과 패킷 검증 과정 때문에 느려 보이지만, 실제로 TCP도 매우 빠릅니다. YouTube나 Netflix 같은 사이트도 HTTP 기반으로 데이터를 전송하기 때문에 TCP를 사용합니다.

특히 TCP는 버퍼링을 지원하기 때문에 브라우저가 시청 중에 추가 데이터를 미리 불러올 수 있어, 끊김 없는 재생은 물론 영상 구간 이동(스킵)도 가능합니다.

반면 실시간 영상·음성 통화나 온라인 게임처럼 잠재적 데이터 손실보다 속도가 중요한 경우에는 UDP가 더 나은 선택입니다.

Google Meet이나 Zoom으로 통화할 때 영상과 음성은 UDP로 전송됩니다. 패킷 일부가 유실되더라도 약간의 끊김이나 화면 잘림 정도로 나타날 뿐이죠.

온라인 게임을 즐긴다면 "모든 패킷 도착을 보장하는 TCP가 게임에 더 적합하지 않을까?"라고 생각할 수 있습니다. 하지만 현실은 정반대입니다. TCP의 검증 및 재전송 과정은 오히려 지연(latency)만 늘립니다.

그래서 게임 개발자들은 플레이어 입력과 게임 상태를 최대한 정확하게 유지하기 위한 별도의 창의적인 기법들을 고안해 왔습니다.

마치며

이 글이 TCP와 UDP의 미묘한 차이를 이해하는 데 도움이 되었기를 바랍니다. 누군가 "어느 쪽이 더 빠르냐"고 물으면 이렇게 답해 보세요. "UDP가 더 빠릅니다. 하지만..."

빠름 하나만으로 프로토콜의 우열을 가릴 수 없다는 점, 이제 확실히 기억하시겠죠?