[네트워크] TCP / UDP의 차이와 전송 방식 이해하기

heon.blog·2025년 8월 13일

네트워크

목록 보기
5/5
post-thumbnail

1. 개요

IP는 신뢰할 수 없는 통신비연결형 통신이라는 한계가 있습니다.
전송 계층은 이러한 IP의 한계를 극복하여 신뢰성 있는 통신연결형 통신을 제공합니다.

이러한 전송 계층 프로토콜로는 TCPUDP가 있습니다.

이번 포스팅에서는 TCP와 UDP의 차이를 알아보고, 연결형 통신 프로토콜인 TCP에서의 연결 수립 과정(3-way Handshake)에 대해 살펴보겠습니다.


2. TCP와 UDP 차이

TCP와 UDP는 모두 전송 계층에서 데이터를 보내기 위한 프로토콜이지만, 성격이 크게 다릅니다.

특징TCPUDP
연결 방식연결형 통신비연결형 통신
신뢰성OX
순서 보장OX
오류 제어OX
속도느림빠름
용도웹, 이메일, 파일 전송스트리밍, 게임, 실시간 통신

먼저 TCP연결형 통신입니다. 데이터를 보내기 전에 먼저 상대와 연결을 수립하고, 그 연결을 통해 데이터를 전송합니다.
이 과정 덕분에 TCP는 데이터가 순서대로 도착하는지, 손실된 데이터는 없는지를 확인할 수 있으며, 신뢰성을 제공하는 프로토콜이라고 할 수 있습니다.
또한, 너무 빨리 보내서 수신 측이 처리하지 못하면 속도를 조절하는 흐름 제어와, 네트워크가 혼잡할 때 전송 속도를 조절하는 혼잡 제어 기능도 제공합니다.
그래서 웹 브라우징, 이메일, 파일 전송처럼 정확한 데이터 전달이 중요한 서비스에서 주로 사용됩니다.

반면 UDP비연결형 통신이며, 신뢰성이 없는 프로토콜입니다. 데이터를 보내기 전에 별도의 연결을 만들지 않고, 바로 데이터를 전송합니다.
이 때문에 UDP는 데이터가 순서대로 도착하는지 확인하지 않으며, 일부 데이터가 손실될 수도 있습니다.
하지만 연결을 만들고 확인하는 과정이 없으므로 TCP보다 속도가 빠르고 오버헤드가 적습니다.
그래서 실시간 스트리밍, 온라인 게임, 화상 통화처럼 속도가 중요하고 일부 데이터 손실이 허용되는 서비스에서 주로 사용됩니다.


3. TCP와 UDP 전송 방식

TCP와 UDP는 데이터 전송 방식에서 큰 차이를 보입니다.

  • TCP는 연결형 통신이므로, 데이터를 보내기 전에 먼저 상대와 연결을 수립합니다.
    연결이 수립되면 데이터를 순서대로 전송하며, 손실된 데이터는 재전송하고, 순서를 보장합니다.
    데이터를 모두 주고받은 뒤에는 안전하게 연결을 종료합니다.
    정리하면 TCP의 전송 과정은 다음과 같습니다.

    1. 연결 수립 (3-Way Handshake)
    2. 데이터 전송
    3. 연결 종료 (4-Way Handshake)
  • UDP는 비연결형 통신이므로, 데이터를 보내기 위해 연결을 만들 필요가 없습니다.
    데이터를 연결 없이 보내며, 순서나 손실 여부를 확인하지 않습니다.
    따라서 전송 속도가 빠르고 오버헤드가 적지만, 신뢰성은 보장되지 않습니다.

TCP는 신뢰성과 순서 보장, UDP는 빠른 전송과 낮은 오버헤드가 특징입니다.


4. 3-Way Handshake

3-Way Handshake는 TCP가 통신을 시작할 때 사용하는 연결 수립 과정입니다.
송신 측과 수신 측이 서로 통신할 준비가 되었는지를 확인하고, 양방향으로 동기화(Synchronize)를 수행합니다.

과정은 총 세 단계로 이루어집니다.

  1. SYN (Synchronize)

    • 클라이언트가 서버에게 연결 요청(SYN)을 보냅니다.
    • 이때 "내가 보낸 데이터의 순서를 x번부터 시작하겠다"라는 식으로 시퀀스 번호(Sequence Number)를 함께 보냅니다.
  2. SYN + ACK (Synchronize + Acknowledge)

    • 서버가 요청을 수락하며 클라이언트에게 다음 기대하는 번호는 x+1번이라고 응답(ACK) 합니다.
    • 동시에 서버 자신의 시퀀스 번호도 설정(SYN)하여 보냅니다.
    • 즉, "좋아! 난 네 요청을 받았고, 내 데이터는 y번부터 시작할게"라는 뜻입니다.
  3. ACK (Acknowledge)

    • 클라이언트가 요청을 수락하며 서버에게 다음 기대하는 번호는 y번이라고 응답(ACK) 합니다.
    • 이제 양쪽 모두 통신을 시작할 준비가 완료됩니다.

