네트워크 통신에서 데이터 전송 방식에는 연결형 서비스와 비연결 서비스 두 가지가 있는데, 연결형 서비스 (Connection-Oriented Service)는 데이터 통신에 있어서 신뢰성과 순서를 중요하게 여기며, 데이터를 주고받기 전에 미리 연결을 설정하는 반면에, 비연결 서비스 (Connectionless Service)는 데이터 통신에 있어서 연결 설정 단계가 없고, 각각의 데이터 패킷은 독립적으로 처리한다. TCP와 UDP는 연결형 서비스와 비연결 서비스에서 제공하는 프로토콜이다. TCP와 UDP에 대한 내용은 다음과 같다.
TCP는 컴퓨터 간 데이터 통신을 위한 연결형 서비스로, 데이터의 신뢰성을 보장하는 연결 지향형 프로토콜이다.
TCP는 양방향 통신을 지원하며, 전이중 통신 방식을 사용한다.
TCP는 가상 회선 방식을 제공하며, 연결 설정과 해제를 위해 3-Way Handshaking 및 4-Way Handshaking 과정을 사용한다.
TCP는 데이터의 신뢰성을 중요시하며, 데이터 손실 및 오류를 최소화하고 재전송 기능을 제공한다.
UDP에 비해 전송 속도가 상대적으로 느리다. 이는 신뢰성을 확보하기 위한 오버헤드 때문이다.
TCP는 스트림 전송 서비스를 제공하며, 데이터의 순서를 보장하여 수신 측에서의 데이터 순서가 최종 목적지에서도 일치하도록 한다.
TCP는 흐름 제어를 통해 데이터 처리 속도를 조절하여 수신 측의 버퍼 오버플로우를 방지하고, 혼잡 제어를 통해 네트워크 내의 패킷 수를 관리한다. 또한, 오류 제어 기능은 데이터의 손상이나 손실을 탐지하고 이를 복구하기 위해 ARQ(Automatic Repeat reQuest)와 같은 메커니즘을 사용하여 데이터가 손실 또는 손상 시 재전송을 수행하여 데이터의 신뢰성을 유지한다.
3-Way Handshaking은 TCP에서 연결 설정을 위해 사용되는 프로세스이다. 이 과정은 다음과 같이 세 단계로 이루어진다.
클라이언트가 서버에 연결을 요청하기 위해 클라이언트는 SYN(시작) 패킷을 전송한다. 이 패킷에는 초기 순서 번호(Initial Sequence Number)가 포함된다. 이 번호는 데이터 스트림의 일부를 식별하기 위한 값이다.
서버는 클라이언트의 SYN 요청을 받으면 이를 수락하고 연결을 설정하기 위한 준비를 한다. 서버는 클라이언트에게 SYN-ACK(시작 및 확인) 패킷을 전송한다. 이 패킷은 서버의 초기 순서 번호와 함께 클라이언트가 보낸 초기 순서 번호에 1을 더한 값을 포함한다.
클라이언트는 서버로부터 받은 SYN-ACK 패킷을 수신하면 이에 응답하기 위해 ACK(확인) 패킷을 서버로 전송한다. 이 패킷에는 클라이언트의 초기 순서 번호에 1을 더한 값을 포함하며, 클라이언트와 서버 간의 연결이 설정된다.
이러한 3-Way Handshaking 과정을 통해 클라이언트와 서버는 서로의 신뢰성 있는 연결을 설정하고 데이터를 안전하게 주고받을 수 있게 된다. 연결이 설정된 후에는 데이터 전송이 이루어지며, 데이터 전송이 완료되면 연결을 종료하기 위한 4-Way Handshaking 과정이 이루어진다.
4-Way Handshaking은 TCP에서 연결 종료를 위해 사용되는 프로세스이다. 이 과정은 다음과 같이 네 단계로 이루진다.
클라이언트가 서버와의 연결을 종료하고자 할 때, 클라이언트는 FIN(종료) 패킷을 서버로 전송한다. 이 패킷은 클라이언트가 더 이상 데이터를 보내지 않을 것임을 나타낸다.
서버는 클라이언트로부터 받은 FIN 요청을 수락하고, 데이터를 모두 받았음을 의미하는 ACK(확인) 패킷을 클라이언트로 전송한다. 이때, 서버는 아직 보내지 않은 데이터가 있는 경우 이 데이터를 클라이언트로 전송할 수 있다.
서버가 모든 데이터를 전송했고 클라이언트와의 연결을 종료하고자 할 때, 서버는 FIN(종료) 패킷을 클라이언트로 전송한다. 이 패킷은 서버가 더 이상 데이터를 보내지 않을 것임을 나타낸다.
클라이언트는 서버로부터 받은 FIN 요청을 수락하고, 데이터를 모두 받았음을 의미하는 ACK(확인) 패킷을 서버로 전송한 후, 클라이언트와 서버 간의 연결을 종료한다.
4-Way Handshaking은 클라이언트와 서버 간의 연결을 안전하게 종료하기 위한 프로세스로, 양측 모두가 데이터 송수신을 완료하고 연결을 종료함을 확인한다. 이를 통해 데이터의 신뢰성과 일관성을 유지하며 연결을 해제할 수 있다.
GO-Back-N ARQ는 손상되거나 분실된 프레임 이후의 프레임을 모두 재전송하는 방식으로, 추가 버퍼가 필요하지 않으며 상대적으로 간단한 구조를 가지고 구현이 단순하다. 하지만 단점으로는 하나의 패킷으로 인해 많은 패킷을 불필요하게 재전송해야 하는 점이 있다.
Selective-Reject ARQ는 손상되거나 분실된 프레임만을 재전송하는 방식다. 이 방식은 추가적인 로직이 필요하며 순차적이지 않은 프레임을 재배열하기 위해 버퍼가 필요하다.
Stop-and-wait ARQ는 수신 측에서 전송한 1개의 프레임을 송신 측에서 손상 및 분실을 검사하여 손상 분실 시 재전송하는 방식이다. 이 방식은 구현 방식이 단순하여 최대 프레임 크기의 버퍼를 하나만 필요로 하다. 그러나 단점으로는 송신 측에서 확인을 할 때까지 다음 프레임을 전송할 수 없으므로 전송 효율이 떨어진다는 점이 있어 실제 네트워크에서는 채택되지 않는 방식이다.
Adaptive ARQ는 전송 효율을 최대화하기 위해 데이터 블록의 길이를 채널의 상태에 따라 동적으로 조절하는 방식이다. 이 방식은 전송 효율을 최적화하는 데 효과적이지만 제어 회로가 복잡하고 비용이 많이 들어가므로 현재는 거의 사용되지 않는 방식이다.
UDP는 연결 설정 과정 없이 데이터를 주고받는 비연결형 서비스를 제공하는 전송 계층 프로토콜이다. UDP는 데이터를 데이터그램 단위로 처리하며, 데이터그램은 독립적인 패킷을 의미한다. UDP는 주로 연속성보다는 데이터의 신속한 전달이 중요한 서비스에 사용된다. 예를 들어 DNS, 음성 인터넷 프로토콜(VoIP), 온라인 게임, 실시간 스트리밍 서비스 등에서 활용된다.
UDP는 데이터를 송수신할 때 연결 설정 과정을 거치지 않는다. 이는 TCP와 대조적인 특징으로, 빠른 데이터 전송이 요구되는 상황에서 유용하다.
데이터 손실 또는 오류 복구 기능이 없으며, UDP는 데이터를 전송할 때 신뢰성을 보장하지 않는다. 이는 데이터가 전송 중 손실될 수 있거나 순서가 바뀔 수 있다는 의미이다. 따라서 UDP는 신뢰성보다는 연속성이 중요한 서비스에 주로 사용된다.
UDP는 데이터그램 단위로 데이터를 처리하는데, 이는 각각의 데이터그램이 서로 독립적이며, 경계가 명확하게 구분됨을 의미한다. 이러한 특징은 데이터를 쪼개서 보내거나, 메시지 크기를 파악하기 위해 유용하다.
UDP는 연결 설정 및 신뢰성을 확인하는 추가적인 오버헤드가 없기 때문에 전송 속도가 빠르다. 따라서 UDP는 실시간 통신, 스트리밍 서비스, DNS(Domain Name System) 등에서 자주 사용된다.
UDP의 가장 큰 장점은 빠른 전송 속도와 오버헤드가 적다는 점이지만, 단점으로는 데이터 손실이나 순서 변경이 발생할 수 있다는 점을 고려해야 한다.
| TCP | UDP | |
|---|---|---|
| 연결 방식 | 연결형 서비스 | 비연결형 서비스 |
| 데이터 단위 | 세그먼트 | 데이터그램 |
| 패킷 교환 방식 | 가상 회선 방식 | 데이터그램 방식 |
| 신뢰성 | 신뢰성 보장 | 신뢰성 미보장 |
| 통신 속도 | UDP보다 느리다 | TCP보다 빠르다 |
| 통신 방식 | 1:1 통신 | 1:1 or 1:N or N:N 통신 |
| 용도 | 웹 브라우징, 이메일 전송 등 | 실시간 스트리밍, 온라인 게임, DNS 등 |
TCP와 UDP는 각각의 특징과 장단점을 가지고 있으므로, 어떤 프로토콜을 선택할지는 사용하는 응용 프로그램의 요구 사항과 상황에 따라 다르다.
이러한 시간 초과 조건은 3-Way Handshake 중 연결 설정 및 데이터 교환 단계에서 중요한 역할을 한다. Connection Timeout은 클라이언트가 서버로의 연결 설정이 지연되거나 실패할 때 발생하며, Read Timeout은 이미 연결이 설정된 후 데이터를 주고받을 때 지연이나 문제가 발생할 때 발생한다.