Network

[Network] TCP와 UDP 프로토콜이란 무엇인가?

창모의 개발사전 2026. 4. 13. 22:20

프로토콜

: 네트워크에서 컴퓨터 간 데이터를 주고받기 위해 정의된 공통의 약속

즉, 우리가 통신을 하며 데이터를 주고받기 위해서는 서로가 모두 알아볼 수 있는 형태로 되어 있어야 이게 어떤 데이터이며 어떤 식으로 처리할 것인가?를 알 수 있다.

 

OSI 7 계층, TCP/IP 4 계층 모델들은 이러한 프로토콜들을 기반으로 데이터를 주고 받는 통신을 진행한다.

각 계층마다 데이터를 전송하기 위해 담당하는 역할이 있으며 이에 따라 사용되는 프로토콜이 다르기 때문에 상황에 맞는 프로토콜을 이용하여 서비스를 구성하고 운영하는 것이 중요하다.

우리가 오늘 알아볼 프로토콜은 전송 계층(L4)에서 사용되는 프로토콜로, 정말 많이 들어봤을 TCP / UDP 프로토콜이다 .

 


1. 전송 계층의 역할 (L4)

전송 계층은 하위 계층인 네트워크 계층 L3(IP)에서 던져주는 패킷들을 어떻게 처리할 것인지를 결정하는 역할을 한다.

3계층을 통해 상대방의 IP주소로 목적지 연결을 성공했다면, 4계층에서는 상대방 컴퓨터의 프로세스내 컴퓨터 프로세스를 이어주는 역할을 하는 것이다. 예를 들어 내 컴퓨터 카톡 - 상대방 컴퓨터 카톡을 이어 대화할 수 있게 해주는 경우로 보면 된다.

  • 포트 번호를 통한 프로세스 식별
  • 데이터의 분할과 재조립
  • 오류 및 흐름 제어

쉽게 말해 IP 주소로 들어온 데이터를 실제 서비스에 연결하기 위한 작업(프로세스 식별 : Port)과 '어떤 상태'로 전달될지 최종적으로 조절하는 계층이라고 볼 수 있다.

 

이러한 역할을 하는 프로토콜 대표적으로 TCP UDP 두 개로 나누어 볼 수 있다.

항목 TCP (Transmission Control Protocol) UDP (User Datagram Protocol)
연결 방식 연결형 (3-Way-Handshake) 비연결형 (연결 설정 없이 바로 전송)
신뢰성 높음 (데이터 분실 시 재전송) 낮음 (데이터 분실해도 확인 없이 전송)
전송 순서 보장함 (순서에 맞도록 재전송 요청) 보장 안 함 (도착 순서가 섞일 수 있음)
전송 속도 느림 (확인 절차 등이 많아 느림) 매우 빠름 (확인 절차 없이 바로 전송)
흐름/혼잡 제어 지원함 (네트워크나 수신자 상태에 맞게 조절) 지원 안 함 (상태 상관없이 그냥 전송함)
주요 서비스 웹 서핑(HTTP), 이메일(SMTP), 파일 전송(FTP) 실시간 스트리밍, 온라인 게임, 인터넷 전화

2. TCP (Transmission Control Protocol)

TCP는 전송 제어 프로토콜로, 데이터를 전송할 때 목적지를 잘 찾아갔는지, 손실된 데이터는 없는지 끝까지 확인하면서 통신하는 신뢰성 있는 프토로콜이다.

 

보통 현대 인터넷은 패킷 교환 방식으로 통신을 주고 받는데, 이 방식의 문제점은 전송 중간에 패킷이 사라지거나 네트워크 상황에 따라 전송된 순서가 아닌 다른 순서로 섞일 수 있는 문제가 발생한다.

 

TCP 프로토콜은 이러한 본질적인 문제를 해결하기 위해 탄생했으며 나와 상대방을 가상의 회선으로 연결되었다 생각하고 통신을 하는 가상 회선 방식연결형 서비스를 제공한다. 이는 데이터 손실, 오류, 순서 변화를 방지하며 응용 프로그램 간에 안정적인 통신을 보장한다. 보통 웹이나 파일 전송 같은 분야에서 많이 사용된다. (종단 간. End-to-End)

 

 

TCP의 작동 원리

 

신뢰성 있는 프로토콜이므로, 데이터를 보내기 전 목적지와 철저히 연결을 확인하여 확실한 준비가 되어있는지를 먼저 확인하고 통신을 시작한다.

크게 3-Way Handshake, 데이터 통신, 4-Way Handshake 3개의 구역으로 나누어 설명할 수 있는데, 여기서 Handshake 부분에서 확실하게 신뢰성을 보장한다고 생각하면 된다.

 

[1] 연결 생성 : 3-Way Handshake

TCP의 3-way 핸드셰이크는 TCP 연결을 시작하기 위한 3단계 패킷 교환 과정이다. 이 과정은 클라이언트와 서버가 서로 "통신할 준비가 됐다!"를 확인하는 초기 작업이다.

 

