새소식

반응형
Computer Science

[CS] TCP/IP 흐름제어와 혼잡제어

  • -
728x90
반응형

TCP/IP 흐름제어와 혼잡제어

TCP는 신뢰성 보장을 위한, `제어기능`이 있다!!
→ 이때 제어기능이란?

- 흐름 제어 `flow control` : 전송되는 데이터의 양 조절
- 오류 제어 : 데이터 유실 등 데이터 수신 오류에 대처
- 혼잡 제어 `congestion ctrl` : '전송률'을 조절해 네트워크 혼잡 상황에 대처

흐름제어

> 수신자는 송신자를 조절하여, 수신측 버퍼에  오버플로우가 일어나지 않도록 함.
> 즉, 송신자가 수신 버퍼 대비 너무 많은 양의 데이터를 보내지 않도록 조절함.

 

흐름 제어 방법

- Stop and Wait
- Sliding window

 

stop-and-wait

과정

  • sender: 한개의 패킷만 보내고, 그에 대한 ACK 올때까지 기다림
  • receiver가 ACK 보내오면, sender는 보내기 재개함
  • ACK 오지 않은채 timer 끝나면, sender는 이전에 보낸 패킷 재전송 (패킷손실상황)
    • sender는 packet loss와 ACK loss를 구별하지 못함
    • receiver은 구분함. ACK loss에 따라 sender가 재전송한 패킷은 receiver가 알아서 버리고 ACK만 리턴해줌 (패킷 중복저장할필요 없으니까)

 

sliding window

 송신측이 수신측에서 받은 window size를 참고하여, 데이터 흐름을 제어함

 과정

  • 3-way handshaking 과정에서, window size를 송신측에 전달
  • window size == receiver가 한번에 처리할 수 있는 데이터 양
  • 데이터 전송시, window에 포함되는(= window size에 맞는) 모든 패킷을 전송함
  • 그 패킷들 전달 성공이 확인된다면,  window을 옆으로 밀어 다음 패킷들 전송

 

특징

  •  window size는 유동적으로 조절됨
  • congestion ctrl과도 관련
  • 상대방의 응답 없이도, window size 내에서 데이터 전송 가능

혼잡제어

  • 혼잡: 너무 많은 소스들이, 네트워크가 처리하기에는 너무 빠르게, 너무 많은 데이터를 보내는 상황 
  • flow ctrl과는 다르다!
    • 혼잡 제어는 global issue임! (= 네트워크를 공유중인 노드들 간의 이슈)
    • 흐름 제어는 point to point 이슈 (=sender와 receiver 간의 이슈)

 

혼잡 제어 방법

- AIMD 
- Slow Start
- Fast Retransmit
- Fast Recovery

 

AIMD

  • 손실 발생전까지 transmission rate(윈도우크기)를 증가시키며 패킷 송신
    • Additive Increase : 손실발생전까지, 각 RTT마다 cwnd를 1MSS만큼 증가
    • Multiplicative Decrease : 손실 발생시, cwnd를 절반으로 감소시킴

Slow Start

  • 손실 발생전까지 transmission rate를 지수함수꼴로 증가시키며 패킷 송신
  • 손실이 발생한다면, 그 때의 window size의 절반값으로 설정.
  • 그 이후부터는 1씩 증가

Fast Retransmit

  • sender가 3개의 중복된 ACK를 받는다면, 손실된 패킷 재전송
  • 혼잡 감지. window size 줄임
  • TCP Tahoe

Fast Recovery

  • 혼잡 감지시, window size를 줄이되, 1로 줄이지 않고 절반값으로 줄임
  • 그 후 선형 증가시킴 
  • TCP Reno 

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.