본문 바로가기
CS

[Network] TCP, UDP의 특징과 비교

by psihyeong 2023. 6. 8.

 

TCP, UDP 비교

TCP와 UDP는 OSI 7 계층들 중 TCP/IP의 전송 계층에서 사용되는 프로토콜이다.

TCP는 연속성보다 신뢰성 있는 전송이 중요할 때 사용되는 프로토콜이며,

UDP는 TCP보다 빠르고 네트워크 부하가 적다는 장점이 있지만, 신뢰성 있는 데이터 전송을 보장하지는 않는다.

때문에 신뢰성보다는 연속성이 중요한 실시간 스트리밍과 같은 서비스에 자주 사용된다.

TCP의 특징

1. 연결형 서비스로 가상 회선 방식을 제공

  • 3-way handshaking 과정을 통해 연결을 설정하고,
  • 4-way handshaking 과정을 통해 연결을 해제한다.

2. 흐름 제어(Flow control)

  • 수신 측이 송신 측보다 데이터 처리 속도가 느릴 경우 데이터를 손실할 위험이 존재
  • 데이터 처리 속도를 조절하여 수신자의 버퍼 오버플로우를 방지
  • Stop and Wait : 매번 전송한 패킷에 대해 응답(ACK)을 받으면 다음 패킷을 전송하는 기법. 이는 패킷을 하나씩 보내고 확인해야 하기 때문에 비효율적
  • Sliding Window : 수신 측에서 설정한 '윈도우'의 크기만큼 송신 측에서 패킷을 전송하도록 하여 데이터의 흐름을 동적으로 조절하는 기법. 최초 윈도의 크기는 3way-handshaking 과정을 통해 설정되며, 이후 수신측에서 버퍼의 공간에 따라 변경. ('윈도우'값은 TCP header에 존재하고 관리됨) 윈도우에 포함된만큼은 수신 측의 응답(ACK)없이도 보낼 수 있지만, 그 이상은 보낼 수 없음. 그 이상의 데이터 패킷을 보내기 위해서는 수신의 응답(ACK)가 확인되어 다시 윈도우의 크기가 갱신되야함

3. 혼잡 제어(Congestion control)

  • 네트워크 내의 패킷 수가 과도하게 증가하지 않도록 방지
  • 흐름제어가 송 수신측의 패킷 수를 제어하는 기법이라면, 혼잡제어는 네트워크 내의 패킷 수를 제어하는 기법
  • AIMD : Additive Increase & Multicative Decrease의 약자로, 합 증가 & 곱 감소라는 의미. 처음에 패킷을 하나씩만 보내고 문제없이 해당 패킷이 도착하면 윈도의 크기를 증가시켜 전송. 만약 전송 실패가 발생할 경우 윈도우의 크기를 반으로 줄임 윈도우의 크기를 너무 조금씩 늘리기 때문에 네트워크의 대역을 제대로 활용하여 속도를 내기엔 시간이 걸린다는 단점이 있음.
  • Slow Start : 윈도우의 크기를 지수적으로 증가하다가 혼잡이 감지되면 1로 줄이는 방법. 윈도우의 크기가 처음에는 조금 느리게 증가하지만, 시간이 지날수록 윈도우의 크기가 빠르게 증가한다는 장점이 있음.

4. 높은 신뢰성을 보장

  • 신뢰성이 높은 전송을 하기 때문에 UDP보다 속도가 느림

5. 전이중(Full-Duplex), 점대점(Point to Point) 방식

  • 전이중(Full-Duplex) : 전송이 양방향으로 동시에 일어날 수 있다.
  • 점대점(Point to Point) : 각 연결이 정확히 2개의 종단점을 가지고 있다.

(1). 가상 회선 방식을 제공한다는 것은 발신지와 수신지를 연결하여 패킷을 전송하기 위한 논리적 경로를 배정한다는 말이다.

3-way handshaking 과정은 발신지와 수신지 사이에 논리적인 접속(세션)을 성립하는 과정을 의미한다.

TCP가 위와 같은 특징을 지니는 이유는 간단하다. TCP는 연결형 서비스로, 신뢰성을 보장하기 때문이다.

