HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🤩
개발
/네트워크(Network)/
🌐
Network
/
🎈
TCP UDP (Transport Layer)
🎈

TCP UDP (Transport Layer)

전송 계층이 없다면TCP와 UDP의 특징 비교TCP (Transmission Control Protocol)TCP 3 Way HandshakeTCP의 데이터 전송 방식TCP 4-way-handshake (Connection close)문제점TCP hole-punchingUDPUDP 헤더UDP 사용처
TCP/IP 프로토콜 스택의 4계층에서 동작하는 프로토콜들임(TCP, UDP)
  • TCP/IP는 사실 프로토콜의 집합임. 각각은 다른 기능을 제공함
    • IP 프로토콜은 기본적인 네이밍 스킴과 패킷(known as datagrams)을 보낼 수 있는 배송 메커니즘을 제공함
      • IP 프로토콜은 기본적으로 패킷이 손실되거나 복제되었을 때에 회복하려는 노력을 전혀 하지 않기에 믿을만 하지는 않음
    • UDP(Unreliable Datagram Protocol) 은 IP 프로토콜을 아주 약간 확장한 것으로 패킷을 프로세스에서 프로세스로 전달함. host에서 host가 아닌
    • TCP는 IP 프로토콜 위에 뭘 더 얹어서 만든 복잡한 프로토콜로 프로세스 간에 reliable full duplex (bidirectional) 연결을 맺음
  • 패킷을 분할하고 조합하기 위해 TCP 프로토콜에서는 시퀀스 번호와 ACK 번호를 사용함
 

전송 계층이 없다면

  • 데이터의 순차 전송을 책임져줌 송신자 (1 ,2, 3) ⇒ 수신자 (2, 3 ,1) 이렇게 될 수 있음
  • Flow (흐름 문제)
    • 송수신자 간의 데이터 처리 속도 차이.
  • Congestion (네트워크 문제)
⇒ 데이터의 손실이 발생할 수 있음

TCP와 UDP의 특징 비교

TCP
UDP
연결 지향
비연결형
오류 제어 수행함
오류 제어 수행 안함
흐름 제어 수행함
흐름 제어 수행 안함
유니캐스트
유니캐스트, 멀티캐스트, 브로드캐스트
전이중
반이중
데이터 전송
실시간 트래픽 전송

TCP (Transmission Control Protocol)

  • 신뢰성 있는 데이터 통신을 가능하게 해주는 프로토콜
  • 특징 : Connection 연결 ( 3-way-handshake) - 양방향 통신
  • 데이터의 순차 전송을 보장
  • Flow Control (흐름 제어)
  • Congestion Control (혼잡 제어)
  • Error Detection (오류 감지) — checksum 확인
    • Application Layer에서 전송한 데이터를 Transport Layer 에서 TCP Header를 붙이면서 데이터를 조각냄
      Application Layer에서 전송한 데이터를 Transport Layer 에서 TCP Header를 붙이면서 데이터를 조각냄
TCP 세그먼트 내 헤더 구성
TCP 세그먼트 내 헤더 구성

TCP 3 Way Handshake

  • TCP/IP 프로토콜을 이용해서 통신을 하는 응용프로그램이 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정임
notion image
  1. 클라이언트가 서버에 접속을 요청하는 SYN 패킷을 보냄. 그리고 SYN/ACK 응답을 기다림
  1. 서버가 SYN요청을 받고 클라이언트에게 요청을 수락한다는 ACK, SYN 플래그가 설정된 패킷을 발송
  1. 클라이언트가 서버에게 ACK을 보내고 이후부터는 연결이 이루어지고 데이터가 오가게 됨

TCP의 데이터 전송 방식

TCP에서는 분할된 패킷을 잘 분할하고 수신 측이 잘 조합하도록 패킷에 순서를 주고 응답 번호를 부여함. 패킷에 순서를 부여하는 것을 시퀀스 번호, 응답 번호를 부여하는 것을 ACK 번호라고 부름
보내는 쪽에서 패킷에 번호를 부여하고(시퀀스 번호) 받는 쪽은 이 번호의 순서가 맞는지 확인.
받은 패킷 번호가 맞으면 응답을 주는데, 이 때 다음 번호의 패킷을 요청 → 이게 ACK 번호
예) 송신 측이 1번 패킷을 보냈는데 수신 측이 이 패킷을 잘 받는다면 1번을 잘 받았으니 다음으로 2번 달라고 ACK 번호 2를 줌
  1. Client가 패킷 송신
  1. 서버에서 ACK 송신
  1. 클라이언트가 ACK 를 수신하지 못하면 재전송

TCP 4-way-handshake (Connection close)

notion image
  1. 클라이언트가 연결을 종료하겠다는 FIN 플래그를 전송함
  1. 서버가 확인메시지를(ACK) 보내고 자신의 통신이 끝날 때 까지 기다림. 서버가 보낼 패킷들 더 보냄
  1. 서버가 통신이 끝났으면 연결이 종료되었다고 클라이언트에게 FIN 플래그 전송
  1. 클라이언트가 ACK 플래그 전송

문제점

  • 전송의 신뢰성은 보장하지만 매번 Connection을 연결해서 시간 손실 발생 ( 3-way-handshake)
  • 패킷을 조금만 손실해도 재전송 ⇒ 이러한 문제점을 해결하기 위해 UDP가 나옴

TCP hole-punching

[ 논문 ] Peer-to-Peer communication Across Network Address Translators , 번역 링크
  • 서로 다른 Private 네트워크에 존재하는 호스트들 간의 P2P 연결을 구성하는 가장 효과적인 방법 중 하나가 "홀 펀칭"
  • NAT 를 넘나드는 가장 확실한 (그러나 가장 비효과적인) P2P 통신 방법은 중계(relaying)를 통해서 간단하게 표준 클라이언트/서버 모델처럼 만드는 것 이다
사용 케이스(게임 클라이언트 측면)
  • 모바일 게임 유저가 이쪽 네트워크에서 저쪽 네트워크로 옮겨 탔을 때 서버로의 연결이 더 빠르게 됨
  • 연결 옮기는 것이 빠르게 되지 않으면 사용하는 유저가 불편을 겪음

UDP

  • TCP 보다 신뢰성이 떨어지지만 전송 속도가 일반적으로 빠른 프로토콜(순차 전송 x, 흐름 제어 x, 혼잡 제어 x)
  • Connectionless (3-way-handshake x)
  • Error Detection(Checksum으로)
  • 비교적 데이터의 신뢰성이 중요하지 않을 때 사용(ex. 영상 스트리밍)
    • notion image
  • TCP에서는 데이터를 조각내었지만 UDP는 조각내지 않고 그대로 사용함

UDP 헤더

notion image

UDP 사용처

  • 데이터 전송을 보장하지 않는 프로토콜이므로 제한된 용도로만 사용됨 →
    • 음성 데이터나 실시간 스트리밍과 같이 시간에 민감한 프로토콜이나 애플리케이션을 사용하는 경우
    • 사내 방송, 증권 시세 데이터 전송에 사용되는 멀티캐스트처럼 단방향으로 다수의 단말과 통신해 응답을 받기 어려운 환경에서 주로 사용
  • 즉, 데이터를 전송하는 데 신뢰성보다 일부 데이터가 유실되더라도 시간에 맞추어 계속 전송하는 것이 중요한 화상회의 시스템과 같은 서비스인 경우 udp 사용