네트워크 전문가가 되기 위한 고속 성장 일지 by Net Wiz Team

1.5. Compare TCP to UDP 본문

CCNA-Fundamental

1.5. Compare TCP to UDP

리리아나(Net Wiz) 2024. 2. 26. 17:14

1.5. Compare TCP to UDP

 

TCP와 UDP (TCPvsUDP)

 

네트워크 세계에서 흔히 볼 수 있는, 그리고 중요한 개념 중 하나가 TCP와 UDP 프로토콜입니다. TCP와 UDP 프로토콜은 OSI 7계층의 4계층에서 동작하는 프로토콜로써, 각 호스트간 (예 : 클라이언트 <-> 서버) 데이터 전송을 위한 전반적인 조율을 담당하고 있습니다.

예를들어, 책 100페이지를 네트워크를 통해 전송한다고 가정해보겠습니다.

(네트워크는 회선 교환 방식과 같이 하나의 회선을 통해서만 데이터를 전송하지 않고, 패킷 교환 방식을 채택하여 여러가지 경로를 통해 책의 여러 페이지들을 나누어서 전송할 수 있습니다.)

UDP는 상대방이 수신했는지 안했는지 상관하지 않고 100페이지를 네트워크가 한 번에 전송해줄 수 있을 만큼의 페이지 씩으로 크기를 나누어 계속 보내기만 합니다. (4계층에서 중계만 해줌) 상대방이 잘 수신했는지도 확인하지 않죠.

그러나 TCP의 경우에는 보내는 쪽에서 몇 페이지씩 나누어 보낸 후, 수신 측에서 해당 페이지들을 잘 수신했는지 응답을 하면 그 때 다시 나머지 페이지들을 보냅니다.

 

위와 같은 TCP와 UDP의 세부적인 원리, 특징 그리고 기능들이 어떤 것들이 있는지 아래와 같이 상세히 알아보도록 하겠습니다.

1. TCP (Transmission Control Protocol)

연결형 서비스를 지원하는 프로토콜로써, 호스트간 신뢰성 있는 데이터 전달과 흐름제어를 가능하게 합니다.

일반적으로 TCP와 IP를 함께 사용하는데, IP가 데이터의 배달을 담당한다면 TCP는 데이터의 추적 및 관리하게 해줍니다.

프로토콜 번호는 6입니다.

[TCP 동작 원리 및 절차]

3-Way-Handshaking : 처음 TCP 세션을 시작할 때
TCP 데이터 전송(나머지 세부 내용은 생략)
TCP 세션 종료(나머지 세부 내용은 생략)

(1) 3-Way Handshaking 과정을 통해 먼저 양쪽의 호스트들이 인사를 합니다. 순서는 반드시 SYN -> SYN/ACK -> ACK입니다. 이후 'Established' 상태가 되어 TCP 커넥션이라는 가상의 통신 회선이 구성됩니다. 단, 이때는 실제 데이터를 교환하지 않습니다.

(2) 데이터는, 확인 응답/전송제어/흐름제어를 통해 주고 받습니다.

> 확인 응답의 경우, 시퀀스 번호와 ACK 번호를 통해 데이터를 수신한 위치를 파악하여 수신을 확인한 다음 이 후의 데이터를 전송합니다.

> 전송 제어의 경우, 특정 시간 만큼 기다리는 동안 상대방이 데이터를 수신 했다는 ACK 번호를 보내지 않을 경우 데이터를 다시 보내는 방식입니다.

> 흐름 제어의 경우, TCP 세션에서 지정된 윈도우 사이즈를 보내는 동안에는 ACK를 보내지 않고 연속해서 데이터를 보내면서 신뢰성을 유지하는 동시에 전송 효율을 높이는 방식입니다.

- 특징 -

(1) 신뢰성 보장(Reliable)

TCP의 구성 특성상 패킷 손실, 중복, 순서바뀜 등이 없도록 합니다. TCP와 함께 동작하는 IP 계층의 신뢰성 없는 서비스를 보완해 줍니다.

(2) 연결지향적(Connection-Oriented)

