TCP와 UDP란 무엇인가? 간단한 설명

인터넷은 컴퓨터 간 정보 교환을 위해 두 가지 프로토콜에 의존합니다. 이 통신 프로토콜은 두 개체 간에 데이터 전송이 어떻게 발생하는지 결정하는 규칙을 정의합니다. 이는 일대일 또는 일대다 관계일 수 있습니다. 전송 제어 프로토콜(TCP)과 사용자 데이터그램 프로토콜(UDP)은 네트워크를 통해 데이터를 이동시킬 수 있는 두 가지 프로토콜입니다. 둘 다 OSI 모델의 전송 계층에서 작동합니다.

비슷하면서도 다른 이 두 프로토콜은 각각의 역할을 효율적으로 수행합니다. 하나는 연결 지향적이며 데이터 전송이 시작되기 전에 연결을 설정해야 하는 반면, 다른 하나는 연결 없이 목적지 장치에 먼저 알리지 않고 데이터를 전송합니다. 이 프로토콜들이 수행하는 일에는 더 많은 것이 있으며, 아래에서 알아볼 수 있습니다. 이 글은 TCP와 UDP에 초점을 맞추고 있으며, 그들이 어떻게 작동하는지, 장단점 및 차이점에 대해 다룹니다.

TCP란 무엇인가?

전송 제어 프로토콜은 인터넷상에서 데이터 패킷의 전송을 주로 다루는 통신 프로토콜입니다. 이 프로토콜은 개방 시스템 상호 연결(OSI) 모델의 전송 계층(계층 4)에서 작동합니다. 이 프로토콜은 클라이언트 장치/응용 프로그램과 서버 사이의 데이터 패킷을 전송하는 데 도움을 줍니다(UDP와 함께).

TCP는 연결 지향적이어서 클라이언트와 서버가 어떤 방향으로든 데이터를 보내기 전에 연결을 설정해야 합니다. 또한, 오류를 확인하고 데이터 패킷이 전송 장치나 응용 프로그램이 의도한 순서대로 목적지에 도착하도록 보장함으로써 신뢰할 수 있는 프로토콜입니다.

TCP가 어떻게 작동하나요?

TCP를 사용할 때, 클라이언트와 서버는 양방향 데이터 패킷 전송이 시작되기 전에 세 번의 악수(three-way handshake)로 알려진 방법을 사용하여 연결을 설정합니다. 세 번의 악수가 시작되기 전에, 서버는 연결을 수락하기 위해 포트에서 대기해야 합니다. 악수는 클라이언트와 서버 사이에 SYN, SYN/ACK, ACK로 알려진 세 개의 메시지(또는 플래그)를 교환하면서 시작됩니다.

아래의 교환 과정을 단계별로 살펴보겠습니다.

1. 클라이언트가 서버에 SYN 데이터 패킷을 보냅니다. SYN 패킷에는 클라이언트가 할당한 임의의 시퀀스 번호(X)가 포함되어 있습니다. 이 패킷의 목적은 서버가 새로운 연결을 위해 사용 가능한지 확인하는 것입니다.

2. 서버는 SYN 패킷을 받고 SYN/ACK 패킷을 보내어 이를 인정합니다. 서버는 확인 번호를 클라이언트가 초기 SYN 패킷에 할당한 순서 번호(X)에 1을 더한 값(1+X)으로 설정하고 다른 무작위 순서 번호(Y)를 설정합니다. 그래서 서버는 SYN/ACK 패킷과 함께 두 개의 순서 번호를 클라이언트에게 보냅니다.

3. 클라이언트는 서버로부터 SYN/ACK 패키지를 받고 ACK 패키지를 보내어 이를 인정합니다. 클라이언트는 인정 번호를 서버로부터 받은 시퀀스 번호(1+Y)에 하나를 더한 값으로 설정합니다.

세 단계 핸드셰이크 과정이 완료되면, 클라이언트와 서버는 서로 데이터를 송수신할 수 있습니다.

TCP의 장점과 단점

