본문 바로가기

CS지식/네트워크

[CS 지식 - 네트워크] TCP/IP 흐름제어, 혼잡제어

 

  • TCP통신
    - 네트워크 통신에서 신뢰적인 연결방식
    - 기능 : 흐름제어, 혼잡제어
    - TCP는 기본적으로 unreliable network에서 reliable network를 보장 할 수 있도록 하는 프로토콜
    - TCP는 network congesion avoidance algorithm을 사용
  • reliable network보장의 문제점
    - 손실 : packet이 손실 될 수 있는 문제
    - 순서 바뀜 : packet의 순서가 바뀌는 문제
    - Congestion : 네트워크 혼잡 문제
    - Overload : reciver가 overload되는 문제
  • 흐름제어
    - 송신측과 수신측의 데이터 속도 차이를 해결하기 위한 기법
    - Flow Control은 receiver가 packet을 지나치게 많이 받지 않도록 조절하는 것
    - receiver가 sender에게 현재 자신의 상태를 feedback
  • 혼잡제어
    - 송신 측의 데이터 전달과 네트워크의 데이터 처리 속도 차이를 해결하기 위한 기법

1. 흐름제어

  • 수신 측이 너무 많은 패킷을 수신받지 않도록 하기 위함
    ▶수신 측에는 패킷을 수신받는 버퍼의 크기가 정해져있는데, 속도가 너무 빨라 한번에 많은 패킷을 받아버린다면
        버퍼가 가득차 손실되는 패킷들 발생 가능성있음
    ▶송신측의 처리 속도가 빠를 경우 제어 할 수단 필요
    ▶ 이 때, 흐름제어 기법 사용
  • 기본개념 : 수신 측이 송신측에게 자신의 상태를 계속해 알리는 것
    ▶데이터를 더 받을 준비가 되어있다는 피드백이 이루어졌을때, 송신측에서 패킷을 이어서 보내도록 하는 것
  • 패킷 전송 과정
    1. Application Layer : 송신측 Application Layer가 소켓에 데이터를 입력
    2. Transfer Layer : 데이터를 세그먼트로 감싸고 Network Layer에 전달
    3. 수신측 노드로 세그먼트가 전송됨. 동시에 송신측의 Send Buffer와 수신측의 Receive Buffer 각각에 데이터 저장
    4. 수신측 Application Layer에서 준비가 되면, Receive Buffer에 있는 데이터를 읽기 시작
    5. Receive Buffer가 넘쳐나지 않도록 하도록 하는것이 흐름제어의 핵심
    ▶ 이를 위해 RWNK(Receive Window, Receive Buffer의 남은 공간)을 송신측에 게속해 피드백함

1-1. 해결방법

  • Stop and Wait 
    - 매번 전송한 패킷에 대해 응답을 받아야만 그 다음 패킷을 전송하는 방법
  • Sliding Window(Go Back N ARQ)
    - 수신 측에서 설정한 윈도우 크기만큼 송신 측에서 확인응답(ACQ)없이 패킷을 전송할 수 있게 하여 데이터 흐름을 동적으로 조절하는 제어 기법
  • 동작방식
    - 먼저 윈도우에 포함되는 모든 패킷을 전송하고, 그 패킷들의 전달이 확인되는대로 이 윈도우를 옆으로 옮김으로써 그 다음 패킷들을 전송
  • Window
    - TCP/IP를 사용하는 모든 호스트들은 송신하기 위한 것과 수신하기 위해 2개의 Window를 가지고 있음. 호스트들은 실제 데이터를 보내기전에 3 way handshaking을 통해 수신 호스트의 receive window size에 자신의 send window size를 맞추게 됨

2. 혼잡 제어

  • 네트워크 내에 패킷의 수가 과도하게 증가하는 현상을 혼잡이라 하며, 혼잡 현상을 방지하거나 제거하는 가능을 혼잡제어
  • 호스트와 라우터를 포함한보다 넓은 관점에서 전송 문제를 다루게 됨

2-1. 해결방법

  • AIMD(Additive Increase / Multiplicative Decrease)
    - 처음 패킷을 하나씩 보내고 문제없이 도착하면 윈도우의 크기를 1씩 증가시켜가며 전송
      전송에 실패하면 윈도우 크기를 반으로 줄임
    - 단점 : 윈도우 크기를 너무 조금씩 늘리기때문에 네트워크의 모든 대역을 활용하여 제대로된 속도로 통신하기까지 오래걸림
  • Slow Start(느린 시작)
    - 윈도우 크기를 1,2,4,8과 같이 지수적으로 증가시키다가 혼잡이 감지되면 윈도우 크기를 1로 줄이는 방식
    - 장점 : 보낸 데이터의 ACK가 도착할때마다 윈도우 크기를 증가시키기때문에 처음에는 윈도우크기가 조금 느리게 증가할지라도, 시간이 갈수록 윈도우 크기가 점점 빠르게 증가
  • Fast Retransmit(빠른 재전송)
    - 수신자측에서 순서대로 도착하지 않는 경우가 생김. 이러한 상황에서 수신측에서는 순서대로 잘 도착한 마지막 패킷의 다음 순번을 ACK 패킷에 실어서 보냄. 이러한 ACK를 3개 받으면 재전송이 이루어짐
    - 송신측은 자신이 설정한 타임 아웃 시간이 지나지 않았어도 바로 해당 패킷을 재전송할 수 있기 때문에 빠른 재전송률 유지 가능
  • Fast Recovery(빠른 회복)
    - 혼잡한 상태가 되면 윈도우크기를 반으로 줄이고 선형증가시키는 방법
    - 이 방법을 적용하면 혼잡 상황을 한 번 겪고나서부터는 AIMD방식으로 동작

 

더보기