TCP 흐름제어, 혼잡제어 정리

Android Chen·2021년 12월 9일
0

TCP는 연결지향적이며 순서가 뒤바뀐 패킷을 교정해주고 데이터의 신뢰도를 보장한다는 특징이 있다. 신뢰성을 보장하기 위해 아래와 같은 4가지를 제어해야 한다.

  • 패킷의 손실
  • 패킷의 순서가 바뀌는 현상
  • 네트워크의 혼잡
  • 수신측의 데이터 처리속도가 송신측의 데이터 전송속도보다 느린 경우

흐름제어

  • 흐름제어란 4번문제를 고안하기 위해 사용하는 방법이다. 수신측에서 송신측에게 자신의 상태를 알려주고 수신측의 데이터 전송량을 알맞게 조절하는 방법이다.

1) Stop and wait

  • 패킷을 1개씩 전송하며 매번 패킷에 대한 응답을 수신해야 다음 패킷을 전송하는 방법

2) Sliding Window

  • 수신측에서 설정한 윈도우 크기만큼 송신측에서 확인응답없이 세그먼트를 전송하여 데이터 흐름을 동적으로 조절하는 방법이다. 패킷의 전달이 확인되는대로 윈도우를 옮긴다.

패킷의 손실 처리(오류제어)

1) Stop and Wait

  • 데이터를 정상적으로 받았다는 응답이 오지 않으면 재전송한다.

2) Go back N

  • 손실된 정보 이후에 전송되는 모든 정보 프레임을 재전송하는 방식이다.

3) Selective Repeat

  • Go back N 방식에서 오류가 발생한 부분만 재전송하는 것으로 보완한 방식. 재전송이후에 제대로 수신된 부분을 알려주고 그부분부터 시작한다.

혼잡제어

  • 송신측의 데이터 전달과 네트워크의 데이터 처리속도 차이를 해결하기 위한 기법

1) AIMD

  • 하나의 패킷을 보내고 문제가 없으면 윈도우 크기를 1씩 증가시키며 전송한다.
  • 만약 문제가 발생하면(손실이 발생하면) 윈도우 크기를 절반으로 줄인다.

2) Slow Start

  • 패킷이 문제없이 도착하면 크기를 2배씩 증가시킨다. 혼잡현상이 발생하면(ssthresh도달) 윈도우 크기를 1씩늘린다.

3) Fast Retransmit

  • 재전송을 위한 timeout값이 상대적으로 길어지므로 손실된 패킷에 대한 중복ack가 3번이상 도착했을 경우 세그먼트를 즉시 재전송한다.

Fast Recovery

profile
https://github.com/Userz1-redd

0개의 댓글