같은 전송 계층의 UDP가 비연결성(Connectionless)의 특징을 갖고 있는 것과 달리, TCP는 연결 지향적입니다.

특히 TCP는 느슨한 연결(Loosly Connected)의 성격을 갖고 있으며, 강한 연결을 구성하는 가상 회선과는 그 성격이 다릅니다. 

또한 연결관리를 위해 연결 설정 및 연결 해제 과정을 수행합니다.(시작/종료)

이에 7계층의 어플리케이션 또한 프로세스는 TCP가 제공하는 연결성을 바탕으로 서로 통신할 수 있습니다.

(3) 연결 식별/다중화/포트번호

> 각 호스트의 소켓 (호스트의 IP 주소 및 포트번호) 정보로 하나의 연결(회선)임을 식별할 수 있습니다.

> 단말 연결 뿐만 아니라 다수 연결의 동시 처리도 가능합니다.(패킷 기반 통신)

> TCP는 포트 번호를 참조하여 어플리케이션과의 연결점을 식별할 수 있습니다.

(4) 전이중 전송방식(Full-Duplex, 양방향성)

호스트 간 각각 프로세스가 서로 동시에 세그먼트를 전달할 수 있습니다.

(데이터 순서 번호 파악 및 유지)

(5) 멀티캐스트 불가능

1:1 통신을 하므로 유니캐스트 통신을 합니다. 단일 송신자와 단일 수신자 간에 단일 경로 연결이 설정되는 특징을 갖습니다. (단, 차세대 전송계층 프로토콜인 MPTCP에서는 다수의 경로와 다수의 연결이 가능해졌습니다.)

(6) 응용 계층과 바이트(Byte)의 흐름으로 데이터를 주고 받음

TCP 계층과 상위의 응용 계층 간에 데이터를 주고 받는 과정을 바이트들(Bytes)의 연속적인 흐름으로 보고 이를 묶어 세그먼트화하여 전송합니다. 이는 응용계층의 개발자들이 흐름제어, 회선관리, 전송단위 등을 신경쓰지 않도록 하게 합니다.

(** TCP 세그먼트 : TC에서 IP로 전달되는 정보의 단위. 양 끝단의 TCP 모듈간에 서로 교환되는 데이터, 통상, 수 백 바이트 정도 크기로 나타냄.)

(7) 세그먼트화(데이터를 패키징 처리)

바이트들을 모아서 세그먼트화 하고 TCP 헤더를 붙인 다음, 이들의 순서를 제어합니다. 아울러 TCP 세그먼트의(한번에 보낼 수 있는) 최대 크기를 MSS 라고 합니다.(단, MTU보다 더 작아야 함)

(8) 흐름제어(Flow Control)

송신 및 수신 속도를 일치시키는 작업을 합니다. 예를 들어, 서버는 100Mbps 속도를 제공하지만, 사용자 컴퓨터에서는 10Mbps 속도만 이용가능한 경우에는 데이터 손실이 발생할 수 있습니다. 특히 이러한 경우에는 불필요한 응답과 데이터 전송이 빈번히 송신/수신 측 간에 발생할 수 있습니다. 이런 경우를 방지하기 위하여 Stop and Wait 방식과 Sliding Window 방식을 사용합니다.

> Stop and Wait : 전송한 패킷에 대해 매번 확인 응답을 받고 나서 그 다음 패킷을 전송하는 방법

> Sliding Window : 수신 측에서 수용 가능한 윈도우 크기만큼 송신 측에서 확인 응답없이 세그먼트를 전송할 수 있게 하여 데이터 흐름을 동적으로 조절하는 제어 기법.

(9) 혼잡제어(Congestion Control)

네트워크가 혼잡하다고 판단될 때(예> 특정 라우터에 트래픽이 몰릴 경우 호스트는 데이터를 재전송하여 결국 혼잡이 가중됨), TCP는 데이터의 전송 속도를 강제로 줄입니다. 혼잡제어를 위한 주요 방법으로는 느린 시작, 혼잡 회피, 수신 윈도우 및 혼잡 윈도우 크기 결정이 있습니다. 아울러, 흐름제어가 송신 측과 수신 측 사이의 전송속도를 다루는데 반해 혼잡제어는 호스트와 라우터를 포함한 보다 넓은 관점에서 전송 문제를 다루는 영역입니다.

