[네트워크] TCP와 UDP

jh Seo·2025년 5월 27일
0

네트워크 공부

목록 보기
5/16

TCP

TCP (Transmission Control Protocol, 전송 제어 프로토콜)

  • 데이터를 전송하는 프로토콜의 일종
  • TCP는 연결 기반이므로 데이터를 전송하는 동안, 수신자와 발신자 사이 연결 설정 및 유지
  • 데이터가 온전하게 도착하도록 보장
  • 단위는 Segment

헤더 구조

  • Source port : 송신 측 애플리케이션을 식별하는 번호
    • ex: 웹브라우저 포트 번호
  • Destination port: 수신 측 애플리케이션을 식별하는 번호
  • Sequence number : 세그먼트에 담긴 데이터의 시작 바이트 번호
    • ex: 1000 byte씩 보내는 경우 → 0, 1000, 2000…
  • ACK # : 다음에 기대하는 바이트 번호, 이 숫자보다 이전까지는 모두 잘 받았다는 의미
  • Flags
    • URG : 긴급 데이터 표시(거의 사용 X)
    • ACK : ACK# 확인 응답
    • PSH: 즉시 데이터를 애플리케이션에 전달하라는 요청(거의 사용 X)
    • RST: 연결 재설정
    • SYN: 연결 시작 요청(3-way handshake)
    • FIN: 연결 종료 요청
  • Receive window: 수신 윈도우 크기, 수신 측이 현재 얼마만큼 데이터를 더 받을 수 있는지 알려줌(흐름 제어에 사용) → 이 값을 통해 송신 측은 수신 측의 버퍼가 꽉 찾는지 확인
  • Checksum: TCP 헤더와 데이터에 오류가 있는지 확인, 데이터가 중간에 손상되었는지 확인하는 용도

장점

  1. TCP는 오류를 검사한 데이터가 목적지에 온전히 도달하도록 보장
  2. 수신자의 용량(Capacity)에 따라 데이터 전송 속도 최적화
  3. 데이터가 목적지에 도달했는 지 확인하고, 실패시 재 전송으로 도착 보장

단점

  1. udp에 비해 상당히 많은 대역폭 사용
  2. 순서 보장 메커니즘이라 전송 중 소량의 데이터 손실되면 나머지 데이터 로드 불가능
  3. 근거리 통신망이나 개인 로컬 네트워크같은 RTT시간이 작은 환경에서는 오버헤드 발생
  4. 기본적으로 nagle 알고리즘으로 인해 작은 패킷들을 전송 한계까지 모으고 한번에 보내기때문에 delay 생김 (옵션으로 끌 수 있다.)

신뢰성 보장을 위한 문제들

신뢰성이 있기 위해 다음 네 가지 문제 해결해야함
1. 패킷 손실 감지
2. 순서 바뀜 감지
3. 혼잡 제어(Congestion control)- 네트워크 혼잡
4. 흐름제어(Flow control) - Overload - receiver가 overload되는 문제

흐름 제어

  • 송신 측과 수신 측의 데이터 처리 속도 차이 해결
  • receiver가 packet을 지나치게 많이 안 받도록 조절
  • receiver가 sender에게 자신의 state를 피드백함.

해결방법

  1. Stop and Wait
    • 모든 전송에 대해 확인 응답을 받아야 그 다음 패킷 전송
  2. Sliding Window(Go Back N ARQ)
    • 수신 측에서 설정한 윈도우 크기만큼 송신 측에서 확인 응답없이 세그먼트 전송해서
      데이터 흐름 동적으로 조절하는 방법
    • 윈도우에 포함되는 모든 패킷 전송하고, 패킷의 전달이 확인되는대로 윈도우를 옮김

혼잡 제어

  • 용어 정리

    • cwnd(congestion window): 송신 측이 한 번에 보낼 수 있는 최대 바이트 수
    • ssthresh(slow-start threshold) : slow start와 AIMD 방식을 구분하는 임계값
  • 혼잡 제어 개요

    • 송신 측의 전달과 네트워크의 데이터 처리 속도 차이를 해결하기위한 기법
    • 라우터에 패킷 몰릴 경우 제어할 방법
  • 해결 방법

  1. AIMD (Additive Increase/ Multiple Decrease)
    패킷이 문제없이 도착 시 cwnd 1씩 증가
    타임아웃시 cwnd를 절반으로 줄임

  2. slow start (AIMD 개선안)

    • AIMD는 네트워크 수용량 주변에서는 효율적으로 동작 but, 초반에 cwnd를 1씩 올리는 부분이 너무 느림

    • 패킷을 보내고 문제 없이 돌아오면 각 응답 패킷에 따라 cwnd 1씩 증가(한 주기 지나면 패킷수 2배 증가)

    • 혼잡 현상 발생시 cwnd를 1로 떨어뜨림

    • 1로 떨어뜨린 기점까지는 다시 2배로 증가, 1로 떨어진 지점부터는 cwnd 1씩 증가

  3. Fast Retransmit - 혼잡 인지 방식

    • 수신 측에서 먼저 올 패킷이 도착하지않고, 그 다음 패킷이 와도 이전 패킷들에 대해 ack패킷 보냄
    • 송신 측에서 중복 패킷을 세 개 받으면 혼잡으로 인지해 cwnd를 줄인다.
  4. Fast Recovery (빠른 회복)

    • 혼잡 상태시 window size를 반으로 줄이고 선형 증가한다.
    • 이 방식을 채택하면 한번 혼잡시 AIMD방식으로 동작한다.

흐름 제어는 송신 측과 수신 측 사이 속도를 다루고, 혼잡 제어는 호스트와 라우터를 포함해 더 넓은 범위를 아우른다.

UDP

'User Datagram Protocol'

  • UDP 네트워크 프로토콜은 TCP에 비해 안정성은 떨어지지만 더 빠르고 간단
  • 비 연결 방식
  • 데이터 손실 가능, 빠름
  • 단위는 datagram

장점

  1. udp는 더 작은 패킷을 더 작은 오버헤드로 전송해 지연 줄임
  2. udp는 일부 패킷이 유실되어도 계속 전송되므로 패킷 손실로 인해 전체 전송이 중단되지 않음
  3. broadcast 및 multicast 방식을 통해 여러 수신자에게 한 번에 전송 가능

단점

  1. 성공적으로 도달 여부 확인 x
  2. 라우터 우선순위에서 tcp패킷에 밀림
  3. 순서 보장 x

요약) TCP, UDP 비교표

profile
코딩 창고!

0개의 댓글