[Network] TCP/IP 흐름제어 & 혼잡제어

foresec·2023년 6월 22일
0

Computer Science

목록 보기
9/28

흐름제어

송신측과 수신측의 데이터 처리 속도 차이를 해결하기 위한 기법
Flow Control은 receiver가 packet을 지나치게 많이 받지않도록 조절하는 것
기본 개념은 receiver가 sender에게 현재 자신의 상태를 feedback한다는 점

  • 수신측이 송신측보다 데이터 처리 속도가 느릴 때
    수신측에서 제한된 저장 용량을 초과한 이후 도착한 데이터는 손실될 수 있으며, 손실 된다면 불필요한 응답과 데이터 전송이 빈번히 발생함
    -> 이를 줄이기 위해 송신측의 데이터 전송량을 수신측에 따라 조절 필요

해결방법

Stop and Wait

매번 전송한 패킷에 대해 확인 응답을 받아아 그다음 패킷을 전송하는 방법

Sliding Window

수신측에서 설정한 윈도우 크기만큼 송신측에서 확인응답없이 세그먼트를 전송할 수 있게 하여 데이터 흐름을 동적으로 조절하는 제어기법

  • 동작방식 : 먼저 윈도우에 포함되는 모든 패킷을 전송, 그 패킷의 전달이 확인되는대로 이 윈도우를 옆으로 옮김으로서 그 다음 패킷을 전송
  • Window : TCP/IP를 사용하는 모든 호스트들은 송신하기 위한 것과 수신하기 위한 2개의 Window를 가지고 있음. 호스트들은 실제 데이터를 보내기 전에 '3 way handshaking'을 통해 수신 호스트의 receive window size에 자신의 send window size를 맞추게 됨

수신 윈도우보다 작거나 같은 크기로 송신 윈도우를 지정하면 흐름 제어가 가능

혼잡제어

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

송신측의 데이터는 대형네트워크를 통해 전달되는데 만약 한 라우터에 데이터가 몰릴 경우, 자신에게 온 데이터를 모두 처리할 수 없다. 이런경우 호스트가 재전송하는 과정 등을 거치게 되며 혼잡이 가중되어 오버플로우나 데이터 손실을 유발하게 된다.
이렇게 네트워크의 혼잡을 피하기 위해 송신측에서 보내는 데이터의 전송속도를 강제로 줄이는 작업혼잡제어라고 한다.
(네트워크 내 과도하게 패킷수가 증가하는 현상을 혼잡이라고 함)
흐름제어가 송신과 수신측사이의 전송속도를 다루는데 반해, 혼잡제어는 호스트와 라우터를 포함한 넓은 관점에서 전송 문제를 다룸

해결 방법

AIMD(Additive Increase / Multiplicative Decrease)

처음에 패킷을 하나씩 보내고 문제없이 도착시 window크기(단위 시간 내 보내는 패킷의 수)를 1씩 증가시켜가며 전송하는 법

패킷 전송 실패 혹은 시간 초과시 패킷을 보내는 속도를 절반으로 줄임

이 방식은 여러호스트가 한 네트워크를 공유할 시 나중에 진입하는 쪽이 처음에는 불리하나 시간이 흐르면 평형상태에 수렴하게 됨

문제점 : 초기에 네트워크의 높은 대역폭을 사용하지 못하여 오랜 시간이 걸리고, 네트워크가 혼잡해지는 상황을 미리 감지하지 못함. 즉, 네트워크가 혼잡해지고 나서야 대역폭을 줄이는 방식

Slow Start

AIMD 방식이 네트워크 수용량 주변에서는 효율적이지만 처음 전송 속도를 올리는데 시간이 오래 걸리는 단점이 존재

방식 : AIMD와 마찬가지로 패킷을 하나씩 보내며 시작하고, 문제없이 도착할 시 각각의 ACK 패킷마다 window size를 1씩 늘려줌. 한 주기가 끝나며 window size가 2배가 됨

전송속도는 AIMD에 반해 지수함수 꼴로 증가하지만 혼잡 현상 발생시 window size를 1로 떨어뜨림

처음에는 네트워크 수용량을 예상할 정보가 없지만한버 혼잡현상이 발생하면 네트워크의 수용량을 어느정도 예상 가능
그러므로 혼잡 현상이 발생했던 window size의 절반까지는 이전처럼 지수함수꼴로 창 windows 크기를 증가시킥 이후부터는 완만하게 1씩 증가시킴

Fast Retransmit

빠른 재전송은 TCP의 혼잡 조절에 추가된 정책임
수신측에서 먼저 도착해야할 패킷이 도착하지 않고 다읍 패킷이 도착했을 때도 ACK 패킷을 보냄

단, 순서대로 도착한 마지막패킷의 다음 패킷의 순번을 ACK 패킷에 실어 보냄. 중간에 하나가 손실되게 되면 송신 측에서는 순번이 중복된 ACK 패킷을 받게 되고 이를 감지하여 문제 순번의 패킷을 재전송함

중복된 순번의 패킷을 3개 받으면 재전송을 하게 됨. 약간 혼잡한 상황이 일어난 것이므로 혼잡을 감지, window size를 줄이게 됨

Fast Recovery

혼잡한 상태가 되면 window size를 1로 줄이지 않고 반으로 줄이고 선형증가 시키는 방법이다. 이 정책까지 적용시 혼잡 상황을 한번 겪고 나서부터는 순수한 AIMD 방식으로 동작함

profile
왼쪽 태그보다 시리즈 위주로 구분

0개의 댓글