TCP 흐름 제어, 혼잡 제어와 재전송 제어

초보개발·2022년 11월 30일
0

Network

목록 보기
10/10

TCP는 서비스의 데이터 전송의 신뢰성 확보를 위하여 흐름제어, 혼잡 제어 그리고 재전송 제어라는 기능을 이용해 전송한다.

흐름제어

수신 측 단말이 수행하는 흐름양 조정

  • 슬라이딩 윈도우(Sliding window)
    수신측 단말은 윈도우 크기를 이용해 자신이 받을 수 있는 데이터의 양을 알린다. 따라서 송신측은 윈도우 크기까지 확인 응답(ACK)없이 TCP 세그먼트를 보낸다. 수신측이 받아들이지 못하는 일이 없도록 하면서 가능한 많은 데이터를 송신할 수 있도록 한다.

혼잡제어

TCP는 대량의 송신 패킷에 의해 네트워크가 혼잡해지지 않도록 혼잡제어 알고리즘을 통해 패킷의 송신 수(혼잡 윈도우)를 조절한다. 혼잡제어 알고리즘은 혼잡할 경우 혼잡 윈도우를 줄이고, 그렇지 않다면 혼잡 윈도우를 늘린다.

송신측 단말이 수행하는 흐름양 조정

  • 혼잡(congestion): 네트워크의 복잡한 상태

네트워크가 혼잡해지면 결과적으로 패킷이 유실되거나 전송이 지연된다.

혼잡제어 알고리즘

  1. loss base: 패킷 유실이 발생하면 혼잡이라고 판단

  2. latency base: 지연이 발생하면 혼잡이라고 판단

  • RTT(Round Trip Time, 통신 왕복에 걸리는 시간)가 비교적 큰 경우 혼잡 상태에 빠졌음을 감지
  1. hybrid base: 패킷 유실 + 지연 양쪽을 종합적으로 고려해 혼잡이라고 판단

재전송제어

패킷 유실이 발생했을 때 수행하는 패킷 재전송 기능

TCP는 ACK 패킷을 통해 패킷 유실을 감지하고 패킷을 재전송한다.
재전송 제어가 사용되는 시점
1. 수신측이 계기가 되어 수행되는 중복 ACK
2. 송신 측이 계기가 되어 수행되는 재전송 타임아웃

1. 중복 ACK

수신측은 받은 TCP 패킷의 시퀀스 번호가 듬성하면 패킷이 유실되었다고 판단하여 ACK 패킷을 연속해서 보낸다. 여기서 ACK 패킷을 중복 ACK라고 한다.
송신측은 일정 수 이상 중복 ACK를 받으면 대상이 되는 TCP 세그먼트를 재전송한다. 중복 ACK를 트리거로 하는 재전송제어를 Fast Retransmit(고속 재전송)이라고 한다.

  • Fast Retransmit이 발동하는 중복 ACK의 기준값은 OS마다 다르다

2. 재전송 타임아웃

송신측은 TCP 세그먼트를 보내고 나서 ACK 패킷을 기다리기까지의 시간을 재전송 타이머(retransmission timer)로 유지한다.

  • 이 타이머는 적당한 값 유지를 위해 RTT로부터 수학적인 로직 기반으로 산출된다.
  • RTT값이 짧을수록 재전송 타이머도 짧아지며 재전송 타이머는 ACK 패킷을 받으면 초기화된다.

중복 ACK의 개수가 작아 Fast Retransmit이 발동하지 않을 때는 재전송 타임아웃에 도달해 대상이 되는 TCP 세그먼트가 재전송된다.

0개의 댓글