(10) 비 실시간 응용

TCP 통신 방식의 특성상 TCP는 데이터 전달에 대한 신뢰성 보장을 하지만, 속도지연에는 취약할 수 있기 때문에 실시간 통신이 필요한 상황에서는 대체로 UDP를 사용합니다.(예> 영상 스트리밍 서비스)

 

2. UDP (User Datagram Protocol)

비연결형 서비스를 지원하는 프로토콜로써, TCP와 비교하여 호스트 간 완전성 또는 신뢰성이 없는 데이터 전달을 합니다.

그러나 가상 회선을 굳이 확립할 필요가 없고 유연한 특성이 있으므로 효율적인 응용 계층의 데이터 전송이 필요한 곳에 적합합니다. 프로토콜 번호는 17입니다.

[UDP 동작 원리 및 절차]

[UDP. 세션]

TCP에 비해 UDP는 전송만 할 뿐 확인 응답을 하지 않아 비교적 단순한 구조입니다.

- 특징 - 

(1) 비연결성이고, 신뢰성이 없으며, 순서화되지 않은 데이터그램 서비스를 제공합니다.

TCP와 비교하면 다음과 같습니다.

> 확인응답 없음 : 메시지가 제대로 도착했는지 확인하지 않습니다.

> 순서제어 없음 : 수신된 메시지의 순서를 맞추지 않습니다. (TCP 헤더와 달리 순서번호 필드 없음)

> 흐름제어 없음 : 흐름제어를 위한 피드백 제공 안함

> 오류제어 거의 없음 : 검사합을 제외한 특별한 오류 검출 및 제어가 없습니다. 따라서 응용 계층 등의 UDP를 사용하는 프로그램 쪽에서 오류제어 기능을 스스로 갖추어야 합니다. (예> 별도 프로그램을 구현하는 등의 방안이 필요)

> 비연결성 : TCP와 같이 Handshaking 과정이 없으므로 논리적인 가상 회선 연결이 필요 없습니다.

(2) 빠른 요청과 응답 및 멀티캐스팅이 가능합니다.

> 빠른 요청과 응답이 필요한 실시간 통신 또는 응용계층 프로그램에 적합합니다.

(예> 비디오 스트리밍 등)

(3) 헤더가 단순

헤더는 고정 크기의 8바이트(tcp는 20바이트) 만 사용합니다. 따라서, tcp와 비교하여 헤더의 처리에 적은 리소스가 필요합니다.

(4) 데이터 전송 단위 : 메시지 (tcp 데이터 전송단위 : 세그먼트)

(5) 최대 데이터 크기 : 65507 바이트(65535바이트에서 udp 헤더 8바이트를 제외)

(6) 사용사례

주로 다음과 같이 실시간성 보장 또는 빠른 연결이 필요한 서비스들에 이용 됩니다.

> 도메인 이름 서비스(DNS)
> IPTVl

> 음성 인터넷 프로토콜(VolP)

> TFTP

> IP터널

> 비디오 스트리밍

> 온라인 게임

 

3. TCP vs UDP 비교 / 차이점

4. MPTCP (Multipath TCP)

2013년도에 IETF에서는 MPTCP라는 새로운 기술을 발표합니다. MPTCP의 다수의 TCP경로를 구성하고, 구성한 다수의 경로로 동시에 데이터를 송수신하는 방법입니다.

예를 들어 사용자가 100Mbps 속도의 LTE 대역폭과 500Mbps속도의 Wi-Fi 대역폭을 모두 이용할 수 있을 때, MPTCP Gateway는 이를 하나의 망 인것처럼 구성하여 최대 600Mbps 대역폭을 이용할 수 있게 해줍니다.

사용자는 빠른 속도의 데이터 서비스와 데이터 요금 절감 효과를 경험할 수 있으며 이동통신사는 망 효율성을 극대화할 수 있습니다.