TCP/IP (흐름제어/혼잡제어)

코난·2024년 8월 6일
0

CS 면접 정리

목록 보기
58/67

TCP 통신

  • 네트워크 통신에서 신뢰적인 연결방식
  • TCP는 기본적으로 unreliable network에서, reliable network를 보장할 수 있도록 하는 프로토콜
  • TCP는 network congestion avoidance algorithm(혼잡회피)을 사용함

reliable network의 문제점

  • 손실 : 패킷이 손실될 수 있는 문제
  • 순서 바뀜 : 패킷의 순서가 바뀌는 문제
  • 혼잡 : 네트워크가 혼잡한 문제
  • Overload : 수신측이 overload 되는 문제

흐름제어/혼잡제어

흐름제어

  • 송신측과 수신측의 데이터 처리 속도 차이를 해결하기 위한 기법
  • 흐름 제어는 수신측이 패킷을 지나치게 많이 받지 않도록 조절하는 것
  • 기본 개념은 수신측이 송신측에게 현재 자신의 상태를 피드백한다는 점

혼잡제어

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

전송 과정

  • Application layer : 송신측 Application layer가 소켓에 데이터를 씀
  • Transport layer : 데이터를 세그먼트에 감싸고 Network layer로 넘겨줌
  • 아랫단에서 수신 노드로 전송이 되고 송신측의 송신 버퍼에 데이터를 저장하고 수신측은 수신 버퍼에 데이터를 저장함.
  • Application에서 준비가 되면 이 버퍼에 있는 것을 읽기 시작함.
  • 흐름 제어의 핵심은 이 수신 버퍼가 넘치지 않게 하는 것임.
  • 따라서 수신측은 RWND(Receive WiNDow)로 수신 버퍼의 남은 공간을 홍보함

흐름제어

  • 수신측이 송신측보다 데이터 처리 속도가 빠르면 문제없지만, 송신측의 속도가 빠를 경우 문제가 생김.
  • 수신측에서 제한된 저장 용량을 초과한 이후에 도착하는 데이터는 손실될 수 있으며, 만약 손실된다면 불필요하게 응답과 데이터 전송이 송/수신측간에 빈번히 발생함.
  • 이러한 위험을 줄이기 위해 송신 측의 데이터 전송량을 수신측에 따라 조절해야 함.

해결 방법

  • Stop and Wait : 매번 전송한 패킷에 대해 확인 응답을 받아야만 그 다음 패킷을 전송하는 방법

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

    • 동작 방식
      먼저 윈도우에 포함되는 모든 패킷을 전송하고, 그 패킷들의 전달이 확인되는대로 이 윈도우를 옆으로 옮김으로써 그 다음 패킷들을 전송

    • Window
      TCP/IP를 사용하는 모든 호스트들은 송신하기 위한 것과 수신하기 위한 2개의 window를 가지고 있음. 호스트들은 실제 데이터를 보내기 전에 3 way handshaking을 통해 수신 호스트의 receive window 크기에 자신의 send window 크기를 맞추게 됨.

    • 송신 버퍼
      200 이전 바이트는 전송 완료, 확인 응답 받기 완료! 노란 부분은 전송 완료, 확인 응답 받기 완료 전, 분홍 부분은 전송 완료 전

    • 수신 윈도우

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

    • 송신 윈도우 이동
      before : 203-204 전송하면 수신측에서는 확인 응답 203을 보내고, 송신측은 이를 받아 after 상태와 같이 203-209 범위로 이동해줌

혼잡제어

송신측의 데이터는 지역망이나 인터넷으로 연결된 대형 네트워크를 통해 전달되는데 만약 한 라우터에 데이터가 몰릴 경우, 자신에게 온 데이터를 모두 처리할 수 없게 됨. 이런 경우 호스트들은 또 다시 재전송을 하게 되고 혼잡을 가중시켜서 오버플로우나 데이터 손실을 발생시키게 됨. 이런 현상을 줄이기 위해 송신측에서 보내는 데이터의 전송 속도를 강제로 줄이게 되는데, 이런 작업을 혼잡제어라고 함.

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

해결 방법

  • AIMD (Additive Increase / Multiplicative Decrease)
    처음에 패킷을 하나씩 보내고 이것이 문제없이 잘 도착하면 window 크기를 1씩 증가시켜가며 전송하는 방법으로 실패하거나 일정 시간을 넘으면 패킷의 보내는 속도를 절반으로 줄임. 공평한 방식임. (여러 호스트가 한 네트워크를 공유하고 있으면 나중에 진입하는 쪽이 처음에는 불리하지만, 시간이 흐르면 평형상태로 수렴하게 되는 특징이 있음.) 네트워크가 혼잡해지고 나서야 대역폭을 줄이는 방식임.

  • Slow Start (느린 시작)
    Slow Start 방식은 AIMD와 마찬가지로 패킷을 하나씩 보내면서 시작하고, 패킷이 문제없이 도착하면 각각의 ACK 패킷마다 window size를 1씩 늘려준다. 즉, 한 주기가 지나면 window size가 2배가 됨. 전송속도는 지수 함수 꼴로 증가하고 대신에 혼잡 현상이 발생하면 window size를 1로 떨어뜨리게 됨. 한번 혼잡 현상이 발생하고 나면 네트워크의 수용량을 어느 정도 예상할 수 있음. 혼잡 현상이 발생하였던 window size의 절반까지는 이전처럼 지수 함수 꼴로 창 크기를 증가시키다가 그 이후부터는 완만하게 1씩 증가시킴

  • Fast Retransmit(빠른 재전송)
    TCP의 혼잡 조절에 추가된 정책임. 패킷을 받는 쪽에서 먼저 도착해야 할 패킷이 도착하지 않고 다음 패킷이 도착한 경우에도 ACK 패킷을 보내게 됨. 단, 순서대로 잘 도착한 마지막 패킷의 다음 패킷 순번을 ACK 패킷에 실어서 보내게 되므로 중간에 하나가 손실되면 송신 측에서는 순번이 중복된 ACK 패킷을 받게 됨. 이것을 감지하는 순간 문제가 되는 순번의 패킷을 재전송해줄 수 있음.

profile
몸은 커졌어도, 머리는 그대로... 하지만 불가능을 모르는 명탐정 현아! 진실은 언제나 하나!

0개의 댓글