과정을 알아보기 전, 먼저 주요 용어에 대해 알아보고 시작하자.

  • SYN(Synchronize) : "연결을 시작하자!"라는 연결 요청 신호이다. 단어 그대로 동기화하는 요청을 보낸다.
  • ACK(Acknowledgment) : "데이터 잘 받았어!"라는 확인 응답 신호이다. 단어 그대로 요청을 승인하는 것이다.
  • Seq No(Sequence Number) : 현재 보내는 데이터의 고유한 시작 번호로. 현재 보내는 데이터가 몇번째 데이터인지 구분을 하기 위한 번호이다. → 이 번호의 경우 '번호 예측에 의한 해킹'을 막기 위해 첫 번호는 무작위 난수(ISN)로 시작한다.
  • ACK No(Acknowledgement Number) : 확인 응답 번호로, "상대방이 다음으로 기대하는 바이트 번호"이다.
    즉, 상대방이 방금 요청과 함께 전달된 Seq No에서 + 1을 더하여 확인 응답 번호를 전송한다. 이는 다음 요청의 번호로 사용된다. → 1000번을 받음. 1000 + 1한 1001번을 확인 응답으로 보내며 다음 요청에 1001번을 사용해서 요청하라는 의미임.

이러한 용어들을 통해 실제 통신 연결 과정을 알아보자.

 

3 - Way Handshake 과정

 

  1. 클라이언트가 서버로 연결을 요청하는 SYN 패킷을 보낸다. (상태 : CLOSED → SYN_SENT)
  2. 서버는 SYN 패킷을 전달받고, 다시 클라이언트로 SYN+ACK 패킷을 응답한다. (상태 : LISTEN → SYN_RCVD)
  3. 클라이언트가 서버의 SYN+ACK 패킷을 전달받고, 최종적으로 연결됐다는 확인 응답 ACK를 보낸다.
  4. 이후 양 측의 상태는 ESTABLISHED로 전환되어, 데이터를 주고 받을 수 있는 상태가 된다.

이렇게 세 번의 연결 확인을 거치는 패킷을 주고 받는다고 해서 3-Way 핸드쉐이크라고 한다.

 

앞서 말한 ISN 랜덤화를 통해 시퀀스 번호를 난수화하는 이유는, 시퀀스 번호를 예측하기 어렵게 하여 TCP 연결을 악용한 공격을 줄이기 위해 사용한다.

 

대표적으로 'SYN Flooding' 공격인데, 이 공격은 3-Way Handshake의 SYN/ACK를 보내고 ACK를 기다리는 구조를 악용해 서버의 연결 대기 자원을 고갈시키는 방식이다.

클라이언트가 서버에 SYN 요청을 대량으로 보내고 마지막 ACK 응답을 보내지 않게 되면, 서버는 해당 요청의 연결을 계속해서 대기하도록 하게 된다. 이때 이 요청에 대한 일정 자원을 미리 할당하기 때문에, 이런 요청이 반복되면 정상적인 사용자들의 연결까지 처리하지 못하거나 지연시키게 된다.

 

 

[2] 연결 성공 : 데이터 통싱 및 재전송

3-Way Handshake을 마친 뒤, 클라이언트와 서버 양측이 ESTABLISHED된 상태에서 이제 데이터를 주고 받을 수 있다.

데이터 통신 과정

 

  1. ESTABLISHED된 상태에서 클라이언트가 서버에게 데이터를 보낸다.
  2. 서버는 데이터를 잘 전송받았다고 ACK 응답을 클라이언트에게 보낸다.
  3. 클라이언트가 데이터를 전송한 후에 서버로부터 ACK 응답을 받지 못했다면, 제대로 전달되지 않은 것으로 판단해 데이터를 한번 더 재전송한다.

 

[3] 연결 종료 : 4-Way Handshake

TCP의 4-way 핸드셰이크는 TCP 연결을 종료하기 위한 4단계 패킷 교환 과정이다.

과정을 보기에 앞서 주요 용어를 먼저 알아보자.

  • FIN : 연결을 종료하고 싶다는 뜻의 요청이다. 보낼 데이터가 이제 없다는 신호다.
  • FIN_WAIT_1 : 클라이언트가 먼저 FIN을 보내고, 상대의 응답을 기다리는 상태
  • FIN_WAIT_2 : 상대의 ACK는 받았고, 상대가 자신 쪽 종료를 마칠 때까지 기다리는 상태
  • CLOSE_WAIT : 서버가 클라이언트 FIN을 받고, 자신 쪽 종료 준비를 하는 상태
  • LAST_ACK : 서버가 자기 FIN을 보낸 뒤, 최종 ACK 응답을 기다리는 상태
  • TIME_WAIT : 클라이언트가 마지막 ACK 응답을 보낸 뒤 잠시 대기하는 상태. 지연된 패킷이 늦게 도착하는 상황 대비 위함

