Fast Retransmit (빠른 재전송)

  • 타이머의 타임 아웃 기간이 상대적으로 너무 길어 타이머가 종료되기 전이라도 중복된(duplicate) ACK를 3번 받으면 바로 재전송을 하는 기능 → 수신측이 기다리는 순서번호의 세그먼트보다 큰 순서번호의 세그먼트가 3개 도착할 경우를 의미
  • 손실된 패킷을 재전송하기 전 발생하는 긴 지연시간을 줄여줌
  • Fast Retransmit는 또 다른 말로, Triple-Duplicate-ACK이라고 하며 3개의 중복된 ACK를 받으면 재전송하는 것
  • Duplicate ACK 수신을 통해 세그먼트가 손실되었음을 감지 → 손실된 경우 수신 측은 여러 중복 ACK들을 발생시킴
  • 송신자는 동일한 데이터에 대해 3개의 ACK를 수신하면 ACK된 데이터 이후의 세그먼트가 손실된 것으로 가정
    1. Duplicate ACK는 비정상적인 순서(out-of-order)의 패킷이 수신될 시 수신 측에서 발생시킴 → 현재까지 ACK가 완료된 패킷 다음 패킷이 손실 난 상태에서 다음 패킷들이 계속 수신되는 경우
    2. Host A에서 보낸 2번째 패킷이 손실되어 Host B는 3, 4, 5번째 패킷 수신 시에 duplicate ACK를 보내게 됨
    3. RTO 타이머가 종료되기까지 시간이 남았지만, Host A는 2번째 패킷이 손실된 것으로 가정하고 재전송함

Flow Control(흐름 제어)

  • TCP 송신자가 데이터를 너무 빠르게 또는 너무 많이 전송하여 수신버퍼가 오버플로우(Overflow)하는 것을 방지
  • Flow Control(흐름 제어)는 송신측과 수신측의 데이터처리 속도 차이를 해결하기 위한 기법
    1. 수신측이 송신측보다 속도가 빠른 것은 아무 문제가 되지 않음
    2. 송신측이 수신측보다 속도가 빠르면 문제가 발생
  • 수신측에서 수신된 데이터를 처리해서 윗 계층으로 서비스 하는 속도보다 송신측에서 보내는 데이터 속도가 더 빠르다면, 수신측에서 제한된 저장용량(일반적으로 큐)을 초과하여, 도착하는 데이터의 손실을 가져올 수있음
  • 속도 차이로 인해 발생한 데이터의 손실을 복구하기 위해 불필요하게 응답과 재전송의 데이터가 필요 → 다시 송신측과 수신측간에 이동
  • 수신측의 저장공간이 초과되어 발생하는 불필요한 재전송을 줄이기 위해 강제로 송신측의 데이터 전송을 줄임
  • Flow Control(흐름 제어)는 속도를 일치시키는 서비스 → 애플리케이션 프로세스의 읽는 속도 = 송신자가 데이터를 전송하는 속도
  • Receive Window(rwnd)

    1. 수신버퍼의 가용 바이트 수로, 송신 윈도우 크기를 결정

    2. 수신 버퍼보다 작아야함 → 초과하면 오버플로우 발생

      LastByteRcvd - LastByteRead <= RcvBuffer
      [밑에서 수신 받은 번호 - 위로 올려 보낸 번호 = 수신했지만 상위계층으로 전송되지 않은 데이터들]
      
      rwnd = RcvBuffer - (LastByteRcvd - LastByteRead)
       = RcvBuffer - (수신했지만 상위 계층으로 전송하지 않은 데이터들)

  • 수신자는 TCP헤더에 수신버퍼안에 있는 여유공간(Receive Window, rwnd) 값을 포함함으로써 버퍼에 공간이 있음을 송신자에게 알림

  • 수신버퍼의 크기는 소켓의 옵션을 통해 설정되는데 디폴트 값이 4096바이트

1. Stop and wait 방식

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

2. 슬라이딩 윈도우 기법

  • 수신 측에서 설정한 윈도우 크기만큼 송신 측에서 확인 응답 없이 세그먼트를 전송할 수 있게 하여 데이터 흐름을 동적으로 조절하여 제어하는 기법
  • 슬라이딩 윈도우 기법을 통하여 송신 버퍼의 범위는 수신 측의 여유 버퍼 공간을 반영하여 동적으로 바뀜으로써 흐름제어를 수행


Congestion control(혼합 제어)

  • 호스트와 네트워크 상의 데이터처리를 효율적으로 하기 위한 기법
  • 송신측의 데이터 전달과 네트워크의 처리속도 차이를 해결
  • 송신측의 데이터는 지역망이나 인터넷으로 연결된 대형 네트워크를 통해 전달 → 네트워크 상의 라우터가 항상 바쁜 상태임
  • 하나의 라우터에 데이터가 몰려 혼잡한 경우에, 라우터는 자신에게 온 데이터를 모두 처리할 수 없음
  • 호스트들은 라우터에서 손실된 데이터를 재전송을 하게 되고 결국 혼잡을 가중시켜 오버플로우나 데이터 손실을 발생
  • 네트워크의 혼잡을 피하기 위해 송신측에서 보내는 데이터의 전송 속도를 강제로 줄이게 됨

1. Slow start

  • 윈도우 크기를 2배로 늘림
  • 혼잡현상이 발생하면 창 크기를 1로 떨어뜨림
  • 혼잡현상이 발생했던 창 크기의 절반까지는 이전처럼 지수 함수 꼴로(2배로) 창 크기를 증가시키고 그 이후부터는 완만하게 1씩 증가시킴

2. Fast Recovery

  • 혼잡한 상태가 되면 창 크기를 1로 줄이지 않고 반으로 줄이고 선형 증가시키는 방식


참고 URL : https://pcmc.tistory.com/entry/190618-TCP-Retransmission
참고 URL : https://movefast.tistory.com/36
참고 URL : https://dlee0129.tistory.com/204

+ Recent posts