대부분의 프로토콜과 마찬가지로 TCP는 완벽하지 않습니다. 장점과 단점이 있습니다. 아래에서 TCP 사용의 장단점을 살펴보겠습니다.

장점

1. 신뢰할 수 있는

TCP는 데이터 패킷이 올바른 순서로 목적지에 도착하도록 보장하기 때문에 신뢰할 수 있습니다. TCP가 데이터 세그먼트를 전송할 때, 타이머를 작동시키고 목적지로부터의 확인 응답을 기다립니다. 확인 응답을 받지 못하면 세그먼트를 다시 전송합니다. 또한, 데이터 패킷이 순서에 맞지 않게 도착했을 때를 알기 위해 순서 지정을 사용합니다.

2. 오류 탐지 및 복구

TCP는 패킷이 목적지에 도착할 때 변경 사항이 있는지 확인하기 위해 종단 간 체크섬을 사용합니다. 오류가 있는 패킷은 버리고 송신자가 다시 보낼 때까지 기다립니다. 또한, 중복된 데이터도 버립니다.

3. 혼잡 제어

TCP는 혼잡을 처리하기 위해 버퍼링과 윈도잉을 사용합니다. TCP 연결의 수신 측이 한 번에 처리할 수 있는 것보다 많은 데이터 패킷을 받을 때 혼잡이 발생할 수 있습니다. TCP는 혼잡을 처리하기 위해 버퍼를 사용하지만, 버퍼가 가득 차면 발신자가 한 번에 보낼 수 있는 데이터의 양을 줄이기 위해 윈도잉을 사용합니다.

단점

1. 느린 속도

UDP에 비해 TCP는 느립니다. 우선, 필요한 3단계 핸드셰이크가 시간을 소모합니다. 그 다음, 데이터 전송 중 흐름 제어, 혼잡 제어, 오류 검사로 인한 속도 저하가 있습니다. 이러한 경우, TCP는 신뢰성을 위해 속도를 희생합니다.

2. DoS 공격에 취약함

TCP의 3단계 핸드셰이크는 DoS 또는 DDoS 공격에 취약하게 만듭니다. SYN 플러드는 악의적인 주체가 SYN 패킷으로 서버를 범람시켜 서버를 사용할 수 없게 만드는 공격 중 하나입니다. 이 공격의 목적은 서버를 압도하여 진짜 요청에 응답하지 못하게 하는 것입니다.

UDP란 무엇인가?

사용자 데이터그램 프로토콜(UDP)은 OSI 모델의 전송 계층에서 작동하는 TCP와 같은 통신 프로토콜입니다. TCP와 달리, UDP는 연결이 없는 프로토콜이므로, 클라이언트가 데이터 패킷을 전송하기 전에 서버와 연결을 설정할 필요가 없습니다. 결과적으로, 3단계 핸드셰이크, 흐름 제어, 순서 지정이 없습니다.

UDP는 데이터그램이 목적지에 도착했는지, 클라이언트가 보낸 순서대로 도착했는지 신경 쓰지 않습니다. 이것은 UDP를 TCP보다 덜 신뢰할 수 있게 만들지만, 확인 응답을 기다리거나 데이터를 재전송할 필요가 없기 때문에 더 빠르게 만듭니다. 그러나 UDP는 데이터 무결성에 대해서는 신경을 쓰며, 제3자가 데이터그램을 조작하지 않았는지 확인하기 위해 체크섬을 사용합니다.

UDP가 어떻게 작동하나요?

UDP를 사용하면 데이터그램이 출발지에서 목적지까지 이동하는 과정이 쉽습니다. 네트워크 계층에서 받은 IP 패킷에 헤더를 추가한 후, 어떤 연결을 먼저 설정할 필요 없이 데이터그램을 직접 목적지 서버로 보냅니다. 이 과정의 단순함이 UDP를 연결이 없는 프로토콜로 만듭니다.

또한, UDP는 전송 중 데이터 손실이 허용되는 시간에 민감한 통신에 이상적입니다. 예를 들어, 음성 및 비디오 통신에 UDP를 사용합니다.

UDP의 장점과 단점