TCP 연결 종료에서 FIN은 "더 이상 보낼 데이터가 없다"는 종료 요청이며, ACK는 그 요청을 확인하는 응답이다.
이렇게 상태 플래그가 많은 이유는 양방향 통신을 독립적으로 종료해야하기 때문에 4번에 걸친 과정이 필요하다.

 

 

  1. 더 이상 전송할 데이터가 없는 클라이언트는 서버로 FIN 요청을 전달한다. (상태 : ESTABLISHED → FIN_WAIT_1)
  2. 서버는 클라이언트의 FIN 요청을 확인했다는 ACK 응답을 보낸다. (상태 : ESTABLISHED → CLOSE_WAIT)
  3. 그 후 서버 자신도 클라이언트에게 FIN 요청을 보낸다. (상태 : CLOSE_WAIT → LAST_ACK)
  4. 클라이언트는 서버의 FIN 요청을 확인하고 ACK 응답을 보내고 TIME_WAIT 상태로 전환한다.
    TIME_WAIT는 클라이언트가 보낸 ACK 응답이 중간에 유실되어 서버에 전달되지 못 했을 때, 서버가 다시 재전송하는 FIN 요청을 전달받기 위해 대기하는 상태이다. 그렇게 전달받은 FIN에 대한 ACK 응답을 다시 서버로 전송하며 일정 시간 동안 대기 후 자동으로 CLOSED로 전환하며 연결을 종료한다.
  5. 클라이언트의 ACK 응답을 받은 서버는 서버의 상태를 CLOSED로 전환하며 연결을 종료한다.
    만약, ACK 응답을 받지 못했다면 클라이언트에 다시 FIN을 재전송한다. 일정 횟수 동안 전송했음에도 ACK 응답을 못 받았을 시, 자동으로 CLOSED로 전환하며 연결을 종료한다.

정상적인 경우 서로가 FIN과 ACK 응답을 전달받으며 TIME_WAIT 이후 모두 종료되지만, 그렇지 않을 경우 지정해둔 TIME_WAIT시간, FIN 재전송 횟수만큼 반복하다 자동으로 종료된다.

 

TIME_WAIT(대기시간), FIN 재전송 횟수는 OS마다 기본 설정값이 다르다. 이 설정값은 개발자/관리자가 임의로 변경이 가능해 원하는 시간과 횟수를 지정할 수 있다.

*클라이언트는 대기시간을 가지고, 서버는 재전송 횟수를 가지는 건 바꿀 수 없으니 혼동하지 말 것!


3. UDP (User Datagram Protocol)

TCP는 사용자 데이터그램 프로토콜로, TCP와 달리 연결 설정 없이 데이터를 바로 전송하는 가벼운 프로토콜이다.

보내기만 하면 끝이라는 방식이라서 속도는 빠르지만, 패킷 손실이나 순서 바뀜에 대한 책임은 보장하지 않는다.

 

TCP가 천천히 정확하게 전송한다면, UDP는 빨리 그냥 전송해! 하는 스타일이라 실시간성이 중요한 곳에 쓰인다.

 

 

UDP의 작동 원리

 

비신뢰성/비연결성 프로토콜이므로, 데이터를 데이터그램 단위로 처리하며, 핸드셰이크나 재전송 같은 복잡한 과정이 없다.

과정을 알아보기 전 주요 용어를 알아보자.

  • 데이터그램 : 독립적인 패킷 단위. 각 패킷이 별개로 처리됨
  • 포트 번호 : 송수신 애플리케이 식별 (소켓)
  • Checksum : 오류 검출하기 위한 비트로. 헤더에 포함되어 해당 데이터를 받을 지 버릴 지 결정할 수 있다.

 

위 사진에서 볼 수 있듯, 패킷이 전달될 목적지만 알고 있으면, 복잡한 3-Way Handshake와 같은 연결 작업을 할 필요가 없다.
UDP는 신뢰성을 애초에 보장하지 않기 때문에 송신 호스트와의 연결에 신경쓰지 않고 바로 목적지로 데이터를 전송한다. 이로 인해 UDP는 실시간성이 중요한 분야에서 다룰 수 있게 된다.

 

 

[2] 특별한 UDP의 기능

UDP의 또 다른 장점은 브로드캐스트와, 멀티캐스트 기능이다. TCP는 1:1만 가능한 반면 , UDP는 1:N 전송을 지원하는 유일한 전송 계층 프로토콜이다.

 

  1. 브로드캐스트
    네트워크 내 모든 기기에 한 번에 전송.
    한 개체가 특정 네트워크에 속한 모든 개체에게 데이터를 보낼수 있다. 
    회사 내부 망에서 네트워크 내 모든 컴퓨터에 즉시 점검 공지 등을 보내는 데 사용할 수 있다.
  2. 멀티캐스트
    특정 그룹에만 전송 가능하다.
    YouTube 라이브 → 구독자들에게만 알림 전송
    온라인 강의 → 수강생만 자료 받음

'Network' 카테고리의 다른 글

[Network] 네트워크 기초 개념  (0) 2026.04.11