그래서 3-way handshaking의 과정도 사용하는 것이고, (2). 데이터의 흐름 제어나 (3). 혼잡 제어와 같은 기능도 하는 것이다.

(4). 하지만 이러한 기능 때문에 UDP보다 속도가 느리게 된다.

그렇기에 TCP는 연속성보다 신뢰성 있는 전송이 중요할 때 사용하는 프로토콜로 예를 들면, 파일 전송과 같은 경우에 사용된다.


TCP 3-way handshaking

: 양쪽 모두 데이터를 전송할 준비가 되었다는 것을 보장한다.

#1. Client -> Server : 내 말 들려?

#2. Server -> Client : 어 잘 들려! 내 말은 들려?

#3. Client -> Server : 잘 들려!

SYN(synchronize sequence numbers) - 연결 확인을 보내는 무작위의 숫자 값 (내 말 들려?)

ACK(acknowledgements) - Client 혹은 Server로부터 받은 SYN에 1을 더해 SYN을 잘 받았다는 ACK (잘 들려!)

Untitled.png

  • 0단계 - 통신전
    • 클라이언트는 포트가 닫힌 Closed 상태
    • 서버는 해당 포트로 항상 서비스를 제공할 수 있도록 Listen 상태
  • 1단계 - 클라이언트의 통신 요청 (SYN)
    • 임의의 포트 번호가 클라이언트 프로그램에 할당
    • 클라이언트 SYN Sent 상태
  • 2단계 - 서버의 통신 수락 (SYN + ACK)
    • 서버는 SYN Received 상태
    • 클라이언트 Established 상태
  • 3단계 - 클라이언트의 서버 응답 확인 (ACK)
    • 클라이언트는 서버의 응답을 확인했다는 표시로 ACK 전송
    • 서버 Established 상태
  • 이후, 전송할 데이터가 있으면 데이터를 전송할 수 있다.

TCP 4-way handshaking

: HTTP 요청과 응답 과정이 끝나면 연결과정을 종료하는 4-way-handshaking이 진행된다.

#1. Client -> Server : 나는 다 보냈어! 이제 끊자!

#2. Server -> Client : 알겠어! 잠시만~

#3. Server -> Client : 나도 끊을게!

#4. Client -> Server : 알겠어!

Untitled.png

  • 0단계 - 해제전
    • 클라이언트 ESTABLISHED 상태
    • 서버 ESTABLISHED 상태
  • 1단계 - 클라이언트의 종료 요청 (FIN)
    • 클라이언트 FIN-wait 상태
      • 서버가 FIN플래그로 응답하기 전까지 연결을 계속 유지
  • 2단계 - 서버 종료 수락 (ACK)
    • 클라이언트 FIN-wait 상태
    • 서버 CLOSE-wait 상태 
    • 동시에 해당 포트에 연결되어 있는 애플리케이션에게 close를 요청한다.
    • 서버는 일단 확인 메시지를 보내고 자신의 통신이 끝날 때까지 기다린다.
  • 3단계 - 서버의 찐 종료 신호 (FIN)
    • 데이터 다 보냈어! 연결 종료하자~
    • 클라이언트 FIN-wait 상태
    • 서버 LAST-ACK 상태
  • 4단계 - 클라이언트의 서버 응답 확인 (ACK)
    • 오키! 확인했어~
      • 클라이언트로부터 ACK메시지를 받은 서버는 소켓 연결을 해제한다.
    • 클라이언트 TIME WAIT 후 CLOSED 상태
      • 서버가 보내는 FIN보다 서버가 보내는 데이터가 늦게 보내질 경우(Routing 지연이나 패킷 유실로 인한 재전송 등)를 대비해 클라이언트는 일정 시간 동안 소켓을 닫지 않고 잉여 패킷을 기다린다
    • 서버 CLOSED 상태

 

TCP의 연결 과정에서 3way, 4way 단계 차이가 나는 이유