UDP의 흐름 제어 및 데이터 재전송 부재는 장점이자 단점입니다. 아래에서는 UDP 사용의 장단점을 살펴봅니다.

장점

1. 빠른 데이터 전송

UDP는 목적지 컴퓨터가 더 많은 데이터그램을 받기 전에 데이터그램을 확인할 필요가 없고 데이터를 재전송하지 않기 때문에 TCP보다 빠릅니다. 또한, 3단계 핸드셰이크가 없어 오버헤드가 줄어들고 데이터 전송이 더 빨라집니다.

2. 오류 감지

TCP와 마찬가지로, UDP는 데이터그램에 오류가 있는지 감지하기 위해 종단 간 체크섬을 사용합니다. 이를 통해 데이터 무결성을 유지하고 오류가 있는 데이터그램을 버립니다. 재전송 메커니즘이 없기 때문에, UDP는 버린 데이터그램을 복구하거나 재전송하지 않습니다.

단점

1. 믿을 수 없는

연결을 신뢰할 수 있게 만드는 기능이 UDP 연결에서는 없습니다. TCP와 달리, UDP는 전송된 데이터그램이 목적지에 도달할 것을 보장하지 않습니다. 그 결과, 데이터그램에는 타이머가 없으며 수신 장치에 의해 인정될 필요도 없습니다. 또한, 데이터그램이 올바른 순서로 목적지에 도착할 것이라는 보장도 없습니다.

2. 혼잡 제어 없음

UDP는 혼잡을 제어할 수 있는 메커니즘이 없습니다. 데이터그램을 인정하거나 데이터 전송을 제어하기 위해 윈도잉을 사용하지 않기 때문에, 혼잡을 방지할 방법이 없습니다. 결과적으로, 대량의 데이터 전송은 혼잡을 초래할 수 있습니다.

TCP와 UDP의 차이점

아래에서는 연결 지향 TCP와 비연결성 UDP의 차이점을 살펴보겠습니다.

1. 신뢰성

TCP는 UDP에 비해 더 신뢰할 수 있는 프로토콜입니다. TCP는 다른 데이터 세그먼트를 보내기 전에 데이터 세그먼트가 목적지에 도달했는지 확인합니다. 또한, 전송된 순서대로 세그먼트가 도착하도록 보장하고 목적지에 도달하지 않는 데이터를 재전송합니다. 추가로, TCP는 클라이언트가 서버가 처리할 수 있는 것보다 빠르게 패킷을 보내지 않도록 흐름 제어를 사용합니다. 반면에, UDP는 위의 어떤 것도 수행하지 않으며 가능한 한 빠르게 데이터를 전송하는 것에 더 관심이 있습니다.

2. 속도

TCP를 신뢰할 수 있게 만드는 기능들이 TCP보다 느리게 만듭니다. 3단계 핸드셰이크, 흐름 제어, 혼잡 제어, 재전송 메커니즘은 UDP의 일부가 아닙니다. 결과적으로, 더 적은 오버헤드로 UDP는 TCP보다 빠릅니다.

3. 사용법

TCP의 연결 지향적 데이터 전송은 데이터 손실을 받아들일 수 없고 신뢰성이 요구되는 애플리케이션에 적합합니다. 예를 들어, HTTP, SSH, FTP, SMTP, IMAP과 같은 프로토콜을 지원합니다. 반면에, UDP의 속도는 시간에 민감한 애플리케이션 또는 데이터 손실을 받아들일 수 있는 프로토콜에 적합합니다. 예를 들어, 실시간 비디오 또는 오디오 채팅, Voice over IP, DNS 요청, 온라인 게임 등이 있습니다.

결론

TCP와 UDP는 인터넷 통신의 기반이다. 이 두 프로토콜 없이는 인터넷에 연결된 장치들이 서로 통신하는 것이 어려울 것이다. 신뢰성과 정확성이 필요하다면 TCP가 가야 할 프로토콜이다. 반면에, 데이터 패킷의 손실보다는 빠르게 목적지에 도달하는 것이 더 중요하다면 UDP가 필요한 프로토콜이다.