TCP/IP 흐름제어 & 통신제어

이민구·2023년 12월 19일
0

CS-Study

목록 보기
13/15

TCP (Transmission Control Protocol)

Reliable network(신뢰할 수 있는 네트워크)

  • unreliable network의 문제점을 보장

Unreliable network(신뢰할 수 없는 네트워크)

발생하는 문제

  • 손실(lost): 패킷이 손실될 수 있는 문제
  • 순서 바뀜: 패킷의 순서가 바뀌는 문제
  • 혼잡(Congestion): 네트워크가 혼잡한 문제
  • 과부하(Overload): 수신자가 과부하 되는 문제

데이터 전송 과정

  1. 송신자가 수신자에게 데이터 전송을 시작
  2. 송신자가 데이터를 전송하면 TCP에 의해 데이터가 보내짐
  3. 데이터는 네트워크를 통해 수신자에게 도착
  4. 도착한 데이터는 수신자의 버퍼에 저장
  5. 수신자의 애플리케이션이 버퍼에 저장된 데이터를 읽으면 전송이 완료

발생할 수 있는 문제점

  1. 송신자가 빠른속도로 데이터를 전송할 때, 수신자의 버퍼는 가득차게 되고, 버퍼가 차 있는 동안 데이터 손실이 잃어남
  2. 사용하는 네트워크에 많은 인원의 데이터 전송으로 정체 현상이 발생할 때, 과부하가 일어남

흐름 제어

  1. 송신측의 속도가 빠를 경우

Stop and Wait

  • 매번 전송한 패킷에 대해 확인 응답을 받아야만 그 다음 패킷을 전송

Sliding Window

  • 데이터를 하나만 보내고 응답을 기다리는 것이 아닌, 한 번에 여러 개의 데이터를 보내고 각각에 번호를 매김, 이후 수신자의 응답을 기다림
  • 보내는 과정에서 손실 발생 시 손실 발생한 데이터부터 다시 전송

송신 버퍼

  • 보내야 할 데이터 저장
  • 200 이전의 바이트는 전송, 확인응답을 받음
  • 200 ~ 202 바이트는 전송, 확인응답을 못 받음
  • 203 ~ 211 바이트는 전송 가능

수신 윈도우

  • 받을 수 있는 데이터의 범위 (송신 윈도우보다 작거나 같도록 범위를 송신에서 제어)
  • 200바이트 이전의 데이터

송신 윈도우

  • 현재 전송하거나 전송할 수 있는 데이터의 범위
  • 200 ~ 202 바이트 전송
  • 203 ~ 206 전송 가능

송신 윈도우 이동

  • 203 ~ 204 바이트 전송, 수신 측에서 확인 응답,
    송신측은 203~209 범위로 이동
  • 205 ~ 209 전송 가능

혼잡 제어

  1. 사용하는 네트워크에 많은 인원의 데이터 전송 할 때
  • 한 라우터에 데이터가 몰릴 경우, 송신자는 라우터가 처리하지 못한 데이터를 잃어버린 데이터로 간주하고 다시 보내게 되어 혼잡하게 됨
  • 흐름 제어는 송신, 수신 사이의 전송속도를 조절
  • 혼잡 제어는 호스트와 라우터를 포함한 보다 넓은 관점

AIMD(Additive Increase / Multiplicative Decrease)

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

문제점

  • 초기에 네트워크의 높은 대역폭을 사용하지 못하여 오랜 시간이 걸리게 되고, 네트워크가 혼잡해지는 상황을 미리 감지하지 못함
    (= 네트워크가 혼잡해지고 나서야 대역폭을 줄이는 방식)

Slow Start (느린 시작)

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

Fast Retransmit (빠른 재전송)

  • 수신자가 예상한 순서대로 패킷을 받지 못했을 때 사용
  • 특정 패킷이 도착하지 않고 다음 패킷이 먼저 도착하면, 수신자는 누락된 패킷에 대한 순번을 가진 ACK(확인 응답) 패킷을 여러 번 보냄
  • 송신자는 같은 순번의 ACK를 세 번 받으면 해당 패킷이 누락됐다고 판단하고 재전송
  • 이 과정에서 네트워크의 혼잡 상태를 감지하고 윈도우 크기를 조절해 전송 효율을 관리

Fast Recovery (빠른 회복)

  • 혼잡한 상태가 되면 window size를 1로 줄이지 않고 반으로 줄이고 선형증가시키는 방법
  • 혼잡 상황을 한번 겪고 나서부터는 순수한 AIMD 방식으로 동작하게 됨

0개의 댓글