Client가 데이터 전송을 마쳤다고 하더라도 Server는 아직 보낼 데이터가 남아있을 수 있기 때문에 일단 ACK만 먼저 보내고, 데이터를 모두 전송한 후에 자신도 FIN 메시지를 보내기 때문


UDP의 특징

1. 비연결형 서비스로 데이터그램 방식을 제공한다.

  • 데이터의 전송 순서가 바뀔 수 있다.

2. 데이터 수신 여부를 확인하지 않는다.

  • TCP의 3-way handshaking과 같은 과정 X

3. 신뢰성이 낮다.

  • 흐름 제어(flow control)가 없어서 제대로 전송되었는지, 오류가 없는지 확인할 수 없다.

4. TCP보다 속도가 빠르다.

5. 1:1 & 1:N & N:N 통신이 가능하다.

(1). UDP는 비연결형 서비스이기 때문에, (2). 연결을 설정하고 해제하는 과정이 존재하지 않는다.

서로 다른 경로로 독립적으로 처리하며,  (3). 흐름 제어 또는 혼잡 제어와 같은 기능을 처리하지 않기에 (4). TCP보다 속도가 빠르며 네트워크 부하가 적다는 장점이 있지만, 신뢰성 있는 데이터 전송을 보장하지 못한다.

UDP는 신뢰성보다는 연속성 있는 전송이 필요할 때 사용하는 프로토콜로 예를 들면, 실시간 서비스(streaming)에 자주 사용된다.


TCP와 UDP 비교

TCP는 무결성을 보장하는 통신방법이기 때문에 데이터가 손실되면 다시 서버에게 요청하여 해당 데이터를 받아옵니다. 또한 데이터의 전송 순서를 보장하며 안정적이라는 특징 때문에 대부분의 통신 방법으로 사용됩니다. 안정적인 통신을 위해 통신 이전에 handshake과정을 수행하여 송수신부가 연결을 수행한 후 데이터를 주고받습니다. TCP 헤더에는 다음과 같은 정보들이 들어있습니다.

  1. 출발지 및 목적지의 포트번호
  2. 데이터 중 패킷의 순서
  3. handshake시 정보를 전송하고 확인하기 위한 플래그 비트
  4. 헤더의 크기
  5. 데이터가 손실되었는지 확인할 수 있는 체크섬
  6. 윈도우 사이즈, 긴급포인터, 옵션 등등

헤더의 크기가 UDP보다 상대적으로 크기 때문에 UDP보다 속도가 느리고 부하가 큽니다.

 

UDP는 무결성을 보장하지 않는 통신방법이기 때문에 데이터가 손실되었다면 해당 데이터를 버려버립니다. 또한 데이터의 전송 순서 역시 보장하지 않습니다. 안정적인 통신이 필요하지 않아 handshake과정을 수행하지 않는 특징이 있습니다. UDP 헤더에는 다음과 같은 정보들이 들어있습니다.

  1. 출발지 및 목적지의 포트번호
  2. 헤더의 크기
  3. 데이터가 손실되었는지 확인할 수 있는 체크섬

TCP 헤더에 비해 매우 적은양의 내용만 들어가 있어 TCP보다 상대적으로 빠른 속도가 빠르고 부하가 적습니다. 데이터의 무결성 보다는 전달 속도가 중요한 스트리밍 서비스와 같은 곳에서 사용합니다.

 

  TCP UDP
연결방식 연결형 서비스 비연결형 서비스
패킷 교환 방식 가상 회선 방식 데이터그램 방식
전송 순서 전송 순서 보장 전송 순서 보장 안함
수신 여부 확인 수신 여부 확인함 수신 여부 확인 안함
통신 방식 1:1 통신 1:1, 1:N, N:N
신뢰성 높다 낮다
속도 느리다 빠르다

 


Reference

https://inuplace.tistory.com/1081

https://it-recording.tistory.com/155

https://mangkyu.tistory.com/15

https://seongonion.tistory.com/74

https://velog.io/@gndan4/네트워크-전송-계층

https://dev-coco.tistory.com/144

'CS' 카테고리의 다른 글

[Network] OSI 7 계층과 TCP/IP 4 계층  (0) 2023.06.06