"웹 서핑할 때는 TCP를 쓰는데, 유튜브나 온라인 게임에서는 왜 UDP를 활용할까요?"
"정보처리기사 및 CS 면접 단골 질문인 'TCP 3-way Handshake'와 '4-way Handshake'의 연결 제어 메커니즘은 어떻게 작동할까요?"
전송 계층(Transport Layer)은 송신지의 프로세스와 수신지의 프로세스 간 단대단(End-to-End) 통신 및 신뢰성 있는 데이터 전송을 책임지는 계층입니다.
이번 글에서는 전송 계층의 두 대표 프로토콜인 TCP와 UDP의 핵심 특징 비교, 그리고 TCP의 연결 설정(3-way Handshake) 및 해제(4-way Handshake) 과정을 한눈에 정리해 드립니다!
1. 전송 계층의 두 축: TCP vs UDP
전송 계층의 프로토콜은 데이터 전송 시 신뢰성을 보장하느냐, 아니면 속도를 최우선으로 하느냐에 따라 TCP와 UDP로 나뉩니다.
| 구분 | TCP (Transmission Control Protocol) | UDP (User Datagram Protocol) |
| 연결 방식 | 연결 지향형 (Connection-oriented) | 비연결형 (Connectionless) |
| 신뢰성 | 높음 (오류 제어, 흐름 제어, 혼잡 제어) | 낮음 (신뢰성 및 순서 보장 없음) |
| 전송 단위 | 세그먼트 (Segment) | 데이터그램 (Datagram) |
| 전송 순서 | 보장됨 (Sequence Number 관리) | 보장되지 않음 |
| 전송 속도 | 상대적으로 느림 | 매우 빠르고 가벼움 |
| 주요 사용 사례 | 웹(HTTP/HTTPS), 이메일(SMTP), 파일 전송(FTP) | 실시간 스트리밍, 온라인 게임, DNS, VoIP |
2. TCP 신뢰성의 핵심: 3-way & 4-way Handshake
TCP는 데이터를 주고받기 전, 두 기기 간에 논리적인 연결을 설정하고 정리하는 과정을 거칩니다.
① 연결 설정: TCP 3-way Handshake
데이터 전송 전 양방향 통신 통로를 확인하고 동기화하는 3단계 과정입니다.
Server)">
클라이언트가 서버에 연결을 요청하며 SYN(Synchronize) 패킷을 보냅니다.
(클라이언트 상태: SYN_SENT)
Client)">
서버가 클라이언트의 요청을 승인하는 **ACK(Acknowledge)**와, 자신도 연결을 확인하고자 SYN 패킷을 함께 보냅니다.
(서버 상태: SYN_RECEIVED)
Server)">
클라이언트가 서버의 승인에 대해 ACK 패킷을 보내 응답합니다. 이후 양쪽 모두 연결이 완료되어 데이터를 주고받을 수 있습니다.
(상태: ESTABLISHED)
② 연결 해제: TCP 4-way Handshake
통신이 완료된 후 양쪽의 논리적 연결을 안전하게 종료하는 4단계 과정입니다.
- FIN (Client -> Server): 클라이언트가 데이터 전송 완료 후 연결 종료 요청(FIN 패킷)을 보냅니다. (클라이언트 상태: FIN_WAIT_1)
- ACK (Server -> Client): 서버는 일단 종료 요청을 확인했다는 ACK 패킷을 보냅니다. (서버 상태: CLOSE_WAIT)
- FIN (Server -> Client): 서버도 남은 데이터 전송을 모두 마친 뒤, 연결 종료 준비가 완료되면 클라이언트에게 FIN 패킷을 보냅니다. (서버 상태: LAST_ACK)
- ACK (Client -> Server): 클라이언트가 확인 ACK 패킷을 보내고 연결을 최종 종료합니다.
TIME_WAIT 상태: 클라이언트는 마지막 ACK를 보낸 후에도 혹시 나중에 도달할지 모르는 지연 패킷(잉여 패킷) 처리를 위해 일정 시간동안 TIME_WAIT 상태를 유지한 뒤 종료합니다.
3. 속도와 효율성의 승부사: UDP (User Datagram Protocol)
UDP는 신뢰성 확보를 위한 핸드셰이킹, 순서 번호, 흐름 제어/혼잡 제어 메커니즘을 전면 제거한 프로토콜입니다.
UDP의 작동 특징
- 가벼운 헤더: TCP 헤더(최소 20바이트)에 비해 UDP 헤더는 8바이트로 매우 단순합니다.
- 1:1, 1:N, N:N 통신 가능: 유니캐스트뿐만 아니라 브로드캐스트, 멀티캐스트 전송이 가능합니다.
- 실시간성 중시: 데이터 일부가 손실되더라도 빠르게 연속 전송을 이어나가야 하는 실시간 음성/영상 스트리밍에 최적화되어 있습니다.
💡 한눈에 보는 TCP vs UDP 요약표 (시험 핵심!)
| 항목 | TCP | UDP |
| 연결 방식 | 3-way Handshake 기반 연결 설정 | 연결 설정 없음 (바로 데이터 발송) |
| 헤더 크기 | 20 ~ 60 바이트 | 8 바이트 |
| 플래그 비트 | SYN, ACK, FIN, RST, PSH, URG 사용 | 없음 |
| 제어 기능 | 흐름 제어(슬라이딩 윈도우), 혼잡 제어 지원 | 지원하지 않음 (애플리케이션 계층에서 구현 필요) |
| 전송 속도 | 신뢰성 확보 오버헤드로 인해 상대적 느림 | 오버헤드가 적어 매우 빠름 |
📌 시험 핵심 기출 포인트 체크
- TCP 플래그 비트:
- SYN (Synchronize): 연결 요청 및 시퀀스 번호 동기화
- ACK (Acknowledgment): 승인/확인 응답
- FIN (Finish): 정상적인 연결 종료 요청
- RST (Reset): 강제 연결 해제/초기화
- TIME_WAIT 목적: 4-way Handshake 종료 시 클라이언트가 일정 시간 TIME_WAIT을 유지하는 이유는 지연 전송된 유실 패킷 수신 및 서버가 마지막 ACK를 받지 못해 FIN을 재전송할 경우에 대비하기 위함입니다.
- DNS가 UDP를 기본적으로 사용하는 이유: 요청 및 응답 데이터 크기가 작아 연결 설정 오버헤드 없이 빠른 응답을 얻을 수 있기 때문입니다. (단, 데이터가 크거나 존 트랜스퍼 시에는 TCP 사용)