DEV Community

Juyeong,Jeon
Juyeong,Jeon

Posted on

TCP의 3대 제어

기본개념

  • 송신버퍼
  • 수신버퍼
  • 윈도우
    • 송신 윈도우 변수
      • 슬라이딩 윈도우
    • 수신 윈도우 변수
    • 혼잡 윈도우 변수
    • 윈도우 알고리즘
      • Go-Back-N(GBN) 알고리즘
      • Selective-Repeat(SR) 선택적 반복 알고리즘
      • GBN, SR 혼합 알고리즘

ㅇ 전송 플로우

  1. Process -> TCP 송신 버퍼(push)
  2. TCP 송신 버퍼는 수신 버퍼 윈도우와 혼잡 윈도우 변수를 통해 계산후 TCP 수신 버퍼로 확인 응답 없이 보낼 수 있을 만큼 데이터를 보낸다.
  3. TCP 수신 버퍼는 수신된 데이터를 보유하고 있다가, 프로세스에서 수신할 준비가 되면 데이터를 당김(pull)에 의해 소비, 그에 따라 수신 윈도우도 변경

흐름제어

ㅁ 소비될 수 있을 만큼만 생산자가 보내주기 위해
왜? 수신측의 버퍼 오버 플로우로 인한 패킷 손실 우려

  • 수신 윈도우 변수(rwnd)에 의해 결정
  • 수신 버퍼가 얼마나 데이터를 받을 수 있는지 알려줄때 사용하는 변수
  • DATA를 생산하는 Proc, 소비 Proc 간의 속도가 다르기 때문에, 안정적인 TCP 통신을 위해서 수신측에서 상황을 통보
  • 송신측 흐름제어를 위한 윈도우
    • rwnd(Receive Window, 수신 윈도우 변수)
    • cwnd(Congestion Window, 혼잡 윈도우 변수)
    • awnd(Actual Window, 송신 윈도우 변수) : 수신측의 확인 응답 없이, 한번에 전달 할 수 있는 바이트 사이즈
    • awnd = min(rwnd, cwnd)
  • 네이글 알고리즘 : 네트워크망의 혼잡을 피하기 위해 설계(예외적인 상황에서 오버헤드의 가능성이 있다는 단점도 존재)

혼잡제어

ㅁ 공유자원인 네트워크망의 혼잡을 악화시켜 통신에 충돌이 나게 하는 것을 줄이고, 한정된 자원을 잘 분배하여 원활히 돌아갈 수 있도록 제어
(e.g. 고속도로의 혼잡을 완화시키기 위해, 차량 5부제 등의 제도를 시행)

  • 혼잡 윈도우 변수(cwnd)를 어떻게 계산하고 설정할 것인가에 대한 고찰.
  • cwnd(Congestion Window, 혼잡 윈도우 변수)
    • 송신 윈도우를 계산하기 위한 변수
    • MSS(Maximum Segment Size)를 기준
      • 세그먼트가 데이터를 가질 수 있는 최대의 크기를 뜻함
      • MSS = MTU - (IP헤더길이 +IP옵션길이) - (TCP 헤더길이 + TCP옵션길이)
      • IPv4(1460 Bytes), IPv6(1400 Bytes) 각각 다름
      • cwnd = 1 // MSS * 1 (IPv4 기준, 1460 Bytes)
      • cwnd = 2 // MSS * 2 (IPv4 기준, 2920 Bytes)
  • 수신 윈도우가 크더라도 혼잡 윈도우 변수가 작으면 송신 윈도우 크기는 작음
  • 혼잡 윈도우 변수는 혼잡 정책에 의해 증가되고 감소됨
  • TCP Reno 혼잡제어 알고리즘(그나마 쉬움 (그래도 어려움😥))
    • 혼잡 감지 : 혼잡을 어떻게 추측하고 감지할 것인가?
    • 혼잡 윈도우 변수(cwnd)
    • 느린 시작 임계점 변수(ssthresh - Slow Start Thresold) : 느린 시작 상태에서 혼잡 상태로 변경하는 임계점 변수
    • 혼잡 정책 : 어떻게 예방하고, 발생하면 어떻게 대처할 것인가
  • 기타 알고리즘들
    • TCP Tahoe and Reno
    • TCP Vegas
    • etc..

오류 제어

ㅁ 신뢰성 프로토콜이라고 불리는 TCP의 핵심 개념
ㅇ 훼손된 패킷을 감지 및 폐기(수신자)
ㅇ 중복 수신 된 패킷은 확인 후 폐기(수신자)
ㅇ 분실 된 패킷이 도착할 때까지 순서에 맞지 않는 세그먼트를 버퍼에 저장(수신자)
ㅇ 손실 되거나 제거된 패킷을 확인 후 재 전송(송신자)

  • 검사합(CheckSums) : 훼손 여부 확인
  • 확인응답(Acknowledgment) : 세그먼트 수신을 알려주기 위해 확인 응답
  • 타임아웃(Time-Out) : 송신 TCP는 연결당 재전송 타임아웃(RTO, retransmission timeout) 타이머를 사용 하여 패킷의 재전송 시기 가늠

Top comments (0)