연결 지향형 TCP vs 비연결 지향형 UDP
공부 배경
IP/TCP 4계층에 관하여 공부한 바가 있다. Transport Layer(통신 계층)에 대해서 설명할 때, TCP프로토콜과 UDP프로토콜에 대한 개념이 나왔는데 이를 비교하여 설명하고자 한다.
Transport Layer
우선, Transport Layer에 대해 간단하게 정리하고 가자. 간단히 설명하면,
EndPoint간 신뢰성있는 데이터 전송을 담당하는 계층이다.
두 단어에 집중해 보겠다.
- 신뢰성 : 데이터를 순차적, 안정적으로 전달.
- 전송 : 포트번호에 해당하는 프로세스 데이터를 전달.
그렇다면, Transport Layer가 없다면 어떤 문제가 발생할까?
- 데이터 순차 전송이 원활히 되지 않을 것이다.
- 송수신자 간의 데이터 처리 속도 차이로 인해, 흐름(Flow) 문제가 발생할 것이다.
송신자가 많은 양의 데이터를 보내면, 컴퓨터는 처리할 수 있는 데이터의 용량이 한정적이므로, 수신자 측에서 처리할 수 있는 데이터 양을 초과하면 데이터 누락이 발생한다. - 네트워크 혼잡(Congestion) 문제가 발생할 경우 데이터 처리 속도가 늦어질 것이다.
따라서, 그림과 같이 데이터 손실 문제가 발생할 것이다.
이를 해결하기 위해 나온 개념이 바로, TCP 프로토콜이다.
TCP(Transmission Control Protocol)
- 신뢰성 있는 데이터 통신을 가능하게 해주는 프로토콜
- 연결 지향형 👉 양방향 통신
- 데이터의 순차 전송을 보장
- Flow Control (흐름 제어)
- Congestion Control(혼잡 제어)
- Error Detection(오류 감지)
TCP에서 중요한 개념은 Segment(세그먼트)이다.
Segment
그림과 같이 TCP는 데이터를 받아 들여 이것을 일정 단위로 분할한 뒤 TCP 헤더를 덧붙여 TCP 세그먼트를 생성하여 데이터를 전송한다.
이처럼 세그먼트로 데이터를 쪼개서 전송하게 되면,
- 데이터 전송시, 오류가 발생한 세그먼트만 재전송 할 수 있다.
- 네트워크 트래픽을 줄일 수 있다.
- 네트워크가 불안정할 때도 데이터를 전송할 수 있다.
TCP는 데이터를 세그먼트로 쪼개서 보내고, 오류 제어, 흐름 제어, 혼잡 제어 기능을 제공함으로써 안정적이고 신뢰성 있는 데이터 전송을 가능하게 한다.
TCP Header
Sequence number와 Acknowledgement number는 간단히 전송 계층의 순차 전송의 신뢰성을 담당한다. 그리고 9bit의 Flag Field는 TCP 연결 제어 및 데이터 관리를 하는데, 3 Way HandShaking으로 연결을 하고, 4 Way HandShaking으로 연결을 끊는 것에 대한 설명은 앞서 게시한 TCP/IP 프로토콜에 자세하게 작성해 놓았다.
TCP 정리
- 연결형 지향형
- 3-way handshaking 과정을 통해 연결을 설정하고,
- 4-way handshaking 과정을 통해 연결을 해제한다.
- 흐름 제어(Flow control)
- 데이터 처리 속도를 조절하여 수신자의 버퍼 오버플로우를 방지
- 혼잡 제어(Congestion control)
- 네트워크 내의 패킷 수가 과도하게 증가하지 않도록 방지
- 높은 신뢰성을 보장
- 신뢰성이 높은 전송을 하기 때문에 UDP보다 속도가 느림
- 전이중(Full-Duplex), 점대점(Point to Point) 방식
- 전이중(Full-Duplex) : 전송이 양방향으로 동시에 일어날 수 있다.
- 점대점(Point to Point) : 각 연결이 정확히 2개의 종단점을 가지고 있다.
UDP(User Datagram Protocol)
- TCP보다 신뢰성이 떨어지지만 전송 속도가 일반적으로 빠른 프로토콜
- 비연결 지향형
- Error Detection(오류 감지) 👉 TCP보다 섬세하지 않음
- 비교적 데이터의 신뢰석ㅇ이 중요하지 않을 때 사용 (ex. 영상 스트리밍)
User Datagram
그림과 같이 Application Layer에서 내려온 데이터에 UDP Header만 덧붙여 전송한다. 따라서, UDP의 경우 데이터 분할이 필요할 경우 Application Layer에서 직접 분할해야 한다.
UDP Header
UDP 헤더는 TCP헤더와 달리 매우 간단한 구조이다. 전송을 위한 port번호와 에러 검출을 위한 16 bit의 Checksum이 있다.
UDP 정리
- 비연결형 서비스로 데이터그램 방식을 제공한다.
- 데이터의 전송 순서가 바뀔 수 있다.
- 데이터 수신 여부를 확인하지 않는다.
- 신뢰성이 낮다.
- 흐름 제어(flow control)가 없어서 제대로 전송되었는지, 오류가 없는지 확인할 수 없다.
- TCP보다 속도가 빠르다.
- 1:1 & 1:N & N:N 통신이 가능하다.
정리
TCP는 연속성보다 신뢰성 있는 전송이 중요할 때 사용되는 프로토콜이며, UDP는 TCP보다 빠르고 네트워크 부하가 적다는 장점이 있지만, 신뢰성 있는 데이터 전송을 보장하지는 않는다. 그렇기 때문에 신뢰성보다는 연속성이 중요한 실시간 스트리밍과 같은 서비스에 자주 사용된다.