gyumin.log

TCP와 UDP 차이

🌿 자라는 중

목차

둘 다 L4(전송 계층)에서 데이터를 실어 나르는 프로토콜이고, 차이는 하나로 요약된다: TCP는 전화 통화, UDP는 쪽지 던지기.

  • TCP (Transmission Control Protocol): 연결을 먼저 맺고(3-way handshake), 데이터마다 번호를 붙여 확인(ACK)을 주고받는 전송 프로토콜. 유실되면 알아채고 재전송한다. 느리지만 완전함
  • UDP (User Datagram Protocol): 연결도 확인도 없이 그냥 보내는 전송 프로토콜. 유실돼도 복구하지 않는다. 불완전하지만 빠름
  • 3-way handshake: TCP가 데이터를 보내기 전에 나누는 세 번의 인사. “여보세요?(SYN) → 네, 들려요(SYN+ACK) → 좋아, 시작!(ACK)”
  • ACK (Acknowledgment): “잘 받았다”는 확인 응답. TCP 신뢰성의 핵심 부품

포트 번호로 어떤 프로그램에게 갈 데이터인지 식별하는 것은 둘이 같다 → 계층 구조는 네트워크 계층과 L2·L3 통신 참고.

TCP: 전화 통화

TCP의 연결 수립과 재전송 TCP가 3-way handshake로 연결을 맺고, 데이터마다 ACK 확인을 받으며, 유실된 데이터를 재전송하는 과정 보내는 쪽 전화 거는 사람 받는 쪽 전화 받는 사람 ① 여보세요? (SYN) ② 네, 들려요 (SYN+ACK) ③ 좋아, 시작! (ACK) ④ 데이터 1번 전송 ⑤ 1번 받았어 (ACK) ⑥ 데이터 2번 - 유실! ⑦ 2번 다시 보냄 (재전송) 번호(시퀀스)와 확인(ACK) 덕분에 유실을 알아채고 다시 보낸다 - 이게 "신뢰성"
  • 데이터를 보내기 전에 반드시 ①~③의 인사(3-way handshake)로 연결을 맺는다
  • 데이터마다 번호(시퀀스 번호)를 붙이고, 받는 쪽은 “받았어”(ACK)로 답한다
  • ACK가 안 돌아오면 유실로 판단하고 재전송한다. 번호가 있으니 순서가 뒤섞여 도착해도 원래대로 조립할 수 있다
  • 이 확인 절차 때문에 왕복 대기가 생기고, 그만큼 느리다

UDP: 쪽지 던지기

UDP의 단방향 전송 UDP가 연결 수립이나 확인 응답 없이 데이터를 한 방향으로만 보내고, 유실돼도 알아채지 못하는 모습 보내는 쪽 쪽지 던지기 받는 쪽 확인 안 해줌 데이터 1번 데이터 2번 - 유실! 데이터 3번 데이터 4번 인사도 확인도 재전송도 없다 - 2번이 사라져도 아무도 모른다

화살표가 전부 한 방향이다. 이 “무심함”이 UDP의 단점이자 최대 장점 - 인사(handshake)도 확인(ACK)도 없으니 왕복 대기 시간이 없고, 데이터에 붙는 관리 정보(헤더)도 훨씬 가볍다.

한눈에 비교

TCPUDP
비유전화 통화쪽지 던지기
연결먼저 인사하고 시작 (3-way handshake)그냥 보냄
유실되면알아채고 재전송모름, 끝
순서번호 붙여서 순서 보장뒤바뀔 수 있음
속도상대적으로 느림 (확인 비용)빠름
쓰는 곳웹(HTTP), 메일, 파일 전송영상통화, 게임, 스트리밍, DNS

선택 기준: 다시 받는 게 의미 있는가

어디에 뭘 쓰는지의 기준은 하나다. “잃어버린 데이터를 다시 받는 게 의미가 있는가?”

  • 파일 다운로드에서 중간 1%가 빠지면 파일이 깨진다. 늦더라도 완전해야 한다 → TCP
  • 영상통화에서 0.1초 전 화면 조각이 유실됐다면? 지금 다시 받아봤자 이미 지나간 장면이다. 버리고 다음 프레임을 보여주는 게 낫다 → UDP. 게임의 캐릭터 위치도 마찬가지 - 옛 위치를 재전송받느니 최신 위치를 받는 게 낫다

정처기 포인트

TCP·UDP는 전송 계층(L4) 프로토콜이고, 이 계층의 전송 단위(PDU)는 **세그먼트(Segment)**다. 시험은 둘의 특징을 바꿔치기하거나 헤더 크기를 묻는 식으로 나온다.

특징 비교 - 바꿔치기 함정 단골.

TCPUDP
연결연결형(connection-oriented)비연결형(connectionless)
신뢰성있음 (재전송·순서보장)없음
제어흐름제어·혼잡제어없음
헤더 크기20바이트(옵션 제외)8바이트
전송 방식전이중(full-duplex)단순 전송

연결 수립·종료 - 숫자 함정.

  • 수립 = 3-way handshake (SYN → SYN+ACK → ACK)
  • 종료 = 4-way handshake (FIN → ACK → FIN → ACK)

흐름·혼잡 제어 - 용어 단골.

  • 흐름제어: 슬라이딩 윈도우(Sliding Window), Stop-and-Wait
  • 혼잡제어: 느린 시작(Slow Start), 혼잡 회피

무엇이 무엇을 타나 - 구분 문제.

  • TCP 위: HTTP, FTP, SMTP, Telnet, SSH

  • UDP 위: DNS, DHCP, TFTP, SNMP, 스트리밍·VoIP

  • 함정 1: “UDP가 연결형이다” → ✕. 연결형은 TCP.

  • 함정 2: 헤더 크기 TCP 20 / UDP 8 바이트를 바꿔 낸다.

  • 함정 3: 수립 3-way ↔ 종료 4-way를 헷갈리게.

한 줄: TCP = 연결형·신뢰성·헤더 20·수립 3way/종료 4way, UDP = 비연결·비신뢰·헤더 8·빠름.

연결되는 것들

  • HTTP는 TCP 위에서 달린다. Request와 Response가 정확히 전달돼야 하니까. 브라우저에서 페이지 하나 열 때, 보이지 않는 곳에서 ①~③ 전화 인사가 먼저 일어나고 있다 → HTTP Request와 Response
  • 반전 - 최신 HTTP/3는 UDP 위에서 달린다. “TCP의 확인 절차가 너무 느리니, 빠른 UDP 위에 필요한 신뢰성만 직접 다시 만들자”는 발상(QUIC)
  • DNS가 UDP(53번 포트)를 쓰는 이유도 같은 논리다. “도메인 → IP” 질문 하나에 답 하나라, 전화 개통까지 할 필요가 없다. 패킷 캡처를 보면 DNS는 UDP, 웹은 TCP인 걸 바로 확인할 수 있다