3번의 메시지 교환을 통해 양측이 연결 의사를 확인하고, 시퀀스 번호를 동기화하여 데이터 전송 준비가 완료됨을 보장하는 과정이 바로 3-Way Handshake입니다.
이를 통해 TCP는 신뢰성 있는 연결을 제공합니다.


5. 4-Way Handshake

4-Way HandshakeTCP 연결을 종료할 때 사용되는 과정입니다.
통신을 끝내려는 쪽과 이를 확인하는 쪽이 서로 연결을 안전하게 닫기 위해 4번의 메시지를 주고받는 절차입니다.

과정은 총 네 단계로 이루어집니다.

  1. FIN (Finish)

    • 클라이언트가 서버에게 연결을 종료하겠다(FIN)는 요청을 보냅니다.
    • 이때 클라이언트는 더 이상 보낼 데이터가 없음을 알립니다.
  2. ACK (Acknowledge)

    • 서버가 FIN을 받고, 알겠다(ACK)는 응답을 보냅니다.
    • 하지만 서버는 아직 보낼 데이터가 남아 있을 수도 있으므로 바로 연결을 닫지는 않습니다.
  3. FIN (Finish)

    • 서버가 자신도 더 이상 보낼 데이터가 없을 때, 연결 종료 요청(FIN)을 클라이언트에게 보냅니다.
  4. ACK (Acknowledge)

    • 클라이언트가 FIN을 받고, 알겠다(ACK)는 응답을 보냅니다.
    • 이제 양측 모두 데이터를 주고받을 필요가 없으므로 연결이 완전히 종료됩니다.

4번의 메시지 교환을 통해 양측이 안전하게 데이터를 모두 전송했음을 보장하고, 연결을 정상적으로 종료하는 과정이 바로 4-Way Handshake입니다.


6. TCP의 신뢰성과 전송 제어

TCP는 데이터를 안정적이고 정확하게 전달하기 위해 여러 가지 기능들을 제공합니다.
주요 기능으로는 재전송을 통한 오류 제어, 순서 보장, 흐름 제어, 혼잡 제어가 있습니다.

1. 재전송을 통한 오류 제어

  • 데이터를 보낸 후 ACK를 받지 못하면 타임아웃 재전송을 수행합니다.
  • 중복 ACK를 여러 번 받으면 빠른 재전송(Fast Retransmit)으로 즉시 데이터를 다시 보냅니다.
  • 이 과정을 통해 손실된 데이터 없이 정확하게 전송할 수 있습니다.

2. 순서 보장

  • 패킷이 순서대로 도착하지 않아도 TCP가 순서를 재조립하여 애플리케이션에 올바른 순서로 전달합니다.
  • 체크섬을 사용해 데이터 손상 여부를 확인하고, 필요하면 재전송합니다.

3. 흐름 제어 (Sliding Window)

  • 수신 측의 처리 능력을 고려하여 송신 속도를 조절합니다.
  • 슬라이딩 윈도우 방식을 사용하여, 수신 측이 처리 가능한 데이터 양(윈도우 크기)을 송신 측에 알려주고,
    송신 측은 해당 범위 내에서 데이터를 전송하며, ACK를 받으면 창(Window)을 앞으로 이동시켜 다음 데이터를 보냅니다.

4. 혼잡 제어

  • 네트워크가 혼잡할 때 전송 속도를 조절하여 패킷 손실을 줄이고 효율적으로 데이터를 전달합니다.
  • 대표적인 알고리즘으로는 Slow Start, Congestion Avoidance, Fast Retransmit, Fast Recovery 등이 있습니다.

TCP는 이러한 기능 덕분에 데이터 손실 없이 안정적인 통신을 보장합니다.


7. 마무리

이번 포스팅에서는 TCP와 UDP의 차이와, TCP에서 데이터를 안정적으로 전송하기 위한 연결 수립과 종료 과정(3-Way/4-Way Handshake), 그리고 TCP의 전송 제어 기능에 대해 살펴보았습니다.

  • TCP는 연결형 통신으로, 신뢰성, 순서 보장, 흐름 제어, 혼잡 제어 기능을 통해 데이터를 안전하게 전달합니다.
  • UDP는 비연결형 통신으로, 빠른 전송과 낮은 오버헤드를 제공하지만 신뢰성은 보장되지 않습니다.

이번 포스팅에서 배운 내용을 통해 네트워크 전송 방식 (TCP/UDP)에 대한 개념을 명확히 구분할 수 있을 것입니다.

profile
유익한 글을 목표로 하는 공간입니다.

0개의 댓글